我正在尝试查找与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的功能?
答案 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的分布式特性,你无法获得所有