这两天上各种网站,常常被转到search.114.vnet.cn,搜索乱七八糟的东西。明显这个不是病毒的问题(哪个病毒这么好心,专门往电信的互联星空网站跑?),再加上现在乱输网址都会跑到sh.vnet.cn,遂怀疑中国电信不干好事。
首先,看nslookup。用nslookup查各个网站(im.qq.com, www.ethereal.com)等倒是没有问题,但是涉及到错误的网址么:
> a
Server: ns-pd.online.sh.cn
Address: 202.96.209.133
Non-authoritative answer:
Name: a
Address: 218.83.175.154
而218.83.175.154和sh.vnet.cn
Name: sh.vnet.cn
Address: 218.83.175.138
是同一个局域网的。难道有叫a的网址…… 而且输b,c,d,aa,…..都一样。
这个也就算了,反正我很少输错网址的~
但是,下面这个问题严重了。比如,我上mobile.qq.com:
注:202.96.209.5 上海的一个DNS
202.96.209.133 上海的另一个DNS
***** From Ethereal (www.ethereal.com) Output ******
(My IP)->202.96.209.5 DNS Standard query AAAA mobile.qq.com
202.96.209.5->(My IP) DNS Standard query response, Server failure
(My IP)->202.96.209.133 DNS Standard query AAAA mobile.qq.com
202.96.209.133->(My IP) DNS Standard query response, Server failure
(My IP)->202.96.209.5 DNS Standard query AAAA mobile.qq.com.HenryPC.org
// 1秒以后
(My IP)->202.96.209.5 DNS Standard query AAAA mobile.qq.com.HenryPC.org
// 又1秒
(My IP)->202.96.209.133 DNS Standard query AAAA mobile.qq.com.HenryPC.org
202.96.209.133->(My IP) DNS Standard query response A 218.83.175.154
// 就是这一行,搞来一个错误的IP
(My IP)->218.83.175.154 HTTP GET / HTTP/1.1
// 当中有host: mobile.qq.com, 说明我的机器把这个IP当作mobile.qq.com了!
218.83.175.154->(My IP) HTTP/1.1 200 OK (text/html)
返回的html:
<script>
s=String(window.location.href);
…
var KeyList = new Array(273);
KeyList[0] = “\262\312\301\345”
…
KeyList[13] = “mp3”
…
KeyList[77] = “msn”
KeyList[78] = “dj”
KeyList[79] = “nba”
…
KeyList[95] = “s.h.e”
…
KeyList[273] = “\267\277\262\372”;
t=”http://search.114.vnet.cn/search_web.html?id=596&fm=pro&kw=”+KeyList[myradom()]+”&s=83″;
//t=”http://218.30.64.194/response.asp?MT=”+mylocal+”&srch=5&prov=&utf8″;
document.location.href = t;
</script>
也就是这个HTML,导致浏览器跑到search.114.vnet.cn去了……
后面的纪录就是从search.114.vnet.cn获取网页的过程了……
关键也就是先解析mobile.qq.com不给回答,然后解析mobile.qq.com.HenryPC.org(假如原来的不行,Windows会加上默认的本地域名,我的机器上是HenryPC.org),这个原本应该给出NXDOMAIN(无此域名)的查询,竟然返回了电信的广告网站,问题就这样出现了……
所以说,完全是因为电信的DNS的胡作非为导致了这个问题!
经过用nslookup试验,发现:
当我用A方式查询(也就是IPv4的模式),DNS基本正常,但是NXDOMAIN变成了广告页面。
但是当我用AAAA方式查询(IPv6的模式,一般网站还没有这个模式),电信DNS对普通域名返回SERVFAIL(Server Fail),而对不存在的域名也返回广告!
现在的WindowsXP支持IPv6,所以先用AAAA方式查普通域名,出错;然后用AAAA方式查加上了本地域名的IP,正常应该返回没有或者不支持,然后再用A模式查域名,就好了,但是电信竟然返回了一个广告IP!…… 就这样,XP被误导了!
暂时的解决方式有把域名和对应IP放到C:\WINDOWS\SYSTEM32\DRIVERS\ETC\hosts里面,或许关掉IPv6更好……
缺乏竞争就是不好…… 等这一段过了就去用长城宽带!……
PS: 运行ipv6 uninstall后,问题暂时解决…… XP开始用A查询了……
原理解释:
我们平时打的网址(www.google.com等),其实都是为了帮助记忆,就像寄信寄到市少客站一样。但是,邮递员并不可能光靠这个来投信(特别敬业的除外),所以要知道地址,而在网上,这个就叫IP地址,是四个数字(10.0.0.1这样的),用以表明某台机子/网络。DNS服务器的作用,就是用你给的网址(域名),查询对应的IP,并告诉你结果。如果查不到,应该返回找不到!
Microsoft KB815768:
根据 RFC 1034 的 6.2.4 小节(请参见“参考”),如果 DNS 服务器上存在“A”记录,则当查询“AAAA”记录(或任何非“A”记录)时,DNS 服务器不应返回 NXDOMAIN 或 NAME_ERROR 响应。如果 DNS 服务器没有识别出“AAAA”名称查询,它应该返回 NODATA 或返回无错误 (RCODE 0) 以及一个空的回复部分。
Old Blog Link: http://computer.mblogger.cn/henryhu/posts/62479.aspx
老问题……习惯了……