很多讀者可能曾經(jīng)遇到這樣的情況:為什么我點擊的是個正常的鏈接,跳轉到的網(wǎng)頁卻是宿遷摜蛋或者澳門賭場?為什么我訪問正常的網(wǎng)站,右下角卻經(jīng)常出現(xiàn)一刀9999級或者XX聊天室的彈窗?有些人會抱怨網(wǎng)站,不過有些時候你可能還真的錯怪網(wǎng)站了,如果網(wǎng)站是無辜的,那你很有可能遭到網(wǎng)絡流量劫持了。那么今天,IT之家就和大家聊聊網(wǎng)絡流量劫持那些事。
IT之家學院:說說網(wǎng)絡流量劫持那些事
這個話題說來話長,在開始之前,我們需要了解,我們是如何訪問到一個網(wǎng)站的。
互聯(lián)網(wǎng)的體量十分龐大,棲息在其中的網(wǎng)站多如繁星,每個網(wǎng)站都搭建在服務器或服務器集群中,就像我們撥打電話需要輸入電話號碼一樣,你要訪問某個網(wǎng)站,就要撥通那個網(wǎng)站所在的服務器“電話號碼”,不過網(wǎng)站所用的“電話號碼”可不是7到8位的座機號碼或者11位的手機號碼,而是一串數(shù)字的組合,這串數(shù)字的組合被稱作IP地址,以百度的IPv4地址為例,則是202.108.22.5。
不過,我們要訪問的網(wǎng)站實在是太多了,每訪問一個網(wǎng)站就要記住一組IP地址,那豈不是太麻煩了。我們仍以撥打電話為例,可能我們的通訊錄中有100個聯(lián)系人,這100個聯(lián)系人的手機號碼我們無法全部記在腦子里,但是當我們想要聯(lián)系到其中的一個人時,我們可以輕松地打通他的電話而無論我們是否記得他的電話號碼。這是因為我們已經(jīng)將他的電話號碼保存在了通訊錄里,當我們在通訊錄里找到他的名字并撥打他的電話時,他的名字會被我們的手機轉換為電話號碼,然后手機會將他的電話號碼提交給運營商的交換中心。
我們對網(wǎng)站的訪問也是如此。有一個系統(tǒng),可以將便于我們記憶的,由單詞、拼音甚至漢字組成的被稱作“域名”的一串文字轉換為IP地址,這套系統(tǒng)被稱作“域名系統(tǒng)”,英文寫作“Domain Name System”,簡寫則是“DNS”。我們知道,百度的域名是www.baidu.com,當我們將這個域名輸入到瀏覽器的地址欄中并敲下回車時,這個地址會被DNS系統(tǒng)轉換為IP地址,你的瀏覽器便會根據(jù)這個IP地址找到并顯示該網(wǎng)站內容,DNS系統(tǒng)將域名轉換為IP地址的過程則被稱為“DNS解析”。
這里,若以我們在手機中撥打電話做類比,域名就相當于聯(lián)系人的名字,IP地址相當于聯(lián)系人的手機號碼,而DNS系統(tǒng)則相當于手機中的通訊錄。
DNS系統(tǒng)存在于DNS服務器上,DNS服務的提供方可能是網(wǎng)絡運營商,也可能是第三方企業(yè)或組織,由運營商提供的DNS我們稱其為“運營商DNS”,由第三方企業(yè)或組織提供的DNS我們稱其為“公共DNS”,DNS十分重要,它可以決定我們可以通過域名訪問到什么網(wǎng)站,因此,若DNS服務出現(xiàn)了什么差池,那么后果將十分惡劣。
我們已經(jīng)了解了DNS服務的含義和作用,接下來我們來談談DNS劫持。
DNS劫持有善意的,也有惡意的。
我們在訪問互聯(lián)網(wǎng)時,由于地理原因或者其他原因,難免會遇到一些不穩(wěn)定的、訪問速度慢的服務器,為了讓我們可以更加快速地瀏覽互聯(lián)網(wǎng)上的內容,CDN應運而生。
CDN,全稱為Content Delivery Network,翻譯成中文便是“內容分發(fā)網(wǎng)絡”,它的作用是接管由用戶發(fā)出的請求,并將此請求分配給最通暢的緩存服務器,緩存服務器中緩存了你要訪問的網(wǎng)站的數(shù)據(jù),你的瀏覽器會優(yōu)先下載緩存服務器中的這些數(shù)據(jù),若此時緩存服務器中沒有你要訪問的網(wǎng)站的數(shù)據(jù),它便會向父層詢問,直到回到源服務器訪問,等到你下一次訪問這個網(wǎng)站時,你就可以直接訪問緩存服務器中的數(shù)據(jù)了,因為緩存服務器在將源服務器中的數(shù)據(jù)原路送到你的手中時,它還會自己保存一份。
CDN服務本身并不提供DNS解析功能,但它依托于DNS解析,我們可以把CDN對你的請求的接管看作是一種善意的DNS“劫持”。
說完了善意的DNS劫持,我們說說惡意的。
對于一個網(wǎng)站來講,可觀的訪問量即意味著可觀的收入,有時為了提高訪問量,個別網(wǎng)站可能會不擇手段,惡意的DNS劫持便有了市場。
若運營商或公共DNS服務的提供方并沒有遵循“不作惡”的原則,那么他們很可能是惡意DNS劫持的幫兇。事實上,惡意的DNS劫持已經(jīng)形成了一條十分完整的產(chǎn)業(yè)鏈,網(wǎng)絡運營商或者公共DNS提供方為了獲取利益,往往配合他們的這種行為,有時我們明明想訪問一個網(wǎng)站,卻跳轉到了預期之外的另一個網(wǎng)站,那么你就要懷疑,是不是你的DNS提供商有什么問題。
當然了,有時這個鍋也不能全讓運營商或者公共DNS服務商來背,他們深知DNS的重要性,一些小的手腳他們敢做,大的手腳就不一定了,比如“澳門賭場”這樣的網(wǎng)站,我覺得沒有哪個運營商或者公共DNS服務商敢接這樣的活兒,它的性質太惡劣了,接了這種活兒雖有可能帶來現(xiàn)時的利益,但是這對他們口碑的影響卻是十分負面而且巨大的。
別以為運營商或者公共DNS提供商拒絕為這種廣告主提供服務,他們就一點辦法也沒有,道高一尺魔高一丈,DNS提供商不幫他們搞流量劫持,那他們搞一個DNS投毒還不是美滋滋。
為了提高訪問效率,一般的計算機都有一套DNS緩存機制,當我們訪問過某個網(wǎng)站并得到了它的IP之后,下次再訪問就可以直接調用計算機本地的DNS緩存而無需再次通過DNS服務器查詢,當然了,這個緩存是有時效的,過了有效期之后,再次訪問時,還是要先向DNS服務器請求解析。
運營商的DNS服務器很難被攻破,不過計算機本地的DNS緩存就相對容易淪陷了,所謂的DNS投毒,就是通過污染計算機本地的DNS緩存,使用虛假的IP地址信息來替換真實的IP地址信息,以實現(xiàn)DNS劫持,這種劫持效果和運營商的DNS劫持效果差不多。
說完DNS劫持,我們再說說HTTP劫持。
如何判斷你遭遇的流量劫持是DNS劫持還是HTTP劫持呢?很簡單,如果你要訪問的是A網(wǎng)站,點擊鏈接或按下回車后卻跳轉到了B網(wǎng)站,那么你遇到的就是DNS劫持,如果你要訪問的是A網(wǎng)站,跳轉到的網(wǎng)站也確實是A網(wǎng)站,但是網(wǎng)頁中莫名其妙地出現(xiàn)了“一刀9999級”、“讓女人尖叫”、“屠龍寶刀,點擊就送”這樣的奇怪的彈窗廣告或者懸浮廣告,那么你遇到的就是HTTP劫持。
所謂的HTTP劫持,是指來自網(wǎng)站的服務器的數(shù)據(jù)在到達用戶的瀏覽器的半路上時,其數(shù)據(jù)被劫持并遭到篡改,這種情況一般出現(xiàn)在以http協(xié)議傳輸數(shù)據(jù)的網(wǎng)站上,因為這些數(shù)據(jù)是明文傳送的。
和DNS劫持一樣,雖然你遭遇的流量劫持在很多時候都要網(wǎng)絡運營商來背鍋,不過有些時候也不盡然。如果你的電腦被惡意軟件感染,那么該惡意軟件可能會在你瀏覽器顯示的頁面當中“加一些料”,其達到的效果和運營商的HTTP劫持大致相同,即在你打開的網(wǎng)頁上顯示彈窗廣告或懸浮廣告。
說了這么多,我們總要想辦法避免流量劫持啊,那么我們應該怎么做呢?
以下是IT之家給大家的建議。
如何避免運營商DNS劫持?
如果你懷疑你的寬帶遭到了運營商的DNS劫持,那么我們建議你使用靠譜的公共DNS。公共DNS的提供商有很多,IT之家這里列舉一些比較知名的:
以上的DNS僅供參考,你可以根據(jù)個人喜好挑選適合你的。