我正在尝试查找与某个 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的函数?
不,没有返回“所有”IP 的功能。您看到的 IP 地址是您的本地 DNS 服务器所知道的google.com
。这些地址因地点而异。
所有方法的行为都不同,这是有原因的
gethostbyname
返回该主机 A 记录中的 1 个 IPv4 地址。这是为了简单的事情“让我们连接任何地址google.com
".
gethostbyname_ex
返回所有已知的 IPv4 地址;也就是说,A 记录中的所有地址google.com
。这是针对您需要高可用性的情况,因此您可以尝试连接其中几个 IPv4 地址,然后继续成功的连接。
由于以上都不支持 IPv6 地址,socket.getaddrinfo
也返回它们。除非你也提供论据proto=socket.IPPROTO_TCP
,您将有一些额外的协议,例如相同的地址重复 3 次 - 例如 TCP、UDP 和 RAW 套接字。
这 3 个中,socket.getaddrinfo
给出了“大部分”的 IP 地址,但是由于 DNS 的分布式特性,尤其是 google 的 DNS,您无法获取它们all.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)