gpt4 book ai didi

sockets - .gethostbyaddr()不适用于所有设备。为什么? (Python)

转载 作者:行者123 更新时间:2023-12-03 12:04:03 24 4
gpt4 key购买 nike

我编写了一个脚本,该脚本遍历“0”网络(192.168.0。*)中的所有本地IP。

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

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

  • 它确实缠绕了Windows笔记本电脑,而不是Android Phone。它确实找到
  • 一台MacBook,而不是iMac,而不是另一台MacBook。它也没有
  • 找到任何电话。

  • 我知道所有设备都在线并且具有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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com