Chad 2008-02-17

发现问题
    2月14号装了台新电脑,但拿回来装系统时发现死机频繁,经过两天晚上"奋战",确定是内存条有问题。16号星期六,也就是昨天,拿去给装机的人检测,发现真的是有一条内存条有问题,换了一条后就好了。

    但是,今天在用的时候,却发现了另外一个奇怪的现象——无论是用FireFox还是IE,在地址栏输入不带URL参数的网址,按回车确认后会自动在最后加上一个问号。例如,输入“www.google.com”,会变成“http://www.google.com/?”。

    一开始我没太在意,但在访问verycd.com时,却发现因那个问号而无法正常访问一些页面(例如这个页面“http://www.verycd.com/sto/game/page6”,如果URL后带问号,即“http://www.verycd.com/sto/game/page6?”,将会显示verycd的首页,而不是那页)。到了这时,我怀疑我的机可能是中了毒或者是流氓软件之类的东西,但我没有直接查毒,而是在网上搜索了一下相关的现象,发现有不少人说这是电信的所为,更有些人说这是电信的“DNS(Domain Name Server, 域名服务器)劫持”。由于我不是很了解这方面的东西,就详细查了一下,并测试了一下,最后发现这跟本与DNS无关。

    为什么说与DNS无关?很简单,我把ADSL Modem上的DNS功能关了(电脑直连modem),把windows里的DNS也清空,在浏览器确认www.google.com无法被解释后,再在浏览器里直接输入www.google.com所指向的IP,即66.249.89.99,按回车后,可以访问google,但是地址栏却变成了"http://66.249.89.99/?",也就是说,不管怎么样,只要你用了http协议,都会先被电信处理过后才会让你真正访问到目的URL,真是郁闷。。。

    那这问号是怎么来的呢?这个我测试了一下,大概是电信那些垃圾网络程序所为,因为我用的是电信的ADSL,问号应该是电信先处理了我的http请求,经过加工后,再让我的请求去到真正的目的服务器,具体过程下面我会根据我的测试做一说明。

找出真凶!
    可以这样子验证电信就是凶手,在输入66.249.89.99并按回车后,在google页面显示出来之前按浏览器的stop键,会发现下面这惊人的source code:
 

Code - XML/HTMLPlain Text
 
  1. <html>  
  2. <head>  
  3. <meta http-equiv="pragma" content="no-cache"/>  
  4. <meta http-equiv="Cache-Control" content="no-store,no-cache,must-revalidate,post-check=0,pre-check=0,max-age=0"/>  
  5. <meta http-equiv="expires" content="-1"/>  
  6. <meta http-equiv="refresh" content="2"/>  
  7. </head>  
  8. <body>  
  9. <iframe src="about:blank" width="0" height="0" frameborder="0" style="display:none"></iframe>  
  10. <script language="javascript">  
  11. window.frames[0].location = "http://121.32.136.231/update/step1.aspx?p=" +  
  12. "gzDSL58******|" +   // 这是我的ADSL帐号。。。晕。。。  
  13. Math.floor((new Date()).getTime()/1000) + "|" +  
  14. navigator.appMinorVersion + "|" +  
  15. screen.availHeight + "|" +  
  16. screen.availWidth + "|" +  
  17. screen.colorDepth + "|" +  
  18. screen.height + "|" +  
  19. screen.width;  
  20. </script>  
  21. </body>  
  22. </html>  



    注意上面那个iframe,电信把它隐藏了,并且地址指向了121.32.136.231服务器上的一个页面,并把我的ADSL帐号、IE浏览器版本(FireFox下返回undefined)、屏幕信息作为参数p传了过去,真不知道他们要我这些信息来做什么,有网友说这是电信用来赚钱的(见http://www.pconline.com.cn/news/nw/0608/855306.html),也有人说是用来封锁多用户共享同一个ADSL用户(见http://www.cnbeta.com/articles/44415.htm)。但不管怎么样,这种行为真的是可耻,因为它直接影响到了网站的正常访问。

    我试着访问电信指定那个页面“http://121.32.136.231/update/step1.aspx”,经过一系列处理后,它把我转到“http://121.32.136.231/update/step2.aspx?id=00000000-0000-0000-0000-000000000000&url=”,这个页面的源码只有一行javascipt,“<script>window.setTimeout("parent.location.reload(true)", 2200);</script>”,也就是父页在2.2秒后自动刷新去到真正要访问的URL,所以我们打开网页时,至少要延时这么多,而且如果电信看我们不爽,完全可以在step1.aspx那里把我们截住,不让我们访问网页,真是TMD可恶。

谁对谁错?
    如果电信这种做法真的是纯粹出于实现所谓的“最多允许两台电脑共享一条宽带”,那他们也真够白痴的。

    首先,法律上,电信这种做法是没有法律依据的。电信的依据是“多户共享宽带违反了合同”,金粤律师事务所资深律师张启军指出,“就合同本身而言,用户超出了‘一拖二’范围,确实违反了消费合同,电信封杀亦是有所依据的”。但在我看来,那张启军律师根本就是在连那合同都没看过的情况下乱说一通。因为我自己本身就是电信的ADSL用户,和电信确实是有一份“广东省电信有限公司广州分公司业务服务协议”,但那协议上面唯一一处与宽带的使用限制有关的条款是第四条的第三款,即“未经电信公司同意并办理有关手续,客户将本协议的全部或部分转让给第三方的,对电信公司不发生法律效力”。但这一条根本没有提到用户有使用宽带的电脑台数限制,也就是说,假设我拉一条电信宽带,且我在家里有一百台电脑,那么即使我这一百台电脑一起用那条宽带也是没有问题的,没有违反合同。

    其次,技术上,电信用的这种方法真的是够烂。这种验证完全是基于http协议的,也就是说,假设我拉了一条电信宽带,即使我真的是违反了合同与第三方共享,只要我们都不使用http协议,而只使用直接用TCP/IP或者UDP协议的软件(如QQ)或者网络游戏,电信是无法知道的。再加上这种方法使我们用户的http访问受延,甚至使部分网站不能正常访问,我认为这时应该是电信违反了合同的第六条“服务质量与客户服务”(我就是在电信给URL加了一个问号而访问不了verycd.com上面的一些页面时,才得知他们侵犯了我的权利的)。

    总之,在这全中国除了工资外什么都涨的世道下,假装下调咨费,暗里赚那么多钱,不但不想办法提高服务质量,还要耍垃圾手段侵犯客户权利,电信是够恶心的。