迅雷協議的研究(ZT)
協議概述
迅雷是基于P2SP的一款下載軟件,能夠大大增強下載速度,可謂迅雷不及掩耳盜鈴之勢如破竹。
P2SP的道理不復雜,就是指:如果多個服務器上有某個相同的文件,當某個用戶下載其中一個服務器上的這一文件時,迅雷會自動查找到另外的幾個服務器,同時下載這一文件,達到提速的目的。
下載原理
還記得百度的mp3搜索么?你到mp3.baidu.com上搜索一個mp3,百度會給你列出她知道的所有服務器列表(這些服務器都是別人的),你可以在百度上點擊該連接下載mp3,而不用登陸真正的服務器。
迅雷就是把這個過程自動化了,并且增加了判斷文件唯一性的功能,畫個圖簡單說明一下:
1.用戶點擊1.2.3.4上的QQ_1.exe文件的連接
2.用戶客戶機上的迅雷得到該文件的唯一的校驗值。
3.迅雷自動向自己的資源服務器上搜索,查找到存放同一文件的其他的服務器列表
4.得到文件在該服務器上的目錄和文件名(紅色部分,有可能和原始連接中的文件名不相同),ftp://1.2.3.5/QQ_2.exe,http://1.2.3.6/QQ_3.exe,以及公網用戶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就是搜索到的包含要下載文件的公網用戶。
協議解析
分析第二節原理圖中的下載過程,第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
通訊方式
迅雷支持Http連接、Ftp連接、MMS連接、RTSP連接以及其他代理模式。
迅雷查詢和下載資源默認使用TCP 3076和3077端口,迅雷的雷區注冊和登陸使用的是TCP 5200和6200端口。如果登陸端口TCP 6200、3076和3077端口都不通,就會自動跳轉到Http的80端口登陸。(注:HTTP 80端口為上網瀏覽必須的端口。)
如何封堵迅雷?
由于迅雷會自動進行端口轉換,而且最重要的是迅雷可以走80端口,所以我們建議你采取以下方法進行控制:
1)封堵迅雷的服務器的IP和迅雷的主要下載站點和占用的端口
2)通過限制主機的鏈接數來控制迅雷的下載(但是無法限制迅雷從單點高速下載)
3)在用聚生網管封堵迅雷時,則可以選擇P2P下載里面迅雷,除此之外,你還需要在禁止普通下載那里設置文件后綴名;如果你想完全控制迅雷的下載,還需要勾選上“禁止一且http”下載。
總之,控制迅雷,禁止迅雷,限制迅雷,封堵迅雷,監控迅雷,控制迅雷,禁止迅雷,限制 迅雷,封堵迅雷,監控迅雷,禁迅雷,限迅雷,封迅雷,禁迅雷,限迅雷,封迅雷,迅雷端口,迅雷協議,迅雷服務器IP,如何控制迅雷,如何禁止迅雷,如何限 制迅雷,如何封堵迅雷,如何監控迅雷,如何管理迅雷等等這些功能,聚生網管可以實現!