日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Torrent 文件图文解析

發布時間:2023/12/13 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 Torrent 文件图文解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Torrent文件格式分析

首先。我在網上找一個近期比較流行的大片《環太平洋》的torrent文件。通過用UE把它打開。我們來看一下此torrent文件的內容:

d8:announce39:http://tracker.bestxl.com:8077/announce13:announce-listll39:http://tracker.bestxl.com:8077/announceel30:http://tracker.prq.to/announceee8:codepagei936e13:creationdatei1381766089e4:infod5:filesld6:lengthi202e4:pathl40:本片簡單介紹,海報,截圖等,雙擊進入查看.urle10:path.utf-8l58:鏈?墖綆€浠嬶紝嫻鋒姤錛屾埅鍥劇瓑錛屽弻鍑昏繘鍏ユ煡鐪?urleed6:lengthi275e4:pathl37:飛鳥網-和浪子一起來開心農場偷菜吧.urle10:path.utf-8l53:椋為笩緗?

鍜屾氮瀛愪竴璧鋒潵寮€蹇冨啘鍦哄伔鑿滃惂.urleed6:lengthi266e4:pathl45:飛鳥娛樂-邊看電影邊學英語,娛樂學習兩不誤.urle10:path.utf-8l65:椋為笩濞變箰-杈圭湅鐢靛獎杈瑰?鑻辮?錛屽ū涔愬?涔犱袱涓嶈?.urleed6:lengthi2640e4:pathl37:飛鳥娛樂論壇-超多最新爆爽資源下載.rtfe10:path.utf-8l53:椋為笩濞變箰璁哄潧-瓚呭?鏈€鏂扮垎鐖借祫婧愪笅杞?rtfeed6:lengthi288e4:pathl45:飛鳥娛樂原創IMDBTOP250經典大片一網打盡.urle10:path.utf-8l59:椋為笩濞變箰鍘熷垱IMDBTOP250緇忓吀澶х墖涓€緗戞墦灝?urleed6:lengthi2195501970e4:pathl55:環太平洋Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD.mp4e10:path.utf-8l59:鐜?お騫蟲磱Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD.mp4eed6:lengthi266e4:pathl35:老調網-下載中英字幕電影的好地方.urle10:path.utf-8l50:鑰佽皟緗?涓嬭澆涓?嫳瀛楀箷鐢靛獎鐨勫ソ鍦版柟.urleee4:name51:環太平洋Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD10:name.utf-855:鐜?お騫蟲磱Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD12:piecelengthi2097152e6:pieces20940:(此處省略20940個字節的hash值,每一個piece的hash值占用20個字節,即20940/20=1047個piece。)9:publisher8:飛鳥娛樂13:publisher-url21:http://bbs.hdbird.com19:publisher-url.utf-821:http://bbs.hdbird.com15:publisher.utf-812:椋為笩濞變箰e5:nodesll21:router.bittorrent.comi6881eel20:router.lanspirit.neti53eeee

以下我們開始具體解說一下torrent文件格式:

B編碼

為了在torrent文件里存儲bt下載所需信息。須要一定規范記錄這些信息,在這里torrent文件使用的是BEncode格式規范,和JSON一樣,本質都是用來交換和存儲信息。

BEncode有四種存儲類型:(字符串型、數值型、列表型、字典型)

1、字符串[string]

字符串表示方式為:數字前綴:字符串。比如super表示為:5:super數字前綴以十進制數字指出字符串的長度。比如:

0:””

4:大慶

6:daqing

15:www.sina.com.cn

2、數值[integers]

數值的表示方式為:以小寫字母”i”開始。以小寫字母”e”結尾,ie中間放置十進制數值。比如:

i0e 表示數字0(零)

i-3e表示數字-3

i7e 表示數字7

3、列表

列表類型同意嵌套,列表中的能夠存儲列表。列表的表示方式:以小寫字母”l”開始。以小寫字母”e”結尾,le中間放置存儲的內容。比如:

l7:figo’s4:blog3:url23:http://news.sina.com.cne

該list的內容為[‘super’s’,’blog’,’url’,’http://news.sina.com.cn’]

l4:yeari2013ee

該list的內容為[‘year’,2013]

4、字典[dictionary]

字典是為了讓一個詳細的名字[name]與一個詳細的數據類型表示的數據關聯,上面三種類型(字符串、整數、列表)的數據僅僅是單純的表示數據本身,并未有變量名來指出該數據名稱。字典類似C語言變量的定義,比如定義一個名為strName的字符串例如以下:

Char*strName=NULL;

當strName指向字符串”Figo”時,那么當我們說strName時也即在說”Figo”。

BEncode中字典類型的存在。就是為了讓數據與名稱關聯配對。也即dictionary后的數據要兩兩配對。

這里須要注意的是。名稱必須為string類型。

Dictionary可同意嵌套使用。表示方式:以小寫字母’d’開始。以小寫字母’e’結尾。de中間放置要存儲的內容。例如以下:

d4:Name:4:Figo5:Hobbyl8:football5:sleep8:thinkingee

該dictionary內容為{

‘name’=‘Figo’,

’Hobby’=[‘football’,’sleep’,’thinking’]}

d8:Name-dicd5:First4:Figo6:Second3:Tomee

該dictionary內容為{

‘Name-dic’={

‘First’=’Figo’,

’Second’=’Tom’}

}

那么開頭的torrent文件announce部分

d8:announce39:http://tracker.bestxl.com:8077/announce13:announce-listll39:http://tracker.bestxl.com:8077/announceel30:http://tracker.prq.to/announceee8:codepagei936e13:creationdatei1381766089e

就可以理解為:

announce=[‘http://tracker.bestxl.com:8077/announce’]

announce-list=[‘http://tracker.bestxl.com:8077/announce’,’http://tracker.prq.to/announce’]

codepage=936#代碼936中文簡體GBK

creationdate=1381766089#unix時間格式。此處是2013-10-1423:54:49

種子文件結構

keyword

含義

info

該keyword相應的值是一個字典。它有兩種模式,”singlefile”和”multiplefile”:單文件模式和多文件模式,單文件模式是指共享的文件僅僅有一個,多文件模式是指提供共享的文件不止一個。而是兩個或兩個以上,假設使用BT軟件下載一部影片時,影片的上下部分可能分別放在不同的文件中。

announce

必選

該keyword的值為Tracker的URL。

announce-list

可選

它的值存放的是備用Tracker的URL。

creation-date

可選

該keyword相應的值存放的是種子文件創建的時間。

comment

可選

它的值存放的是種子文件制作者的備注信息。

createdby

可選

值存放生成種子文件的BTclient軟件的信息,如client名、版本。

在bitTorrent規范中,torrent文件又被稱作Metainfofiles,其主要有announce部分和info部分組成。

1、announce部分(紅色表示必選,藍色部分表示可選)

比如:

announce

默認的trackerserver地址

announce-list

(對標準的擴展)備選的trackerserver列表,這里須要說明一下備選server的選擇和嘗試連接順序。

例如以下的表示為announce-list的一種表示:

{‘announce-list’=[[tracker1,tracker2,tracker3],[backup2-list],[backup3-list]]}

在btclient程序連接trackerserver時,對于announce-list的處理步驟例如以下:

1)、首先依次嘗試連接第一個列表提供的url。假設tracker1無響應。嘗試tracker2.當tracker2連接成功時。則第一個備份列表中的處理順序變為:

[tracker2,tracker1,tracker3]

2)、假設第一個備份列表依次連接失敗,則嘗試backup2-list。假設backup2-list也依次連接失敗。

則嘗試連接backup3-list??墒莃ackup2-list與backup3-list不會由于連接失敗而像backup1-list那樣改變處理順序;

3)、改變的list順序僅僅對此次程序連接嘗試順序有影響,原始的torrent文件并不更改,下次重新啟動程序后依然依照torrent文件里的announce-list次序嘗試。

creationdate

torrent文件的創建時間,為UNIX時間格式。

comment

string類型,是關于torrent文件的描寫敘述信息。

createdby

創建此torrent文件的程序信息。

encoding

指出info中pieces部分的編碼類型,一般為UTF-8。有時也會遇到GBK。

比如文件前面的B編碼

d8:announce39:http://tracker.bestxl.com:8077/announce13:announce-listll39:http://tracker.bestxl.com:8077/announceel30:http://tracker.prq.to/announceee8:codepagei936e13:creationdatei1381766089e

可分解為

d

8:announce

39:http://tracker.bestxl.com:8077/announce

13:announce-list

l

l39:http://tracker.bestxl.com:8077/announcee

l30:http://tracker.prq.to/announcee

e

8:codepage

i936e

13:creationdate

i1381766089e

#上圖中:D表示字典型、S表示字符串型、L表示列表型、N表示數值型

2、info部分(紅色表示必須的部分,藍色部分表示可選的部分)

這里須要注意info部分的單文件傳輸和多文件傳輸時的不同:單文件傳輸是指torrent文件僅僅存儲了單個文件下載信息;多文件傳輸指torrent中存儲了一個以上的文件下載信息。

keyword

含義

piecelength

每一個piece的長度,值是B編碼類型,通常為i262144e。即256K

pieces

字符串類型。存放每一個piece的hash值,這個字符串長度一定是20的倍數。由于每一個piece的hash值的長度為20字節。

private

該值假設為1。則表明client必須通過連接Tracker來獲取其他下載者信息。即peer的IP地址和port號;假設為0,則表明client還能夠通過其他方式獲取peer的IP地址和port號,如DHT方式。DHT(DistributeHashTabel)即分布式哈希表。它是一種以分布式的方式來獲取peer的方法,如今很多BTclient既支持通過Tracker來獲取peer,也支持通過DHT來獲取peer,假設種子文件里沒有privatekeyword。則表明不限制一定要通過連接tracker來獲取peer。

單文件

name

共享文件的文件名稱。也就是要下載的文件的文件名稱。

length

共享文件的長度,以byte為單位。

md5sum

可選,是共享文件的md5值,這個值在bt協議中根本不是用。

多文件

name

存放共享文件的目錄名字。

file

它的值是一個列表。含有多個字典,每一個共享文件為一個字典。每一個字典中含有三個keyword:length、md5sum、path

files字典

length

共享文件的長度。以byte為單位。

md5sum

可選,同上。

path

存放共享文件的路徑和文件名稱。

1)、單文件傳輸形式:

name

要下載的文件名稱字

length

要下載文件的大?。▎挝粸閎yte)

md5sum

32為的16進制MD5字符串。

piecelength

要下載文件依照piecelength指定大小分片,此處指明單個分片大小。

pieces

存儲每一個分片的SHA1值(每一個SHA1的hash長度為20byte)

比如:目標文件大小FileSpace為1039143285bytes,文件每一個分片大小PerPieceSpace為1048576bytes,計算可得:

1039143285=1048576x991+4469

即FileSpace=PerPieceSpace*991+4469

目標文件依照指定大小分片后,為991個滿足分片大小的分片文件和1個余數文件??偣彩?92個小文件。

其存儲的SHA1每一個長度為20bytes。進而可知pieces中存儲的SHA1個數為:
NumberOfSHA1=19840/20=992

即torrent文件的pieces中存儲了992個SHA1值。這樣每一個小文件都相應上了一個SHA1校驗值。

2)、多文件傳輸形式

files

表示該torrent為多文件形式,每一個文件都是dictionary類型數據表示。

name

表示多個文件存儲在以name命名的目錄。

length

要下載文件的大?。▎挝粸閎yte)

path

指出要下載文件存儲相對于name字段表示的目錄的位置。

如果name為dir1,此時:

1)假設path值為file1.rmvb。表示file1.rmvb的存儲路徑為dir1file1.rmvb

2)假設path值為dir2file1.rmvb。表示file1.rmvb的存儲路徑為dir1dir2file1.rmvb

md5sum

32位的16進制MD5值字符串。

piecelength

要下載文件安裝piecelength指定大小分片,此處指明單個分片大小。

pieces

存儲每一個分片的SHA1值(每一個SHA1的hash長度為20字節)

以下我們看一下info部分的演示樣例:

4:infod5:filesld6:lengthi202e4:pathl40:本片簡單介紹,海報,截圖等,雙擊進入查看.urle10:path.utf-8l58:鏈?墖綆€浠嬶紝嫻鋒姤錛屾埅鍥劇瓑錛屽弻鍑昏繘鍏ユ煡鐪?

urleed6:lengthi275e4:pathl37:飛鳥網-和浪子一起來開心農場偷菜吧.urle10:path.utf-8l53:椋為笩緗?鍜屾氮瀛愪竴璧鋒潵寮€蹇冨啘鍦哄伔鑿滃惂.urleed6:lengthi266e4:pathl45:飛鳥娛樂-邊看電影邊學英語,娛樂學習兩不誤.urle10:path.utf-8l65:椋為笩濞變箰-杈圭湅鐢靛獎杈瑰?鑻辮?錛屽ū涔愬?涔犱袱涓嶈?.urleed6:lengthi2640e4:pathl37:飛鳥娛樂論壇-超多最新爆爽資源下載.rtfe10:path.utf-8l53:椋為笩濞變箰璁哄潧-瓚呭?鏈€鏂扮垎鐖借祫婧愪笅杞?

rtfeed6:lengthi288e4:pathl45:飛鳥娛樂原創IMDBTOP250經典大片一網打盡.urle10:path.utf-8l59:椋為笩濞變箰鍘熷垱IMDBTOP250緇忓吀澶х墖涓€緗戞墦灝?urleed6:lengthi2195501970e4:pathl55:環太平洋Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD.mp4e10:path.utf-8l59:鐜?お騫蟲磱Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD.mp4eed6:lengthi266e4:pathl35:老調網-下載中英字幕電影的好地方.urle10:path.utf-8l50:鑰佽皟緗?涓嬭澆涓?嫳瀛楀箷鐢靛獎鐨勫ソ鍦版柟.urleee4:name51:環太平洋Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD10:name.utf-855:鐜?お騫蟲磱Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD12:piecelengthi2097152e6:pieces20940:(此處省略20940個字節的hash值,每一個piece的hash值占用20個字節。即20940/20=1047個piece。

)9:publisher8:飛鳥娛樂13:publisher-url21:http://bbs.hdbird.com19:publisher-url.utf-821:http://bbs.hdbird.com15:publisher.utf-812:椋為笩濞變箰e5:nodesll21:router.bittorrent.comi6881eel20:router.lanspirit.neti53eeee

分解文件為

4:info

d

5:files

l

d

6:length

i202e

4:path

l40:本片簡單介紹,海報,截圖等,雙擊進入查看.urle

10:path.utf-8

l58:鏈?墖綆€浠嬶紝嫻鋒姤錛屾埅鍥劇瓑錛屽弻鍑昏繘鍏ユ煡鐪?urle

e

d

6:length

i275e

4:path

l37:飛鳥網-和浪子一起來開心農場偷菜吧.urle

10:path.utf-8

l53:椋為笩緗?鍜屾氮瀛愪竴璧鋒潵寮€蹇冨啘鍦哄伔鑿滃惂.urle

e

d

6:length

i266e

4:path

l45:飛鳥娛樂-邊看電影邊學英語,娛樂學習兩不誤.urle

10:path.utf-8

l65:椋為笩濞變箰-杈圭湅鐢靛獎杈瑰?鑻辮?錛屽ū涔愬?涔犱袱涓嶈?.urle

e

d

6:length

i2640e

4:path

l37:飛鳥娛樂論壇-超多最新爆爽資源下載.rtfe

10:path.utf-8

l53:椋為笩濞變箰璁哄潧-瓚呭?鏈€鏂扮垎鐖借祫婧愪笅杞?

rtfe

e

d

6:length

i288e

4:path

l45:飛鳥娛樂原創IMDBTOP250經典大片一網打盡.urle

10:path.utf-8

l59:椋為笩濞變箰鍘熷垱IMDBTOP250緇忓吀澶х墖涓€緗戞墦灝?urle

e

d

6:length

i2195501970e

4:path

l55:環太平洋Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD.mp4e

10:path.utf-8

l59:鐜?お騫蟲磱Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD.mp4e

e

d

6:length

i266e

4:path

l35:老調網-下載中英字幕電影的好地方.urle

10:path.utf-8

l50:鑰佽皟緗?

涓嬭澆涓?嫳瀛楀箷鐢靛獎鐨勫ソ鍦版柟.urle

e

e#這是緊隨files后L的結束符。

4:name

51:環太平洋Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD#存放共享文件的目錄名字

10:name.utf-8

55:鐜?お騫蟲磱Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD

12:piecelength

i2097152e

6:pieces

20940:....................#20940/20=1047個piece

9:publisher

8:飛鳥娛樂

13:publisher-url

21:http://bbs.hdbird.com

19:publisher-url.utf-8

21:http://bbs.hdbird.com

15:publisher.utf-8

12:椋為笩濞變箰

e#這個e是緊隨info后面d的結束符

5:nodes

l

l

21:router.bittorrent.com

i6881e

e

l

20:router.lanspirit.net

i53e

e

e

e#這個e是文件開頭d的結束符

#這個nodes部分是torrent文件的擴展,包括IP和port的列表,用于連接DHT網絡的初始節點。并通過這些節點進行find_node。

終于維護一張完整的DHT路由表。

至此!torrent文件格式所有解說完成,有時間再把BT的通信過程總結一下以作編程及(P2SP、P4P)網絡使用。

總結

以上是生活随笔為你收集整理的Torrent 文件图文解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。