事情是这样的,不久前,我跟往常一样打开某新闻网页的时候,发现右下角有弹窗广告,并且在原页面任意位置点击,都会打开一个广告页面,然后原页面才能正常点击,手法太低劣了,不像是网站挂的广告,然后打开其它网页,除了个别网页和https的网页外,均有此症状,如此看来,肯定不是网站挂的广告,按理说此时最该怀疑的是电脑中毒了,但那台电脑是我保护得最好的一台笔记本,连百度网盘这种软件都只在使用的时候装到虚拟机里,用完再回退快照,更别说什么来历不明的软件了,所以不太相信是中毒了,然后上网查资料,不知从哪看到说改DNS可以解决,试着把本机的DNS从自动获取换成了固定DNS,果真不弹广告了,听说过一些宽带供应商的恶劣事迹,故断定是运营商提供的DNS有问题,被他们做了手脚。
就一直这样用着,直到前几天,朋友来家里玩,手机连wifi上网的时候,说弹乱七八糟的广告(我平时不在家用手机浏览网页),我告诉他说改DNS,结果他手机还改不了,好吧,这不是逼我么?我拿起电话就投诉宽带供应商,结果对方死不承认。好吧,既然不认账,那就再找其它更高一级的投诉渠道吧,结果在网上看到了一种说法,说是路由器被黑,手动设置了伪造的DNS(此前不知道路由器还可以手动指定DNS),然后就经常弹广告。我立马登录路由器的管理页面,果然DNS被设置为了某个固定地址,瞬间觉得之前的投诉好无理取闹……然后把路由器恢复了出厂设置,并改了登陆账号、密码、端口之类的,问题算是解决了。
但纳闷的是,既然不是供应商搞的鬼,单凭篡改一个DNS是怎么实现弹窗的呢?我用那个DNS和正常的DNS去ping了一下几个网站,两边得出来的IP是一样的,这就更纳闷了,DNS不就是用来查IP的么?有了IP以后,数据传输的事情跟DNS有毛关系啊,不过想想也是,如果在此时篡改IP,那原来的所有页面都要通过这个服务器来中转,这得承受多大的浏量啊,想必也是不太可能。是不是网页加载的过程中出了问题呢?于是用chrome打开了有道首页(页面比较简单,方便分析),并且开启开发人员工具中的网络监控,然后换DNS,另开一个窗口再打开有道首页,对比两次网页加载过程的差异,发现差错出现在访问s4.cnzz.com的时候,两边返回的IP不一样
无广告
有广告的
结果就是返回的内容也不一样(两段不同的JS),也就是这段JS让网页加上了那个广告效果。
其实看到加载过程有访问第三方域名的时候(这也怪自己对网站了解得太少,以为很少有网页会有跨域请求),就已经清楚了,这正是DNS大展身手的地方。上网查了一下,访问s4.cnzz.com时,是去获取一段统计相关的JS,DNS广告的原理应该就是篡改了一些这类域名的IP,把IP指向自己的服务器,然后该服务器返回添加广告的代码,因为是统计之类的代码,又不影响原网页的功能,而且多数网页都会加入这种统计之类的功能,所以,他们这样做可以覆盖大多数网站,而自己也不需要多大的服务器投入,嗯,一切都解释得通了。
最后曝光下那个弹广告的DNS:61.146.155.181。