最近发现我的另一个小站(爱Radio网)频繁弹出广告,被QQ浏览器拦截,起初以为是被人挂马了,仔细找了找也没发现异常。后来想想是不是DNS劫持了,可惜换了本地DNS弹窗广告依旧。后请教Jason分析说说isp劫持,尼玛这就尴尬了,这是神马玩意。百度可以下,还是不懂,毕竟是学机电的,理解这玩意有些难度。最后解决方法就是投诉运行商或者加证书用https访问,这俩对我来说都不简单,就只能先这样了,蓝瘦香菇!
另外,我的网络是山东移动无线网络(CMCC),坑爹的玩意。
文章源自两天的博客-https://2days.org/3032.html
以下转载:
本文遵从GPL协议,欢迎转载。文章源自两天的博客-https://2days.org/3032.html
1、现象是什么?文章源自两天的博客-https://2days.org/3032.html
大约从今年年初开始,很多人就发现,在浏览一些网站的时候,地址栏的url后面会被莫名其妙地加上“?curtime=xxxxxxxxxx”(x为数字),并且弹出广告窗口。很多人以为这是网站自己弹出的广告,也就没有在意。文章源自两天的博客-https://2days.org/3032.html
我是属于很在意的那些人之一。文章源自两天的博客-https://2days.org/3032.html
2、这是怎么回事?文章源自两天的博客-https://2days.org/3032.html
经过测试和分析,我们发现,上述现象与使用何种浏览器无关(我们测试了各种流行的http客户端),与使用何种操作系统也无关(linux用户也有相关报告)。我对出现该现象的IE浏览器进程进行了跟踪调试,没有发现任何异常。可以断定,并不是系统被安装了adware或者spyware。文章源自两天的博客-https://2days.org/3032.html
那么是不是那些网站自己做的呢?后来发现,访问我们自己管理的网站时也出现了这种情况,排除了这个可能。文章源自两天的博客-https://2days.org/3032.html
那么剩下唯一的可能就是:有人在某个或某几个关键网络节点上安装了inject设备,劫持了我们的HTTP会话——我实在是不愿相信这个答案,这个无耻、龌龊的答案。文章源自两天的博客-https://2days.org/3032.html
伟大的谢洛克·福尔摩斯说过:当其他可能都被排除之后,剩下的,即使再怎么不可思议,也一定是答案。文章源自两天的博客-https://2days.org/3032.html
为了验证这个想法,我选择了一个曾经出现过上述现象的网站附近网段的某个IP。直接访问这个IP的HTTP服务,正常情况下是没有页面的,应该返回404错误。我写了一个脚本,不断访问这个IP,同时记录进出的数据包。在访问进行了120次的时候,结束请求,查看数据。120次请求中,118次返回的都是正常的404错误:
- HTTP/1.1 404 Object Not Found
- Server: Microsoft-IIS/5.0
- Date: Mon, 19 Jul 2004 12:57:37 GMT
- Connection: close
- Content-Type: text/html
- Content-Length: 111
- <html>
- <head>
- <title>Site Not Found</title>
- </head>
- <body>
- No web site is configured at this address.
- </body>
- </html>
但是有两次,返回了这个:
- HTTP/1.1 200 OK
- Content-type: text/html
- <html>
- <meta http-equiv='Pragma' content='no-cache'>
- <meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'>
- <script>
- window.open('http://211.147.5.121/DXT06-005.htm', '', 'width=400,height=330');
- </script>
- <head>
- <title></title>
- </head>
- <body>
- </body>
- </html>
更进一步分析数据包,可知劫持流程如下:
A、在某个骨干路由器的边上,躺着一台旁路的设备,监听所有流过的HTTP会话。这个设备按照某种规律,对于某些HTTP请求进行特殊处理。
B、当一个不幸的HTTP请求流过,这个设备根据该请求的seq和ack,把早已准备好的数据作为回应包,发送给客户端。这个过程是非常快的,我们的HTTP请求发出之后,仅过了0.008秒,就收到了上面的回应。而任何正常的服务器都不可能在这么短的时间内做出回应。
C、因为seq和ack已经被伪造的回应用掉了,所以,真正的服务器端数据过来的时候,会被当作错误的报文而不被接受。
D、浏览器会根据〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉这一行,重新对你要访问的URL进行请求,这一次,得到了请求的真正页面,并且调用window.open函数打开广告窗口。
在google中以“php?curtime”、“htm?curtime”、“asp?curtime”为关键字搜索,出现的基本上是国内网站,这表明,问题出在国内。用于inject的设备插在国内的某个或某几个大节点上。
真相大白。我们被愚弄了,全中国的网民都成了某些人的赚钱工具。
3、现在怎么办?
在坏家伙被捉出来之前,我们要想不受这个玩意的骚扰,可以考虑下面的方法:
A、请各单位的网络管理员,在网络的边界设备上,完全封锁211.147.5.121。
B、在你自己的个人防火墙上,完全封锁211.147.5.121。
C、如果你的浏览器是FireFox、Opera、GreenBrowser、或者MyIE,可以把“http://211.147.5.121/*”丢到弹出窗口过滤列表中去。
绝不只是广告那么简单,这涉及到我们的选择,我们的自由,这比垃圾邮件更加肮脏和无耻。今天是广告,明天就可能在你下载软件的时候给你加个adware或者加个病毒进去,谁知道呢?我们的HTTP通信完全控制在别人手里。
4、如何把坏家伙揪出来?
如果你是一个有权力调查和处理这件事的人,从技术上,可以考虑下面的手段:
方法1、
伪造的回应数据中并没有处理TTL,也就是说,我们得到的回应数据中TTL是和inject设备位置相关的。以我收到的数据包为例,真实的服务器端回应TTL是107,伪造的回应TTL是53。那么,从我们这里到被请求的服务器之间经过了21(128-107)个节点,从我们这里到inject设备经过了11(64-53)个节点。只需要traceroute一下请求的服务器,得到路由回溯,往外数第11个节点就是安插inject设备的地方!
方法2:
假如坏家伙也看到了这篇文章,修改了TTL,我们仍然有办法。在google上以下面这些关键字搜索:php?curtime,htm?curtime,asp?curtime,可以得到大量访问时会被inject的网址。编写脚本反复访问这些网址,验证从你的ip访问过去是否会被inject。将确实会被inject的结果搜集起来,在不同的网络接入点上挨个用traceroute工具进行路由回溯。分析回溯的结果。
上面我们已经说明了,坏家伙是在某个或者某些重要节点上安插了inject设备,那么这个节点必然在被inject的那些网址到我们的IP之间的某个位置上。例如有A、B、C、D四个被inject到的网站,从四个地方进行路由回溯的结果如下:
MyIP-12-13-14-15-65-[89]-15-57-A
MyIP-66-67-68-69-85-[89]-45-68-84-52-44-B
MyIP-34-34-36-28-83-[89]-45-63-58-64-48-41-87-C
MyIP-22-25-29-32-65-45-[89]-58-D
显然,inject设备极大可能就在“89”所在的机房。
方法3:
另一方面,可以从存放广告业面的211.147.5.121这个IP入手,whois查询结果如下:
inetnum: 211.147.0.0 - 211.147.7.255
netname: DYNEGY-COMMUNICATION
descr: DYNEGY-COMMUNICATION
descr: CO.LTD
descr: BEIJING
country: CN
admin-c: PP40-AP
tech-c: SD76-AP
mnt-by: MAINT-CNNIC-AP
changed: hui_zh@sina.com 20011112
status: ALLOCATED PORTABLE
source: APNIC
person: Pang Patrick
nic-hdl: PP40-AP
e-mail: bill.pang@bj.datadragon.net
address: Fl./8, South Building, Bridge Mansion, No. 53
phone: +86-10-63181513
fax-no: +86-10-63181597
country: CN
changed: ipas@cnnic.net.cn 20030304
mnt-by: MAINT-CNNIC-AP
source: APNIC
person: ShouLan Du
address: Fl./8, South Building, Bridge Mansion, No. 53
country: CN
phone: +86-010-83160000
fax-no: +86-010-83155528
e-mail: dsl327@btamail.net.cn
nic-hdl: SD76-AP
mnt-by: MAINT-CNNIC-AP
changed: dsl327@btamail.net.cn 20020403
source: APNIC
5、我为什么要写这篇文章?
新浪为我提供桃色新闻,我顺便看看新浪的广告,这是天经地义的;或者我安装某某网站的广告条,某某网站付给我钱,这也是天经地义的。可是这个211.147.5.121既不给我提供桃色新闻,又不给钱,却强迫我看广告,这就严重伤害了我脆弱而幼小的心灵。事实上,你可以敲诈克林斯·潘,**克里奥·佩德拉,咬死王阳明,挖成吉思汗墓,我都不会计较,但是现在你既然打搅了我的生活,我就不得不说几句了。
6、我是谁?
如果你知道MyName,又知道MyCount的话,那么,用下面这段perl可以得到:2f4f587a80c2dbbd870a46481b2b1882。
- #!/usr/bin/perl -w
- use Digest::MD5 qw(md5 md5_hex md5_base64);
- $name = 'MyName';
- $count = MyCount;
- for ($i=0; $i〈$count; $i++)
- {
- $name = md5_hex($name);
- }
- print $name;
以下签名,用于以后可能出现的关于此文的交流:
1 6631876c2aea042934a5c4aaeabb88e9
2 a6a607b3bcff63980164d793ff61d170
3 6a58e8148eb75ce9c592236ef66a3448
4 ded96d29f7b49d0dd3f9d17187356310
5 cc603145bb5901a0ec8ec815d83eea66
彻底解决办法就是打电话给ISP骂人,要他们把你的帐号列入广告推送黑名单。前面有个和帖子说更换DNS,其实换DNS根本没有用。更换DNS连DNS劫持都不能解决,别说http会话劫持了。
【HTTP劫持和DNS劫持】腾讯的实际业务分析
简单介绍一下HTTP劫持和DNS劫持的概念,也就是运营商通过某些方式篡改了用户正常访问的网页,插入广告或者其他一些杂七杂八的东西。
首先对运营商的劫持行为做一些分析,他们的目的无非就是赚钱,而赚钱的方式有两种:
1、对正常网站加入额外的广告,这包括网页内浮层或弹出广告窗口;
2、针对一些广告联盟或带推广链接的网站,加入推广尾巴。例如普通访问百度首页,被前置跳转为http://www.baidu.com/?tn=90509114_hao_pg
在具体的做法上,一般分为DNS劫持和HTTP劫持。
DNS劫持:
一般而言,用户上网的DNS服务器都是运营商分配的,所以,在这个节点上,运营商可以为所欲为。
例如,访问http://jiankang.qq.com/index.html,正常DNS应该返回腾讯的ip,而DNS劫持后,会返回一个运营商的中间服务器ip。访问该服务器会一致性的返回302,让用户浏览器跳转到预处理好的带广告的网页,在该网页中再通过iframe打开用户原来访问的地址。
HTTP劫持:
在运营商的路由器节点上,设置协议检测,一旦发现是HTTP请求,而且是html类型请求,则拦截处理。后续做法往往分为2种,1种是类似DNS劫持返回302让用户浏览器跳转到另外的地址,还有1种是在服务器返回的HTML数据中插入js或dom节点(广告)。
在用户角度,这些劫持的表现分为:
1、网址被无辜跳转,多了推广尾巴;
2、页面出现额外的广告(iframe模式或者直接同页面插入了dom节点)。
处理办法:
1、先对外网做检测,上报被劫持的情况。
对于我这个业务而言,加推广尾巴没意义,那么就剩下植入广告的问题了。页面广告可能通过iframe方式,也可以通过dom节点方式,需要在首页检查这两种情况。
- window.addEventListener('DOMNodeInserted', checkDivHijack);
- function checkDivHijack(e) {
- var html = e ? (e.srcElement.outerHTML || e.srcElement.wholeText) : $('html').html();
- var reg = /http:\/\/([^\/]+)\//g;
- var urlList = html.match(reg);
- if (!urlList || urlList.length == 0) {
- return;
- }
- reg = /^http:\/\/(.*\.qq\.com|.*\.gtimg\.cn|.*\.qlogo\.cn|.*\.qpic\.cn|.*\.wanggou\.com)\/$/;
- var hijack = false;
- for (var i = 0; i < urlList.length; i++) {
- if (!reg.test(urlList[i])) {
- hijack = true;
- break;
- }
- }
- }
(注:事后发现这个url检查不够严谨,虽然劫持的情况都能发现,但也把产品原有的一些正常插入做劫持误报了。例如,不过这个是小细节,把正则表达式完善一下就ok了)
2、针对被iframe加载的情况,需要先找到运营商设置的劫持规律。
在iframe中的网页能正常打开,而不是又被拦截加iframe,可能是因为请求的url上或cookie上运营商做了标记。我们可以利用这个规则,躲过劫持。
3、针对注入dom节点的情况,初始化时做检查,而且后续dom注入也做检查。可以检查dom中是否含有白名单以外的http链接,如果有,就可以判定为http劫持。
4、在前端以外的处理办法还有
a) 终端拦截所有返回包,判断ip来自黑名单(劫持的中间ip)则丢弃返回包。
这种做法的原因是,运营商劫持http请求后,并不是完全丢弃请求包,而是做了复制,一份继续发给目标服务器,另外一份做劫持处理直接返回302。因为这个302会比目标服务器的正常返回早得多,所以用户浏览器会只认第一个302,而丢弃后到的正常返回。
如果先把第一个302丢弃,等待后续正常返回,则问题解决。
b) 终端拦截请求包,并拆包发送。
运营商一般判断是否劫持,通过判断是否HTTP请求。 一般只会检测TCP连接建立后的第一个数据包,如果其是一个完整的HTTP协议才会被标记;如果并非是一个完整的HTTP协议,由于无法得到足够多的劫持信息,所以并不会被标记为HTTP协议。
所以,只要把请求包切得足够细,就能躲过一部分劫持(如果运营商学习“墙”大力气做多包拦截就没辙了)。
5、当然,最终,根本解决办法是使用HTTPS,不过这个涉及到很多业务的修改,成本较高。如果劫持比例小,也许通过适当的补救做法会更好。
来看看检测到的劫持情况:
总体1500万pv的业务,一天竟然有100万的劫持上报,即使排除一半的误报,也代表说20个用户中,就接近有1个用户出现被劫持的情况。
可见,各种小运营商(尤其是移动)的心是有多黑!胆子是有多大!
各种劫持的手段都有:
1、直接返回一个带广告的HTML;
2、在原html中插入js,再通过js脚本安插广告;
3、iframe展示原来正常网页.
本站文章大部分始于原创,用于个人学习记录,可能对您有所帮助,仅供参考!

安徽省淮北市 20F
如果你也正在为爱迷惘,或许下面这段话可以给你一些启示:爱一个人,要了解,也要开解;要道歉,也要道谢;要认错,也要改错;要体贴,也要体谅;是接受,而不是忍受;是宽容,而不是纵容;是支持,而不是支配;是慰问,而不是质问;是倾诉,而不是控诉;是难忘,而不是遗忘;
是彼此交流,而不是凡事交代;是为对方默默祈求,而不是向对方诸多要求;可以浪漫,但不要浪费;可以随时牵手,但不要随便分手。
安徽省淮北市 19F
如果你还继续爱得更多,很可能会给对方沉重的压力,让彼此喘不过气来,完全丧失了爱情的乐趣。所以请记住,喝酒不要超过六分醉,吃饭不要超过七分饱,爱一个人不要超过八分喔!
那天朋友问我:‘到底该怎么做才算是爱一个人呢?’
我笑着跟他说:‘其实每个人的爱情观都不一样,说对了叫开导,但就怕说错反倒变成误导。那就糟糕了!’
安徽省淮北市 18F
所以,还是仔细看看身边的人吧!他或许已经等你很久喽!有人说,喝酒的时候,六分醉的微醺感是最舒服的。肌肉可以得到松弛,眼中看到的一切都是可爱的,如果你还继续喝,很可能隔天你会头疼欲裂,全身不舒服,完全丧失了喝酒的乐趣。吃饭的时候,七分饱的满足感是最舒服的。口中还留着食物的香味,再加上饭后甜点、水果,保持身材和身体健康绝对足够。如果你还继续吃,很可能会肠胃不适、吃太饱想睡觉,完全丧失了吃饭的乐趣。当你爱一个人的时候,爱到八分绝对刚刚好。所有的期待和希望都只有七八分;剩下两三分用来爱自己。
安徽省淮北市 17F
我们总说:‘我要找一个你很爱很爱的人,你才会谈恋爱。’但是当对方问你,怎样才算是很爱很爱的时候,你却无法回答他,因为你自己也不知道。
没错,我们总是以为,我们会找到一个自己很爱很爱的人。可是后来,当我们猛然回首,我们才会发觉自己曾经多么天真。假如从来没有开始,你怎么知道自己会不会很爱很爱那个人呢?
其实,很爱很爱的感觉,是要在一起经历了许多事情之后才会实现的。或许每个人都希望能够找到自己心目中百分之百的伴侣,但是你有没有想过:“在你身边会不会早已经有人默默对你付出很久了,只是你没发觉而已呢?”
安徽省淮北市 16F
接着他为女孩拭去脸上的雨水,并且脱去外套盖在女孩身上,此刻,女孩流泪了!但是流过她脸颊的泪却是温馨的。你体会到了吗?
其实爱、恨往往只是在我们的一念之间!爱不仅要懂得宽容更要及时,很多事可能只是在于你心境的转变罢了!
懂了吗?当有个人爱上你,而你也觉得他不错。那并不代表你会选择他。
安徽省淮北市 15F
有一对情侣,相约下班后去用餐、逛街,可是女孩因为公司会议而延误了,当她冒着雨赶到的时候已经迟到了30多分钟,他的男朋友很不高兴的说:‘你每次都这样,现在我甚么心情也没了,我以后再也不会等你了!’刹那间,女孩终于决堤崩溃了,她心里在想:或许,他们再也没有未来了!
同样的在同一个地点,另一对情侣也面临同样的处境;女孩赶到的时候也迟到了半个钟头,他的男朋友说:‘我想你一定忙坏了吧!’
河南省信阳市潢川县 14F
学机电的折腾代码,很厉害呀。
山东省 B1
@ themebetter 复制粘贴。。。
甘肃省天水市 13F
现在的牛人是越来越多了
广东省珠海市 12F
前排吃瓜群众
新疆乌鲁木齐市 11F
这个代码不错
河南省郑州市 10F
分享的不错,谢谢
上海市 9F
简爱的离开,是现在争论的重点。当简爱知道罗切斯特先生已有妻子时,在当时不允许离婚的风气里,简爱如果留下,就成了罗的情妇,而简爱的离开,让人们称赞她有自尊。
湖北省武汉市 8F
看楼下两个讨论的热火朝天 哈哈哈
上海市 7F
挺不错的,可以看看的
河南省郑州市巩义市 6F
就凭这一堆代码也要关注你
山东省 B1
@ 胡杨 复制粘贴 ,你关注我干啥
广东省深圳市 5F
国内技术还不够完善的原因吧
安徽省 4F
你是要抛弃这个博客的节奏
山东省 B1
@ 老何 臣妾做不到啊~~~
江苏省苏州市 3F
电脑端还好,手机浏览器简直无耻至极,我说的就是江苏电信,只要是手机浏览器打开http的页面,都会劫持,强行插入底部banner广告,简直没有办法治
山东省 B1
@ Win7en乐园 现在运营商也是不要脸到家了。。。
浙江省杭州市 2F
脸蛋疼+1
广东省深圳市 1F
脸蛋疼