获取与URL相关联的所有IP,Python

时间:2016-03-09 13:24:37

标签: python

我正在尝试查找与URL关联的所有IP。我一直在使用包#34; 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的功能?

1 个答案:

答案 0 :(得分:3)

不,没有返回“所有”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和谷歌DNS的分布式特性,你无法获得所有