【问题标题】:Get all IPs associated with a URL, Python获取与 URL、Python 关联的所有 IP
【发布时间】:2016-03-09 13:24:36
【问题描述】:

我正在尝试查找与 URL 关联的所有 IP。我一直在使用“socket”包,但对不同功能返回的不同数量的 IP 感到困惑。例如见下文。有没有返回所有IP的功能?

socket.gethostbyname('google.com')
#returns 1 ip

socket.gethostbyname_ex('google.com')
#returns 6 ips

socket.getaddrinfo('google.com', 80)
#returns 12 ips

有没有返回所有IP的函数?

【问题讨论】:

  • 您需要查看 DNS 库而不是套接字库。类似dnspython.org

标签: python


【解决方案1】:

不,没有返回“所有”IP 的功能。您看到的 IP 地址是您的本地 DNS 服务器知道的google.com。这些地址因地而异。

出于某种原因,所有方法的行为都不同

  • gethostbyname 在此主机的 A 记录中返回 1 个 IPv4 地址。这是为了“让我们连接任何google.com 的地址”这样简单的东西。

  • gethostbyname_ex 返回所有已知的 IPv4 地址;即,google.com 的 A 记录中的所有地址。这适用于您需要高可用性的情况,因此您可以尝试连接其中几个 IPv4 地址并继续连接成功。

  • 由于以上都不支持 IPv6 地址,socket.getaddrinfo 也会返回它们。除非您还提供参数 proto=socket.IPPROTO_TCP,否则您将拥有一些额外的协议,例如重复 3 次相同地址 - 例如 TCP、UDP 和 RAW 套接字。

在这 3 个中,socket.getaddrinfo 提供了“大多数” IP 地址,但由于 DNS 和特别是 google 的 DNS 的分布式特性,您无法获得它们全部

【讨论】:

    猜你喜欢
    • 2015-10-10
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多