2012-01-08 6 views
3

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

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

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

ответ

1

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

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

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