BEncode编码方式以及torrent文件的一些内容
字符串:
字符串被如此編碼:<字符串長度>:字符串正文.這種表示法沒有任何的分界符.
例子:如"8:announce"指"announce".
整數:
整數被如此編碼:<i>整數值<e>.可以為負數,如'i-3e'
例子:'i3e' 指 3.
列表:
列表是如此被表示的:<l>Bencode Value<e>,
列表可以用來表示多個對象.
列表內容可以包括字符串,整數,字典,甚至列表本身.
例子:'l4:spam4:eggse' 指 [ "spam", eggs" ]
字典:
字典是一個一對一的映射.它表示了一個主鍵(必須為字符串)和一個數據項(可以為任何Bencode值)的關系.字典可以用來表示一個對象的多種屬性.
字典是如此被編碼:<d><bencoded string><bencoded element><e>
注意:字典必須根據主鍵預排序.
Metainfo
BitTorrent下載時,用戶必須下載一個.torrent文件.它就是所謂"Metainfo file",里面存儲有關于下載內容的announce地址,長度,大小,SHA1雜湊項等內容.它由Bencode編碼組成.而且字符串是用UTF-8編碼的.
不過在中國,常常使用GBK編碼。它由如下幾項組成:
- :描述下載內容的信息,是一個字典.有兩種可能,一種是"單文件"模式:當BitTorrent只下載一個文件的時候使用.另一種是"多文件"模式,是在下載多個內容的時候使用.兩種情況下Info各有不同.Info
- :整數,指文件的大小.length
- :(可選),字符串,含有32字節md5校驗碼.BitTorrent沒有使用MD5而是使用了SHA1作為自已的簽名算法.這是為其他P2P軟件兼容而設置的可選內容.md5sum
- :字符串,這是下載文件的名字,純粹是建議.name
- :整數,是BitTorrent文件塊的大小.piece length
- :字符串,連續的存放著所有塊的SHA1雜湊值,每一個文件塊的雜湊值為20字節.pieces
- files: 一個由字典組成的列表,每個字典表示一個文件,字典的鍵值有如下內容:
- length:整數,指當前文件的大小.
- md5sum:(可選),字符串,同單文件模式,指當前文件.
- path:由字符串組成的列表,每個列表元素指一個路徑名中的一個目錄或文件名.比如說:"l3:abc3:abc:6abc.txte",指文件路徑"abc/abc/abc.txt".
- :字符串,BitTorrent下載路徑中最上層的目錄名name
- :整數,是BitTorrent文件塊的大小.piece length
- :字符串,連續的存放著所有塊的SHA1雜湊值,每一個文件塊的雜湊值為20字節.pieces
- :字符串,指向tracker的URL.announce
- :(可選),字典,這是一個對官方協議的擴展,支持"多Tracker".announce-list
- :(可選),整數,創建日期(UNIX創世紀格式:1970-1-1日00:00UTC到當時的秒數)creation date
- :(可選),字符串,注釋comment
- :可選,字符串,創建此.torrent文件的BT下載端程序名和版本號created by
- :BitComet對Metafile的擴展,一般用來指出不使用utf-8而使用gbk.encoding
舉一個例子,星球大戰:
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:piecelengthi262144e6:pieces36220:XXXXXXXXXXXXXXX(SHA1雜湊 值)
表示了如下信息:
Tracker地址 : http://tracker.ydy.com:86/announce
被BitComet/0.58創建
創建時間:1970-1-1 00:00秒后1117953113秒.即Sun Jun 5 14:31:53 2005.
encoding是BitComet的擴展,實際上用了UTF-8就不需要GBK.
- info: (這是單文件模式的代表)
- 大小:474499162(452Mb)
- 文件名:05.262005.Star Wars Episode IV A New Hope-Rv9.rmvb
- name.utf-8:也是BitComet的擴展,指出文件名編碼不是GBK而是UTF-8.
- 文件塊大小:262144字節(256KB)
- pieces:長度為366220的SHA1雜湊值內容,由于每一個文件塊20字節SHA1雜湊值,可見文件塊有36620 / 20 = 1831個
總結
以上是生活随笔為你收集整理的BEncode编码方式以及torrent文件的一些内容的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt paintevent事件
- 下一篇: [New Portal]Windows