我编写了一个脚本,该脚本遍历“0”网络(192.168.0。*)中的所有本地IP。
我使用socket.gethostbyaddr(ip_modified_by_the_loop_each_time)
循环。
循环返回3个设备的主机名。
现在,我发现它找不到4个设备(至少)。
我知道所有设备都在线并且具有IPv4地址。
我可以对它们执行ping操作,它的响应很好。但是当我使用
socket.gethostbyaddr(ip_modified_by_the_loop_each_time)
时会引发错误。我使用了
try:
/except:
语句来解决该错误,但是它仍然无法通过IP找到我的电话并获取主机名,但是我知道它在那里。我正在使用python 3.3
为什么会发生这种情况,如何解决呢?
谢谢你。
最佳答案
gethostbyaddr尝试通过使用本地存储的信息(即/etc/hosts
)或进行反向DNS查找来查找给定IP地址的主机名。结果不取决于主机是否在线,它们仅取决于这些信息的可用性。
而且这些信息也不能被信任。例如,域的DNS运营商可以添加以下记录:
test.example.com A public.ip.of.test
public.ip.of.test PTR localhost.
在这种情况下,
gethostbyname
的查找(test.example.com
)将返回该主机的IP地址,而反向查找(gethostbyaddr
)将声明主机名是localhost
。并且,如果PTR记录丢失,即使主机处于联机状态,gethostbyaddr
也将失败。另请参见wikipedia: reverse dns lookup。
关于sockets - .gethostbyaddr()不适用于所有设备。为什么? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39176870/