青青子衿, 悠悠我心, 但为君故, 沉吟至今
« 中文域名真是一场骗局吗?真正有价值的内容未必能够“大众化” »

防治运营商HTTP劫持的终极技术手段

  运营商HTTP劫持(非DNS劫持)推送广告的情况相信大家并不陌生,解决的方法大多也是投诉增值业务部门进而投诉工信部。但这种方法费时费力,投诉接听人员并不了解情况导致答非所问的情况有很多,有时候不但受气最终也没能完全解决问题,或者解决问题后过了一段时间复发的情况并不少见。

  近年来,运营商HTTP劫持非但没有收敛,反而变本加厉,玩出了新花样:比如通过HTTP劫持进行密码截获的活动;比如下载软件被替换的情况;比如劫持进行返利(当然返利不是返给你)的情况。

  本文介绍一种技术手段用来防止HTTP劫持,在大多数情况下不但可以解决广告推送的问题,也能解决密码截获和下载软件被替换的情况。最终的效果是运营商停止了HTTP劫持,而非劫持后通过浏览器插件进行广告过滤。此种方法的好处是既不用安装浏览器插件进行广告过滤,也不用额外的服务器(HTTP代理或VPN之类的),并且能防止下载软件被替换和返利劫持,也能在一定程度上防范密码的泄漏。

防治运营商HTTP劫持的终极技术手段

  要说明这种技术手段的工作原理,首先需要说明大多数情况下运营商HTTP劫持的原理:

  在用户的浏览器连上被访问的网站服务器,发送了HTTP请求后,运营商的路由器会首先收到此次HTTP请求,之后运营商路由器的旁路设备标记此TCP连接为HTTP协议,之后可以抢在网站服务器返回数据之前发送HTTP协议的302代码进行下载软件的劫持,浏览器收到302代码后就会跳转到错误的软件下载地址下载软件了,随后网站服务器的真正数据到达后反而会被丢弃。或者,旁路设备在标记此TCP连接为HTTP协议后,直接返回修改后的HTML代码,导致浏览器中被插入了运营商的广告,随后网站服务器的真正数据到达后最终也是被丢弃。

  从上述原理中看出,如果需要进行HTTP劫持,首先需要进行标记:如果是HTTP协议,那么进行劫持,否则不进行劫持。那么,是否有一种方法,既可以避免被旁路设备标记为HTTP协议,而目标网站收到的仍旧是原来的HTTP请求,并且不需要任何第三方服务器呢?答案是有的:

  旁路设备中检测HTTP协议的模块通常比较简单,一般只会检测TCP连接建立后的第一个数据包,如果其是一个完整的HTTP协议才会被标记;如果并非是一个完整的HTTP协议,由于无法得到足够多的劫持信息,所以并不会被标记为HTTP协议(我们伟大的防火墙并非如此,会检查后续数据包,所以这种方法无效)。了解了这种情况后,防止劫持的方法就比较简单了:将HTTP请求分拆到多个数据包内,进而骗过运营商,防止了HTTP劫持。而目标网站的操作系统的TCP/IP协议栈比较完善,收到的仍旧是完整的HTTP请求,所以也不会影响网页浏览。

  那么如何将浏览器发出的HTTP请求拆分到多个数据包中呢?我们可以在本地架设一个代理服务器,在代理服务器将浏览器的HTTP请求进行拆包,浏览器设置本地的代理服务器即可。我这里经过测试,默认设置的情况下对三大运营商(电信、联通、移动)的HTTP劫持现象都有很好的抑制作用。

  这个软件是个开源软件,代码在: https://github.com/lehui99/ahjs5s 。如果发现有什么问题,欢迎在Github上提Issue。如果有更新,我也会第一时间更新到Github上。

  来源:DavidSky投稿。



  除非注明,月光博客文章均为原创,转载请以链接形式标明本文地址

  本文地址:http://www.williamlong.info/archives/4181.html
  • 文章排行:
  • 1.天晴好睡觉
  • 联通说了,他们那不是劫持,是XX推广业务。。。业务。。。务。。。
  • 2015/3/23 9:43:52   支持(31)反对(6) 回复
  • 2.西门盗月
  • 微软控制了我们桌面都没做这种事,为什么运营商要做恶?
  • 2015/3/24 9:25:28   支持(39)反对(14) 回复
  • 3.flyhua
  • 移动就在宽带推广告,与其合作的流氓广告商很多,最臭名昭著的是秒针和阿里妈妈。
  • 2015/3/26 16:29:39   支持(20)反对(9) 回复
  • 4.tianjingfans
  • 我现在经常是这样, 登录,https 网址, 第一次有个 ! 加密不完整,在刷新就好了。 这明显就是 运营商,插入 js 导致的。
    encryptor 于 2015-3-23 16:46:21 回复
    Hi,你访问百度首页时也会出现这种情况吗?https呢?
    Chi 于 2015-3-28 11:51:18 回复
    我这里x城宽带https的百度也劫持,哎真是没话说了。联通会跳广告,倒是电信好些。
    张飞 于 2015/11/22 20:53:23 回复
    电信最近弹bobo,s.oyasj网站,反正电信是不管的。得中央有人。
    YKB 于 2016/1/2 17:27:30 回复
    电信现在整天bobo、oyasj、hzqst、百度视频广告,而且几乎打开五个网页就放一个广告,恶心得要命,要命啊啊!!!!!!!!!
  • 2015/3/23 11:45:51   支持(10)反对(4) 回复
  • 6.大漠黄沙的围脖
  • 投诉工信部效果非常好
  • 2015/3/23 9:56:53   支持(17)反对(14) 回复
  • 7.上网第一站
  • 虽然能解决劫持,好些网站还连接不上了(要刷新好几次才行),我是移动专线环境,也是http+dns劫持
  • 2015/3/24 9:35:20   支持(9)反对(6) 回复
  • 8.kaydeam
  • 博主,你好!下载windows的,运行出错,求解

    正在设置IE代理为127.0.0.1:3128(仅HTTP)...
    Traceback (most recent call last):
    File "wizard.py", line 86, in <module>
    main(sys.argv[1])
    File "wizard.py", line 83, in main
    Main(config).start()
    File "wizard.py", line 36, in start
    set_proxy.set_proxy('http=127.0.0.1:%d' % (self.config['http_proxy_port'], )
    )
    File "E:\sock5\package\ahjs5s\windows\set_proxy.py", line 25, in set_proxy
    set_regkey('ProxyServer', proxy_server)
    File "E:\sock5\package\ahjs5s\windows\set_proxy.py", line 17, in set_regkey
    _, reg_type = winreg.QueryValueEx(INTERNET_SETTINGS, name)
    FileNotFoundError: [WinError 2] 系统找不到指定的文件。
    teddyzhu 于 2016/9/9 19:06:17 回复
    设置去掉设置系统代理 可解决报错
  • 2015/10/6 13:54:00   支持(4)反对(1) 回复
  • 9.奈落Wyatt
  • mark,目测效果不大,明天测试下
  • 2015/3/23 9:23:50   支持(12)反对(10) 回复
  • 10.火把果新闻台
  • 这个很好,可以防止你的密码被宽带运营商盗取。话说,有些支付宝和网银被盗,我相信绝对不是什么病毒或黑客干的,就是运营商干的。
    yukon12345 于 2015-3-29 10:32:39 回复
    太天真了吧,你以为支付宝网银强制叫你装控件是摆设么
    cds 于 2015-3-30 17:51:37 回复
    知道支付宝插件有坑还安装脑子有问题?要么把浏览器ui改成iPad,要么提取动态链接库。
  • 2015/3/23 9:49:52   支持(13)反对(11) 回复
  • 11.李四
  • 哎,还以为是从ICP角度写的仿劫持文章呢。。。没啥大用。
  • 2015/4/1 19:17:31   支持(14)反对(13) 回复
  • 13.Robur_Pace
  • 拆分请求也不一地有用,设备厂商估计很快就可以出更新了。06年开始有的这种情况,现在一晃也是差不多十年了。曾经写过ndis驱动来过滤这种数据包,后来联通被我骂好了,也就放弃维护了。深感悲哀。
  • 2015/3/23 9:16:58   支持(17)反对(17) 回复
  • 14.独行猫儿
  • 302跳转的只是其中一种,另一种是直接劫持80端口的硬性劫持(非http请求直接reject,http请求假装自己是反向代理),这种这个方法应该还是不行。
  • 2015/3/23 9:51:31   支持(10)反对(10) 回复
  • 15.eq06
  • 这个后台太耗资源了,而且运营商劫持不成把你网掐断了,你投诉有用吗
    Playhi 于 2016/7/16 16:29:06 回复
    我也是电信的,上海电信,前一阵子投诉以后收敛了,这几天又复发了[怒]
  • 2015/8/12 20:31:28   支持(7)反对(7) 回复
  • 16.van
  • 没接触过代理服务器,有没有详细的教程哎,,不知道如何下手
  • 2016/1/12 14:49:03   支持(0)反对(0) 回复
  • 18.google
  • 打电话他们会说我们没这个权限,这都是省公司干的,我帮你放映到省公司,然后就不了了之
  • 2015/3/27 23:45:03   支持(8)反对(10) 回复
  • 19.jie
  • 我这电信光纤,,好像没有被劫持吧..
    以前用铁通存在过
  • 2015/3/30 5:17:00   支持(12)反对(14) 回复
  • 20.cnde
  • win7无解,升级到win8以上就可以完美解决
  • 2015/7/11 21:33:40   支持(7)反对(9) 回复
  • 21.坐井观天下微录
  • 全部下载了,不会使用,搞一个bat包好不好?
    lehui99 于 2015-3-23 11:32:20 回复
    你下载的是windows.7z?直接运行start_ahjs5s.bat就行了呀。
  • 2015/3/23 9:27:51   支持(6)反对(9) 回复
  • 22.Open_Tom
  • 都差不多,运营商为挣钱,不泽手段呀
  • 2015/3/23 10:00:53   支持(9)反对(13) 回复
  • 25.张三
  • 多打几次客服电话投诉就行了,我在重庆这边一连打了几天,最终他们不再劫持我的HTTP请求,现在上网都很干净。搞个代理服务真麻烦!
  • 2015/3/24 13:52:54   支持(10)反对(18) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.