【转】烂泥:为什么PING域名得到IP与实际公网IP不符

本文由秀依林枫提供友情赞助,首发于烂泥行天下

很多用户在检查花生壳的域名解析时,习惯于使用ping域名的方法。实际上这个方法经常会误导我们。为什么这么说呢?假设我们的域名是ping-is-no-good.gicp.net,当我们在命令提示符界面输入”ping ping-is-no-good.gicp.net”查询到的域名的ip地址有这样几个可能:

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

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

clip_image001

而当前花生壳登录的电脑通过路由器上网,路由器的wan口ip是121.32.186.189,也就是说花生壳登录的这台电脑的公网ip是21.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的记录如下图所示:

clip_image002

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

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

clip_image003

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

clip_image004

②有时候你会发现清除了本机的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地址。如下图所示:

clip_image005

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

clip_image004[1]

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

如下图所示:

clip_image006

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

如下图所示:

clip_image007

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

clip_image008

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

clip_image004[2]

clip_image009

总结:

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

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

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

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

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

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

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

clip_image010

从上面的过程看,受本机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:

clip_image011

这时候你只要查看花生壳所登录的那台电脑的公网ip,如果也是58.62.105.187,那么说明花生壳的解析是正确的。

Q:修改了域名解析的配置,并且已经解析成功了,但有的用户还是无法正确访问域名。

A:原因可能会出在用户本机DNS缓存不能有效更新,下面总结一下如何有效清除本机DNS缓存。

计算机对域名访问时并不是每次访问都需 要向DNS服务器寻求帮助的,一般来说当解析工作完成一次后,该解析条目会保存在计算机的DNS缓存列表中,如果这时DNS解析出现更改变动的话,由于 DNS缓存列表信息没有改变,在计算机对该域名访问时仍然不会连接DNS服务器获取最新解析信息,会根据自己计算机上保存的缓存对应关系来解析,这样就会出现DNS解析故障。

这时我们应该通过清除DNS缓存的命令来解决故障。

清除DNS缓存命令

开始 - 运行- 输入 "cmd" 回车 - 输入 "ipconfig /flushdns" 回车(引号中的内容),如图一,OK。

clip_image012

但是有时候这样做还是无法清除DNS缓存,我们还可以这样来清除DNS缓存:

控制面板 - 网络连接- 在"本地连接"上右键单击,选择‘修复’:

clip_image013

不过,很多时候还是无法完成清除DNS缓存,那么,怎样才能有效清除DNS缓存呢?

在计算机中有一个Dnscache服务来为此计算机解析和缓冲域名系统(DNS)名称。我们可以通过控制面板- 管理工具 - 服务,找到 DNS Client,双击打开它的属性,直接停止它,如图三、图四,这时你Ping一下解析的域名是否正确了呢?再启动DNS Client服务即可。

clip_image014

clip_image015

未经允许不得转载:烂泥行天下 » 【转】烂泥:为什么PING域名得到IP与实际公网IP不符

赞 (0) 打赏

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

支付宝扫一扫打赏

微信扫一扫打赏