2014-05-22 3 views
3

je veux obtenir l'adresse de la machine privée locale, exécutant le morceau de code suivant:erreur de socket - python

socket.gethostbyaddr(socket.gethostname()) 

donne l'erreur:

socket.herror: [Errno 2] Host name lookup failure 

je sais que je peux voir l'adresse de la machine locale , en utilisant

socket.gethostbyname(socket.gethostname()) 

mais il montre l'adresse publique de mon réseau (ou machine) et ifcofig montre une autre adresse pour mon wlan. quelqu'un peut-il m'aider sur cette question? Merci

+0

avez-vous importer socket ?? – ruddra

+2

@ruddra si elle ne le faisait pas, cela entraînerait une erreur totalement différente ('NameError'), cela ne semble pas être le problème ici. –

+0

oui j'ai importé socket et installé nscd – Maria

Répondre

1

Je crois que vous allez trouver netifaces un peu plus utile ici.

Il semble s'agir d'une bibliothèque multiplate-forme pour gérer les interfaces réseau.

Exemple:

>>> from netifaces import interfaces, ifaddresses 
>>> interfaces() 
['lo', 'sit0', 'enp3s0', 'docker0'] 
>>> ifaddresses("enp3s0") 
{17: [{'broadcast': 'ff:ff:ff:ff:ff:ff', 'addr': 'bc:5f:f4:97:5a:69'}], 2: [{'broadcast': '10.0.0.255', 'netmask': '255.255.255.0', 'addr': '10.0.0.2'}], 10: [{'netmask': 'ffff:ffff:ffff:ffff::', 'addr': '2001:470:edee:0:be5f:f4ff:fe97:5a69'}, {'netmask': 'ffff:ffff:ffff:ffff::', 'addr': 'fe80::be5f:f4ff:fe97:5a69%enp3s0'}]} 
>>> 
>>> ifaddresses("enp3s0")[2][0]["addr"] 
'10.0.0.2' # <-- My Desktop's LAN IP Address. 
+0

tnx qui a bien fonctionné et était ce que je voulais, mais y at-il un moyen de trouver l'adresse IP à l'aide de sockets? – Maria

+0

Non, pas vraiment. Pas de la façon dont tu décris. Les modules '' sockets'' ne fournissent que les deux fonctions que vous avez déjà vues et sont limitées au mieux. –

+0

tnx pour clarifier – Maria