首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.gethostbyaddr()并不适用于所有设备。为什么?(Python)

问.gethostbyaddr()并不适用于所有设备。为什么?(Python)
EN

Stack Overflow用户
提问于 2016-08-27 02:25:48
回答 1查看 1.4K关注 0票数 1

我写了一个脚本,通过'0‘网络中的所有本地in (192.168.0.*)。

我在socket.gethostbyaddr(ip_modified_by_the_loop_each_time)中使用循环。

循环返回3个设备--它们的主机名。现在,我发现它没有找到4个设备(至少)。

  • 它确实让我的Windows笔记本电脑,而不是我的Android手机。它确实发现
  • 一个MacBook,不是iMac,另一个MacBook。它也没有
  • 找任何电话。

我知道所有的设备都是在线的,并且有一个IPv4地址。

我可以很好的击打他们,它的反应很好。但是当我使用socket.gethostbyaddr(ip_modified_by_the_loop_each_time)时,它会抛出一个错误。

我用try:/except:语句来避免错误,但是它仍然不能通过IP找到我的手机并得到主机名,但我知道它在那里。我正在使用python 3.3

为什么会发生这种事,怎么解决呢?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-08-27 05:41:01

gethostbyaddr试图使用本地存储的信息(即/etc/hosts)或反向DNS查找来查找给定IP地址的主机名。结果并不取决于主机是否在线,它们只取决于这些信息的可用性。

这些信息也是不可信的。例如,域的DNS运算符可以添加以下记录:

代码语言:javascript
复制
  test.example.com       A    public.ip.of.test
  public.ip.of.test      PTR  localhost.

在这种情况下,查找(gethostbyname)的test.example.com将返回此主机的IP地址,而反向查找(gethostbyaddr)将声明主机名为localhost。如果PTR记录丢失,即使主机处于联机状态,gethostbyaddr也会失败。

另见维基百科:反向dns查找。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39176870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档