2007年2月14日星期三

好你个中国电信!

这两天上各种网站,常常被转到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

2007年2月4日星期日

Using aMule

aMule是eMule的一个Clone,在各个平台下都有,用起来几乎和eMule一样,甚至能够读取eMule的部分文件…… 只是没有eMule稳定…… 

aMule是完全UTF-8化的软件,比如说他对我家FAT32分区上的GBK编码的文件名有很多反感的地方…… 而且下载下来的文件名在我看起来也是乱码(我家的工作环境也是GBK的,他存下来是UTF8的……) 办法总是有的嘛~ 搞了个脚本来自动识别并重命名~

#! /usr/bin/perl

use Encode;

while (<*.mp3>)

{

    $raw=decode("utf8",$_);

    if (encode("cp936",$raw)=~/\?/) {

        $euc_CN=$_;

        print "Not Changed: $euc_CN\n";

} else {

        $euc_CN = encode("cp936",$raw);

        rename($_,$euc_CN);

        print "Has Changed: $euc_CN\n";

    }

#     symlink($_,$euc_CN);

}

实话说,这样的检测方法很不怎么样…… 但是用Encode里面的Detect竟然把一个GBK的当成了俄罗斯文…… 汗死…… 还不如这样的“实践有效”的方法~ 也就是:原来GBK的东西用UTF-8解码再用GBK编码会出现一堆"?"...

但是,我也不知道,UTF-8 Decode之后成了什么了…… 还需研究……


Old Blog Link: http://computer.mblogger.cn/henryhu/posts/62324.aspx

统计软件包占用空间的脚本

得益于 FreeBSD 的包管理方法,可以很容易地统计出每个软件包占用的空间大小和总大小~
统计下来,总共3.9G左右,OpenOffice最大(310M左右)。
通过这个还知道了最大的几个包,找到几个没用的删掉~ 空间大了不少~

#! /usr/bin/perl

open(STDOUT,'| sort -n');

$sum=0;

while(<STDIN>)#`pkg_info -s '*'`)

{

if (/^Pack/) { next; }

unless (/for/ || /block/) { next; }

if (/^Info/) {

chop;

/(^.*) (.*):$/;

$x=$2;

} else {

chop;

/(^\d+)/;

$sum+=$1;

print "$_ $x \n";

}

}

printf "%8d(1K-blocks) total\n",$sum;

close(STDOUT);

Old Blog Link: http://computer.mblogger.cn/henryhu/posts/62323.aspx