python和cmd查找ip地址的区别

2024-09-29 02:21:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中编写了查找googleip的代码

import socket
print socket.gethostbyname('google.com')
.
.
173.194.39.0

但如果我们使用命令提示符和ping命令来查找googleip,结果是:216.58.208.36 为什么两个结果有差别?你知道吗


Tags: 代码import命令comgooglesocketpingprint
2条回答

主机名通过一个叫做DNS服务器的东西被转换成IP地址。在web浏览器中键入名称或使用程序(如ping)时,您提供的主机名(谷歌网站)最终到达该域的权威DNS服务器,与实际内容对应的服务器分离。你知道吗

你知道吗谷歌网站有多个不同的服务器可以响应数据请求。根据您用于生成请求的不同程序的实现以及其他因素(如发出请求时的网络流量),来自同一主机的多个请求可能会被权威DNS服务器定向到不同的服务器。这是通过向您的计算机返回不同的IP地址来实现的。你知道吗

FWIW,ping和socket.gethostbyname()用于谷歌网站在我的机器上解析为216.58.217.14,运行OS X Yosemite。你知道吗

这两个IP地址都解析为古戈尔. 我们可以通过unix whois命令从命令行验证这一点。你知道吗

$ whois 216.58.208.36 

NetRange:       216.58.192.0 - 216.58.223.255
CIDR:           216.58.192.0/19
NetName:        GOOGLE

$ whois 173.194.39.0

NetRange:       173.194.0.0 - 173.194.255.255
CIDR:           173.194.0.0/16
NetName:        GOOGLE

我遇到了同样的问题,原因是需要IP地址的第一个命令使用了缓存的DNS条目(因为DNS条目的生存时间(TTL)尚未过期),然后在发出第二个命令时,缓存条目上的TTL已过期,因此为域发出了新的DNS请求,因此获取了来自DNS服务器的新IP地址恰好不同,因为域有很多IP地址,就像古戈尔. 你知道吗

Python只依赖于操作系统的DNS解析器(或者任何正在运行的守护进程),据我所知,socket模块不能在解析地址之前清除DNS缓存。如果你想更多的控制这个功能,你可以使用DNSPython或类似的东西。如果您在您的操作系统上(例如在Linux上)使用DNS守护程序,那么通常重新启动守护程序将强制刷新DNS缓存,并且您发现这两个地址是相同的(除非您遇到如上所述的TTL过期的定时问题)。你知道吗

相关问题 更多 >