2016-07-07 2 views
4

J'ai essayé d'obtenir l'adresse IP de la personne qui s'est connectée à la machine en utilisant le code ci-dessous, mais j'ai une erreur.Nom ou service inconnu

>>> import socket 
>>> socket.gethostbyname_ex(socket.gethostname()) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
socket.gaierror: [Errno -2] Name or service not known 

Le même code fonctionne dans une autre boîte Linux. Je ne suis pas sûr de le réparer.

+0

ici Œuvres Arch 64 bits sur le noyau 4.6. 2 –

+0

Que se passe-t-il si vous faites 'socket.gethostname()'? –

+0

Je reçois le nom de l'instance correctement. – user1050619

Répondre

0

Vérifiez ce qui est retourné par socket.gethostname() et voyez si vous pouvez le cingler. Fondamentalement, ceci est un échec de recherche. Vérifiez votre /etc/hosts pour voir si elle est répertoriée. Je sais que cela semble étrange, mais je pense que si le nom d'hôte retourné n'a pas d'entrée, vous obtiendrez un échec de service de nom qui est ce que c'est.

1

Une erreur s'est produite simplement parce que le nom d'hôte n'a pas été configuré correctement. Définir le nom d'hôte à trois endroits différents, qui sont -

  1. /etc/nom d'hôte
  2. /etc/hosts
  3. commande run $ hostname

puis déconnectez et connectez-vous encore. Vous avez terminé.

0

Si vous travaillez avec IPv6 ou avec des serveurs avec plusieurs interfaces réseau, cette commande ne fonctionnera pas correctement.

Au lieu de cela, vous pouvez utiliser cette commande qui tente de se connecter au serveur DNS Google à 8.8.8.8 au port 53, et retourner votre ip:

import socket 
print([(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1])