1迅雷是什嗎? 迅雷是基於P2SP的一款下載軟體,能夠大大增強下載速度,可謂迅雷不及掩耳盜鈴之勢如破竹。 P2SP的道理不複雜,就是指:如果多個伺服器上有某個相同的檔案,當某個使用者下載其中一個伺服器上的這一檔案時,迅雷會自動尋找到另外的幾個伺服器,同時下載這一檔案,達到提速的目的。 迅雷比較流氓,在使用者沒有得到任何提示毫不知情的情況下,偷偷上傳使用者的本地檔案,在所有網路流量的統計中排到了第7位。 迅雷比較小氣,不說原始碼不是公開的,連原理也不公開。 迅雷比較聰明,她的架構讓人佩服啊佩服,佩服啊佩服,佩服啊佩服…… 2下載原理 還記得百度的mp3搜尋嗎?你到mp3.baidu.com上搜尋一個mp3,百度會給你列出她知道的所有伺服器列表(這些伺服器都是別人的),你可以在百度上點擊該串連下載mp3,而不用登陸真正的伺服器。 迅雷就是把這個過程自動化了,並且增加了判斷檔案唯一性的功能,畫個圖簡單說明一下: 1.使用者點擊1.2.3.4上的QQ_1.exe檔案的串連 2.使用者客戶機上的迅雷得到該檔案的唯一的校正值。 3.迅雷自動向自己的資原始伺服器上搜尋,尋找到存放同一檔案的其他的伺服器列表 4.得到檔案在該伺服器上的目錄和檔案名稱(紅色部分,有可能和原始串連中的檔案名稱不相同),[url]ftp://1.2.3.5/QQ_2.exe[/url],[url]http://1.2.3.6/QQ_3.exe[/url],以及公網使用者1.2.3.7有QQ.exe 5.迅雷自動向1.2.3.5和1.2.3.6上下載該檔案的不同檔案塊,以達到加速下載的目的(紫色部分)。 6.使用者向公網使用者1.2.3.7發送一個UDP資源請求 7.1.2.3.7回應一個資源請求說:偶這兒有你要的檔案 8.使用者向公網使用者1.2.3.7的3077連接埠發起請求,並傳輸資料。 9.下載完畢後,如果迅雷資原始伺服器上,該檔案的伺服器列表中沒有目前使用者點擊下載的伺服器1.2.3.4,則將這個新的伺服器位址加入到該檔案的伺服器列表(藍色部分)。註: 1.上述過程中的6、7、8步驟中隱含了一個過程:判斷使用者是否是公網使用者。 如果是公網使用者,則該使用者的IP地址和提供下載服務的連接埠也將記錄在迅雷的資原始伺服器中,後續使用者可以從該使用者處下載;第三節有這個過程的說明。 2.迅雷如何區分不同的檔案?很多檔案名稱字不同但是內容相同,很多檔案名稱字相同但是內容不同。搜尋迅雷的相關資訊只是得到了幾句無關痛癢的廢話:迅雷還使用了獨創的檔案校正機制,保證了使用者下載檔案的正確性和完整。至於什麼方法不得而知 3.我們如何查看迅雷搜尋到的資源清單? 在迅雷搜尋到一系列的資源清單並且任務沒有完成時,會在相同下載目錄下建立一個臨時檔案,裡面有搜尋到的資源資訊,其中peer就是搜尋到的包含要下載檔案的公網使用者。 3協議解析 分析第二節原理圖中的下載過程,第1、2、5步和正常的下載是一模一樣的,我們無法根本無法區分。那好,我們就在3、4、6上做文章。 除了上述使用者下載一個具體檔案的過程的各個報文外,還有交換資源資訊報文,使用者和使用者之間的檔案塊傳輸報文、判斷使用者是否是公網使用者的報文等。 1.資源請求報文 每次迅雷都會向219.134.132.47的tcp連接埠3076發出資源請求,該地址是寫死在迅雷軟體中的,並非依靠DNS請求得到。 如果該地址不可用,則會切換到另外兩個可替換的地址219.134.132.42、219.134.132.86。 Web迅雷則使用219.134.132.46。 過濾掉這個報文,那麼迅雷用戶端就無法完成資源請求,無法從多點下載。用TP過濾掉報文後迅雷只能從原始串連下載,如: 協議報文特徵如下: 2.資源搜尋回應報文 過濾掉這個報文,那麼迅雷用戶端就無法得到資源清單,無法從多點下載。 協議報文特徵如下: 3.使用者之間的檔案傳輸(握手報文) 使用者之間是可以傳送檔案塊的,下面的報文就是傳送檔案塊開始之前的握手報文, 3077連接埠為用戶端的監聽連接埠,用來把本地的檔案傳輸給別人。(如果3077不能用,會 轉到其他連接埠). 4.使用者之間資源資訊交換報文 5.提交新的資源資訊報文 6.串連NAT測試伺服器報文 迅雷每過幾分鐘就會向statnat1.sandai.net發送NAT測試報文,也就是告訴迅雷的資源服 務器,自己是否是公網IP. 該報文由於無返回報文,所以猜想採用的辦法是採用STUN的方法: 將原生IP地址放在UDP的payload裡,如果迅雷的伺服器收到報文發現IP層的源地址 和payload裡的IP地址一致,那麼就是公網地址,否則就是處於防火牆後面或者需要經 NAT才能上公網。 協議報文如下: 註: sandai.net是xunlei旗下的一個網站,很少單獨拋頭露面,多出現在迅雷軟體檢索關聯 資訊、顯示廣告的DNS請求報文中。 4TP過濾 如果TP武斷的對迅雷進行過濾,只需要設定一個traffic management,把目的地址為219.134.132.0/24網段,目的連接埠為3076的報文全部過濾就可以防止迅雷下載,但是有可能會誤判。下面的規則更詳細一點,可以減少誤判。 1.針對使用者向伺服器資源請求報文和資源回應報文的過濾 由於迅雷的伺服器IP地址比較容易更換,所以建議過濾的DV: 協議:tcp 源連接埠/目的連接埠:3076 開始的四個位元組:0x29000000 2.針對使用者之間的資源資訊互動報文的過濾 協議UDP 連接埠3076 前四個位元組0x32000000 3.針對使用者之間的檔案傳輸(握手報文)的過濾 協議tcp 源連接埠或者目的連接埠可以為3077、3078 前四個位元組為0x29000000 4.提交新的資源資訊的報文的過濾 協議TCP 目的連接埠3076 前四個位元組0x29000000 5.針對串連NAT測試伺服器的報文的過濾 協議UDP 目的連接埠3076 前四個位元組0x00000101 |