为什么PING域名得到IP与实际公网IP不符

11-14

1.ping命令返回一个公网ip地址,但是这个ip地址和花生壳客户端所在机器的当前公网ip不一致

例如ping ping-is-no-good.gicp.net,返回的ip是59.37.71.85,如下图:

为什么PING域名得到IP与实际公网IP不符

而当前花生壳登录的电脑通过路由器上网,路由器的wan口ip是121.32.186.189,也就是说花生壳登录的这台电脑的公网ip是121.32.186.189。

①遇到这种情况,首先要确认是不是你的电脑中的DNS缓存尚未刷新导致。

想象这样一个例子:你刚才在电脑C打开浏览器访问域名ping-is-no- good.gicp.net,发现浏览器提示“您输入的域名和网址无法访问”,这时C的DNS缓存中留下了一个关于此域名的ip地址记录。你检查了服务器 S,发现花生壳的客户端离线了,接下来你把花生壳客户端重新登录在线,这时你再在电脑C上去访问这个域名,很可能此时本机的DNS缓存会返回给你之前的 ip地址,而不是S当前的公网ip地址。

下面是具体过程:

用命令” ipconfig /displaydns”可以看到本机DNS缓存中的所有记录。发现其中有一条关于ping-is-no-good.gicp.net的记录如下图所示:

为什么PING域名得到IP与实际公网IP不符

计算机ping一个域名时,会先去本机的DNS缓存中查找,上面看到的DNS缓存中的信息就影响了ping的结果。

这时用命令” ipconfig /flushdns”可以清除本机DNS缓存中的所有记录,如下图所示:

为什么PING域名得到IP与实际公网IP不符

清除了缓存后,再ping域名,就可以排除本机DNS缓存的影响,这时返回的ip地址就是正确的,如下图所示:

为什么PING域名得到IP与实际公网IP不符

②有时候你会发现清除了本机的DNS缓存后,ping域名得到的ip仍然不是正确的ip地址。这时候很可能是你的宽带接入商的地区DNS服务器尚未刷新数据,也就是它尚未同步DNS数据,那么当你的花生壳所在电脑的 ip地址变化了之后,虽然Oray的DNS服务器已经将ping-is-no-good.gicp.net指向了当前的新ip地址,但是你那个地区的接入商的DNS服务器返回给你电脑的ping-is-no-good.gicp.net的ip地址还是之前的旧ip地址。如下图所示:

为什么PING域名得到IP与实际公网IP不符

这种时候你要做的就是把本机DNS服务器设置为当地最高效的DNS服务器,你可以直接拨打你的宽带接入商的服务电话询问并把问到的高效DNS地址设置到你的电脑上即可。例如将电脑的主DNS从202.96.128.86改为 202.96.128.166,然后用命令” ipconfig /flushdns”清除本机DNS缓存后,再ping ping-is-no-good.gicp.net,结果正确,如下图所示:

为什么PING域名得到IP与实际公网IP不符

2. ping命令返回一个局域网ip地址

如下图所示:

为什么PING域名得到IP与实际公网IP不符

192.168.0.2是一个局域网ip地址,在公网上是无效的。

造成这种情况的原因,一般是用户在本机的hosts文件中添加了一条关于ping-is-no-good.gicp.net的ip地址记录。

Hosts文件是一个用于存储计算机网络中节点信息的文件,它可以将主机名映射到相应的IP地址,实现DNS的功能,它可以由计算机的用户进行控制。Hosts文件只对本机有效。

Hosts文件的存储位置在不同的操作系统中并不相同,甚至不同Windows版本的位置也不大一样。Windows NT/2000/XP/2003/Vista:默认位置为%SystemRoot%/system32/drivers/etc/。例如 c:/windows/system32/drivers/etc/。

修改本机的Hosts文件,一般出于以下几种应用目的:

(1)加快域名解析

如果在Hosts中配置了某个域名和IP的映射关系,当输入域名计算机就能很快从本机的Hosts文件中查找到该域名的IP,而不用请求网络上的DNS服务器查询,从而提高域名解析速度。

(2)方便局域网用户

在很多局域网中,会有内部服务器提供给用户使用。但由于局域网中一般很少架设DNS服务器,访问这些服务器时,要输入难记的IP地址。管理员可以分别给这些服务器取个容易记住的名字,然后在每个用户机器的Hosts中建立IP映射,这样以后访问的时候,只要输入这个服务器的名字就行了。

(3)屏蔽网站

对于某些不良网站,我们可以利用Hosts把该网站的域名映射到错误的IP或本地计算机的IP,这样本机就访问不到了。在WINDOWSX系统中,约定127.0.0.1为本地计算机的IP地址, 0.0.0.0是错误的IP地址。

如果在Hosts中,写入以下内容:

127.0.0.1要屏蔽的网站A

0.0.0.0 要屏蔽的网站B

这样,计算机解析域名A和B时,就解析到本机IP或错误的IP,达到了屏蔽网站A和B的目的。某些杀毒软件就是通过修改Hosts文件达到屏蔽不良网站的目的。

(4)顺利连接某些特殊系统

对于Lotus的服务器和一些数据库服务器,在访问时如果直接输入IP地址那是不能访问的,只能输入服务器名才能访问。那么配置好Hosts文件,这样输入服务器名就能顺利连接了。

例如:某服务器管理员在服务器的Hosts文件中加了一条记录:

192.168.0.2 ping-is-no-good.gicp.net

如下图所示:

为什么PING域名得到IP与实际公网IP不符

那么你在服务器上去ping域名ping-is-no- good.gicp.net,得到的ip是192.168.0.2,同时你如果看一下花生壳客户端上ping-is-no-good.gicp.net的域名诊断,会发现域名诊断提示域名指向192.168.0.2,提示域名解析错误,如下图所示:

为什么PING域名得到IP与实际公网IP不符

这都是本机Hosts文件造成的影响。只要在”192.168.0.2 ping-is-no-good.gicp.net”这一行前面加个”#”号把它变成注释,或者直接删掉这一行,然后保存文件,就可以消除这个影响。改变hosts文件后,查询结果如下:

为什么PING域名得到IP与实际公网IP不符
为什么PING域名得到IP与实际公网IP不符

总结:

在计算机上ping一个域名时,首先会去查询该域名的ip地址,查到了再ping这个ip地址。

计算机查询域名ip地址的过程如下:

①在本机DNS缓存中查询(本机Hosts文件中任何域名到ip地址的映射都将加载到本机DNS缓存中)

如果本机DNS缓存中有关于该域名的记录,那么返回记录中对应的ip地址,清除了本机DNS缓存就可以消除此影响。如果该记录是从Hosts文件加载到本机DNS缓存的,那么必须通过修改Hosts文件消除此影响。

②若本机DNS缓存中没有对应的记录,将向本机的主DNS服务器询问

DNS服务器接收到查询时,会首先查找能否根据在服务器的就地配置区域中获取的资源记录信息作出权威性的应答,若没有该域名的信息,再检查它能否通过本地缓存的先前查询信息(从以前DNS查询应答的响应中获取的资源记录将被添加至缓存并保留一段时间)来解析域名,若仍然没有查找到该域名的对应记录,将使用递归查询域名,即询问其他DNS服务器帮助解析域名。

下图所示为本机尝试访问www.microsoft.com 的解析过程:

为什么PING域名得到IP与实际公网IP不符

从上面的过程看,受本机DNS缓存、Hosts文件、地区DNS服务器刷新时间等因素影响,你ping域名得到的ip地址可能根本不是Oray的DNS服务器将你的域名解析到的ip地址。

其实,ping命令不是用来检测域名当前解析到的公网ip的,Ping命令是通过ICMP协议进行检测网络连通性的一个工具,除了上面说到的因素,防火墙或路由器访问规则也可能造成ping域名得到的ip地址不是花生壳真正将域名指向到的ip地址,并且也有可能ping不通。

你可以直接用下面的命令来查询:

nslookup ping-is-no-good.gicp.net ns1.oray.net 或者 nslookup ping-is-no-good.gicp.net ns2.oray.net

ns1.oray.net和ns2.oray.net是Oray的两台DNS服务器域名。以上两个命令直接指定以Oray的DNS服务器作为命令询问的对象,是不受本机DNS缓存、Hosts文件、地区DNS服务器刷新时间的因素影响的。命令将返回ping-is-no-good.gicp.net当前被花生壳解析到的ip地址。例如下图中,查询到的ip地址是58.62.105.187: