socket.gethostbyname行为不好

时间:2012-01-08 15:41:33

标签: python sockets gethostbyname

我正在使用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 个答案:

答案 0 :(得分:1)

gethostbyname()完全没有问题 - 域lns.sa确实不存在。

地址67.215.65.132是OpenDNS为不存在的域提供的地址。它的名字是hit-nxdomain.opendns.com.

您很可能配置了一个OpenDNS服务器,而另一个配置了一个。 OpenDNS正在重写任何“未找到”的域名,而其他提供商则不会。