事情是這樣的,不久前,我跟往常一樣打開某新聞網頁的時候,發現右下角有彈窗廣告,並且在原頁面任意位置點擊,都會打開一個廣告頁面,然后原頁面才能正常點擊,手法太低劣了,不像是網站掛的廣告,然后打開其它網頁,除了個別網頁和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。
