socket.gethostbyname表现不正常

3 投票
1 回答
5683 浏览
提问于 2025-04-17 09:48

我正在使用 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

其实,gethostbyname() 这个函数没有任何问题,域名 lns.sa 确实是不存在的。

地址 67.215.65.132 是 OpenDNS 提供的,用来表示那些不存在的域名。它的名字是 hit-nxdomain.opendns.com.

很可能你配置了一个 OpenDNS 的服务器,还有一个其他公司的服务器。OpenDNS 会对那些“找不到”的域名进行处理,而其他提供商则不会。

撰写回答