初步探討BitTorrent文件的結構


初步探討BitTorrent文件的結構

百度百科介紹:

torrent文件本質上是文本文件,包含Tracker信息和文件信息兩部分。Tracker信息主要是BT下載中需要用到的Tracker服務器的地址和針對Tracker服務器的設置,文件信息是根據對目標文件的計算生成的,計算結果根據BitTorrent協議內的B編碼規則進行編碼。它的主要原理是需要把提供下載的文件虛擬分成大小相等的塊,塊大小必須為2k的整數次方(由於是虛擬分塊,硬盤上並不產生各個塊文件),並把每個塊的索引信息和Hash驗證碼寫入.torrent文件中;所以,.torrent文件就是被下載文件的“索引”。

bt下載原理

下載者要下載文件內容,需要先得到相應的.torrent文件,然后使用BT客戶端軟件進行下載。
下載時,BT客戶端首先解析.torrent文件得到Tracker地址,然后連接Tracker服務器。Tracker服務器回應下載者的請求,提供下載者其他下載者(包括發布者)的IP。下載者再連接其他下載者,根據.torrent文件,兩者分別告知對方自己已經有的塊,然后交換對方沒有的數據。此時不需要其他服務器參與,分散了單個線路上的數據流量,因此減輕了服務器負擔。
下載者每得到一個塊,需要算出下載塊的Hash驗證碼與.torrent文件中的對比,如果一樣則說明塊正確,不一樣則需要重新下載這個塊。這種規定是為了解決下載內容准確性的問題

引入

首先先了解一下BT文件的編碼方式,就像http協議使用base64編碼一樣,BT文件普遍使用Bencode編碼。

引用自百度百科

雖然比用純二進制編碼效率低,但由於結構簡單而且不受字節存儲順序影響
(所有數字以十進制編碼)——這對於跨平台性非常重要。
而且具有較好的靈活性,即使存在故障的字典鍵,只要將其忽略並更換新的就能兼容補充。

Bencode的編碼方式

  1. 字符串(string):abc = 3:abc 或者 length = 6:length 形如 數字:字符串
  2. 整數(int):1234 = i1234e 或者 3455 = i3455e 形如:i整數e
  3. 鏈表(List):List<”abc” , 233> = l3:abci233ee 形如:l元素元素元素e 注意元素也按照相同的編碼方式
  4. 字典(Dictionary

單文件例子

d8:announce34:http://tracker.ydy.com:86/announce10:createdby13:BitComet/0.5813:creationdatei1117953113e8:encoding3:GBK4:infod6:lengthi474499162e4:name51:05.262005.StarWars Episode IV A New Hope-Rv9.rmvb10:name.utf-851:05.26.2005.Star WasEpisode IV A New Hope-Rv9.rmvb12:pieceslengthi262144e6:pieces36220:XXXXXXXXXXXXXXX(SHA1雜湊值)e

種子來源於這里

然后咱們稍稍按照格式解析一下

d
8:announce
34:http://tracker.ydy.com:86/announce
10:createdby
13:BitComet/0.58
13:creationdate
i1117953113e
8:encoding
3:GBK
4:info
d
6:length
i474499162e
4:name
51:05.262005.StarWars Episode IV A New Hope-Rv9.rmvb
10:name.utf-8
51:05.26.2005.Star WasEpisode IV A New Hope-Rv9.rmvb
12:pieceslength
i262144e
6:pieces
36220:XXXXXXXXXXXXXXX(SHA1雜湊值)
e
e

可以看出是一個字典套字典的結構,當中announce表明了tracker服務器的地址,還有createdby(被何人創建),creationdate(創建時間,unix元年時間到現在的秒數),encodeing(編碼方式),info(文件信息,這里又是一個字典)。
length(文件大小),name(文件名),name.utf-8(也是BitComet的擴展,指出文件名編碼不是GBK而是UTF-8),pieceslength(文件塊大小),pieces(文件塊的SHA1【secure hash algorithm】值,一般一個文件塊是20字節,所以這里36220/20 = 1811個文件塊)

試着來一個真實的例子

種子文件從這里下載的

http://www.dlkoo.com/down/3/2015/377259184.html

d
8:announce
35:http://173.254.204.71:1096/announce
13:announce-list
l
l35:http://173.254.204.71:1096/announcee
l33:http://188.190.120.74:80/announcee
l31:http://95.68.246.30:80/announcee
l34:http://mgtracker.org:2710/announcee
l32:http://t2.popgo.org:7456/annoncee
l35:http://share.camoe.cn:8080/announcee
l40:http://open.acgtracker.com:1096/announcee
l40:http://retracker.adminko.org:80/announcee
l38:http://tracker.xelion.fr:6969/announcee
l36:udp://open.demonii.com:1337/announcee
l44:udp://tracker.openbittorrent.com:80/announcee
l38:udp://tracker.publicbt.com:80/announcee
l32:udp://tracker.prq.to:80/announcee
l34:http://121.14.98.151:9090/announcee
l29:http://94.228.192.98/announcee
l33:udp://208.67.16.113:8000/annonucee
l27:http://bt.dmhy.net/annonucee
l30:http://share.dmhy.org/annonucee
l29:http://share.dmhy.me/annonucee
l34:http://tracker.btcake.com/announcee
l42:http://tracker.ipv6tracker.org:80/announcee
l37:http://tracker.ktxp.com:6868/announcee
l37:http://tracker.ktxp.com:7070/announcee
l33:http://bt.sc-ol.com:2710/announcee
l35:http://btfile.sdo.com:6961/announcee
l40:https://t-115.rhcloud.com/only_for_ylbude
l36:https://tr.bangumi.moe:9696/announcee
l35:http://tr.bangumi.moe:6969/announcee
l38:http://exodus.desync.com:6969/announcee
l35:udp://coppersurfer.tk:6969/announcee
l39:http://tracker3.torrentino.com/announcee
l39:http://tracker2.torrentino.com/announcee
l31:udp://tracker.ex.ua:80/announcee
l29:http://pubt.net:2710/announcee
l32:http://tracker.tfile.me/announcee
l44:http://bigfoot1942.sektori.org:6969/announcee
l33:http://t.nyaatracker.com/announcee
l32:udp://bt.sc-ol.com:2710/announcee
e
10:created by
14:uTorrent/3.4.5
13:creation date
i1450142717e
8:encoding
5:UTF-8
4:info
d
6:length
i1488841251e
4:name
61:[CASO&SumiSora][LoveLive!The_School_Idol_Movie][GB][720p].mp4
12:piece length
i2097152e
6:pieces
14200:���
e
e

ps:14200之后其實有一大段亂碼,為了防止混亂我就刪除了,由此可以初步了解bt文件的結構了。

pss:多文件的也試着看了一下,結構大體相似,只是貌似有多個info,其他的基本一模一樣。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com