我写了一个脚本,通过'0‘网络中的所有本地in (192.168.0.*)。
我在socket.gethostbyaddr(ip_modified_by_the_loop_each_time)中使用循环。
循环返回3个设备--它们的主机名。现在,我发现它没有找到4个设备(至少)。
我知道所有的设备都是在线的,并且有一个IPv4地址。
我可以很好的击打他们,它的反应很好。但是当我使用socket.gethostbyaddr(ip_modified_by_the_loop_each_time)时,它会抛出一个错误。
我用try:/except:语句来避免错误,但是它仍然不能通过IP找到我的手机并得到主机名,但我知道它在那里。我正在使用python 3.3
为什么会发生这种事,怎么解决呢?
谢谢。
发布于 2016-08-27 05:41:01
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也会失败。
另见维基百科:反向dns查找。
https://stackoverflow.com/questions/39176870
复制相似问题