当你输入一个网址,结果跳到了一个满屏广告的页面,或者直接打不开,而你的网络明明连着——这种情况,很可能是DNS污染在作祟。DNS污染,简单说就是有人(通常是运营商或中间网络节点)在你查询域名对应的IP地址时,偷偷修改了应答数据包,把你引导到了一个错误的、甚至是有害的服务器上。这篇文章直接讲实操,用系统自带的nslookup和dig命令,一步一步判断DNS是不是被污染了。
准备工作:理解你的“武器”
在动手之前,先搞清楚这两个命令能干嘛。
nslookup是Windows、Linux和macOS都自带的基础DNS查询工具,上手门槛很低。它适合快速查看某个域名在当前网络下解析成了什么IP。
dig是Linux和macOS系统默认安装的更强大的DNS排查工具,输出信息比nslookup更详细、更接近协议底层,是全球网络工程师诊断DNS问题时的首选。它的核心优势在于可以精确追踪解析链路,并指定任意DNS服务器进行查询。
Windows用户注意:Windows系统默认没有dig命令。如果你非要用,需要安装BIND工具集,或者直接用nslookup就够了,Windows下用它排查问题完全够用。
核心方法:对比法
检测DNS污染最核心的逻辑就四个字:交叉对比。
你本地运营商给你的DNS结果可能被污染了,但Google(8.8.8.8)或Cloudflare(1.1.1.1)的公共DNS是相对干净的。如果同一个域名,在本地默认DNS下查出来的IP,和在公共DNS下查出来的IP不一样,而且本地查出来的那个IP明显有问题(比如打不开、是个奇怪的广告页面),那基本就能确认污染了。
第一步:用本地默认DNS解析(看“现状”)
先看看你当前网络环境下,这个域名被解析成了什么IP。这很可能是被污染后的结果,作为待验证的“嫌疑样本”。
用nslookup(Windows/Linux/macOS通用):
打开命令提示符或终端,输入:
nslookup 你的域名.com
输出示例:
服务器: your-isp-dns.com
Address: 202.96.128.86
非权威应答:
名称: 你的域名.com
Address: 123.45.67.89 <- 记录下这个IP
用dig(Linux/macOS):
dig 你的域名.com +short
这个命令只返回IP地址,干净利落。比如:
dig example.com +short
93.184.216.34
记下这里返回的IP地址。
第二步:用可信公共DNS解析(找“真相”)
现在,绕开你本地的DNS服务器,直接去问国际通用的公共DNS,拿到一个相对可信的“正确答案”。
用nslookup指定服务器:
nslookup 你的域名.com 8.8.8.8
用dig指定服务器(更常用):
dig @8.8.8.8 你的域名.com +short
这里的@8.8.8.8就是告诉dig命令,去向Google的DNS服务器发起查询。
第三步:对比结果,做出判断
现在你手上有两个IP地址了:一个是本地DNS给的(可能有问题),一个是公共DNS给的(相对可信)。
情况一:两个IP地址完全一样
这说明你的本地DNS解析结果是正确的,大概率没有污染。如果网站还是打不开,那问题可能出在服务器本身、本地Hosts文件或者网络路由上。
情况二:两个IP地址不一样
这是DNS污染的典型特征。接下来,就要判断本地返回的那个IP是不是“坏”的。
怎么判断IP好坏?
1. 能不能ping通:在命令行里执行ping 本地返回的IP。如果丢包率100%,根本ping不通,说明这个IP很可能是个不存在的“假地址”。
2. 是不是熟悉的地儿:如果返回的是127.0.0.1(本机)、192.168.x.x(局域网地址),或者是一个你根本不认识的、一看就是广告页面的服务器IP,那肯定是污染了。
第四步:用+trace追查污染发生在哪(进阶)
如果你想看得更细,看看污染到底发生在哪一层,可以用dig的+trace参数。它会一步步显示从根域名服务器、顶级域名服务器,到你域名的权威服务器的整个查询路径。
dig +trace 你的域名.com
如果在这个过程中,权威服务器返回的IP是正确的,但在中间某个节点突然冒出来一个错误的IP,那说明污染就发生在那个中间节点上(通常是运营商劫持或跨境网关干扰)。
第五步:别忘了清缓存
如果确认了本地DNS解析结果有问题,在切换DNS服务器之后,一定要清除本地DNS缓存,否则电脑里缓存的错误记录还会让你继续访问到假IP。
Windows:
ipconfig /flushdns
macOS:
sudo killall -HUP mDNSResponder
Linux(取决于你的系统服务):
sudo systemd-resolve --flush-caches
或者
sudo systemctl restart nscd
检测流程一句话就能说清楚:用nslookup或dig分别通过本地DNS和公共DNS解析同一个域名,对比两个IP地址。如果不同,且本地返回的IP地址无效,说明DNS被污染了,换DNS并清缓存就行
相关内容
