2016-07-07 1 views
4

Я пытаюсь получить ipaddress человека, который вошел в систему, используя приведенный ниже код, но я получаю сообщение об ошибке.Имя или услуга неизвестна

>>> 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 

Тот же код работает в другой linux box. Не уверен, что я исправлю это.

+0

здесь работает на Arch 64-битной на ядре 4.6. 2 –

+0

Что произойдет, если вы просто выполните 'socket.gethostname()'? –

+0

Правильно введите имя экземпляра. – user1050619

ответ

0

Проверьте, что возвращается socket.gethostname() и проверьте, можете ли вы его скачать. В основном это ошибка поиска. Проверьте свой /etc/hosts, чтобы узнать, указана ли она. Я знаю, что это кажется странным, но я думаю, что если возвращаемое имя хоста не имеет записи, вы получите отказ службы имени, что и есть.

1

Ошибка произошла только из-за неправильной настройки имени хоста. Установите имя хоста в трех разных местах, которые находятся в -

  1. /и т.д./имя хоста
  2. /и т.д./хосты
  3. запустить команду $ имя хоста

затем выйти из системы и входа в систему еще раз. Вы сделали.

0

Если вы работаете с IPv6 или с серверами с несколькими сетевыми интерфейсами, эта команда будет работать некорректно.

Вместо этого, вы можете использовать эту команду, которая пытается подключиться к серверу DNS Google в 8.8.8.8 на порту 53, и вернуть Ваш 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])