我写了一个脚本,遍历了' 0'中的所有本地IP。网络(192.168.0。*)。
我使用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
为什么会发生这种情况,如何解决?
谢谢。
答案 0 :(得分:0)
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
)将声明主机名为{{1} }。如果PTR记录丢失,localhost
将失败,即使主机在线。