socket.gethostbyname не ведет себя хорошо - PullRequest
3 голосов
/ 08 января 2012

Я использую функцию gethostbyname для проверки DNS и IP-адресов.Тем не менее, в этом случае он работает не очень хорошо:

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

Он дает два разных ответа: один относится к OpenDNS, а другой - Name or service not known, правильный.Через пару секунд все работает нормально.Может ли кто-нибудь объяснить это поведение и является ли gethostbyname надежным для использования?

1 Ответ

1 голос
/ 08 января 2012

С gethostbyname() нет ничего плохого - домен lns.sa действительно не существует.

Адрес 67.215.65.132 - это адрес, предоставленный OpenDNS для несуществующих доменов. Это имя hit-nxdomain.opendns.com.

Скорее всего, у вас настроен один сервер OpenDNS и один от другого. OpenDNS переписывает любые «не найденные» домены, другой провайдер - нет.

...