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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

Torrent 文件图文解析

發(fā)布時(shí)間:2023/12/13 综合教程 44 生活家
生活随笔 收集整理的這篇文章主要介紹了 Torrent 文件图文解析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Torrent文件格式分析

首先。我在網(wǎng)上找一個(gè)近期比較流行的大片《環(huán)太平洋》的torrent文件。通過(guò)用UE把它打開(kāi)。我們來(lái)看一下此torrent文件的內(nèi)容:

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:本片簡(jiǎn)單介紹,海報(bào),截圖等,雙擊進(jìn)入查看.urle10:path.utf-8l58:鏈?墖綆€浠嬶紝嫻鋒姤錛屾埅鍥劇瓑錛屽弻鍑昏繘鍏ユ煡鐪?urleed6:lengthi275e4:pathl37:飛鳥(niǎo)網(wǎng)-和浪子一起來(lái)開(kāi)心農(nóng)場(chǎng)偷菜吧.urle10:path.utf-8l53:椋為笩緗?

鍜屾氮瀛愪竴璧鋒潵寮€蹇?jī)鍐滃満鍋疯彍鍚?urleed6:lengthi266e4:pathl45:飛鳥(niǎo)娛樂(lè)-邊看電影邊學(xué)英語(yǔ),娛樂(lè)學(xué)習(xí)兩不誤.urle10:path.utf-8l65:椋為笩濞變箰-杈圭湅鐢?shù)濯?jiǎng)杈瑰?鑻辮?錛屽ū涔愬?涔?fàn)涓や笉?.urleed6:lengthi2640e4:pathl37:飛鳥(niǎo)娛樂(lè)論壇-超多最新爆爽資源下載.rtfe10:path.utf-8l53:椋為笩濞變箰璁哄潧-瓚呭?鏈€鏂扮垎鐖借祫婧愪笅杞?rtfeed6:lengthi288e4:pathl45:飛鳥(niǎo)娛樂(lè)原創(chuàng)IMDBTOP250經(jīng)典大片一網(wǎng)打盡.urle10:path.utf-8l59:椋為笩濞變箰鍘熷垱IMDBTOP250緇忓吀澶х墖涓€緗戞墦灝?urleed6:lengthi2195501970e4:pathl55:環(huán)太平洋Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD.mp4e10:path.utf-8l59:鐜?お騫蟲(chóng)磱Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD.mp4eed6:lengthi266e4:pathl35:老調(diào)網(wǎng)-下載中英字幕電影的好地方.urle10:path.utf-8l50:鑰佽皟緗?涓嬭澆涓?嫳瀛楀箷鐢?shù)濯?jiǎng)鐨勫ソ鍦版柟.urleee4:name51:環(huán)太平洋Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD10:name.utf-855:鐜?お騫蟲(chóng)磱Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD12:piecelengthi2097152e6:pieces20940:(此處省略20940個(gè)字節(jié)的hash值,每一個(gè)piece的hash值占用20個(gè)字節(jié),即20940/20=1047個(gè)piece。)9:publisher8:飛鳥(niǎo)娛樂(lè)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

以下我們開(kāi)始具體解說(shuō)一下torrent文件格式:

B編碼

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

BEncode有四種存儲(chǔ)類(lèi)型:(字符串型、數(shù)值型、列表型、字典型)

1、字符串[string]

字符串表示方式為:數(shù)字前綴:字符串。比如super表示為:5:super數(shù)字前綴以十進(jìn)制數(shù)字指出字符串的長(zhǎng)度。比如:

0:””

4:大慶

6:daqing

15:www.sina.com.cn

2、數(shù)值[integers]

數(shù)值的表示方式為:以小寫(xiě)字母”i”開(kāi)始。以小寫(xiě)字母”e”結(jié)尾,ie中間放置十進(jìn)制數(shù)值。比如:

i0e 表示數(shù)字0(零)

i-3e表示數(shù)字-3

i7e 表示數(shù)字7

3、列表

列表類(lèi)型同意嵌套,列表中的能夠存儲(chǔ)列表。列表的表示方式:以小寫(xiě)字母”l”開(kāi)始。以小寫(xiě)字母”e”結(jié)尾,le中間放置存儲(chǔ)的內(nèi)容。比如:

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

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

l4:yeari2013ee

該list的內(nèi)容為[‘year’,2013]

4、字典[dictionary]

字典是為了讓一個(gè)詳細(xì)的名字[name]與一個(gè)詳細(xì)的數(shù)據(jù)類(lèi)型表示的數(shù)據(jù)關(guān)聯(lián),上面三種類(lèi)型(字符串、整數(shù)、列表)的數(shù)據(jù)僅僅是單純的表示數(shù)據(jù)本身,并未有變量名來(lái)指出該數(shù)據(jù)名稱(chēng)。字典類(lèi)似C語(yǔ)言變量的定義,比如定義一個(gè)名為strName的字符串例如以下:

Char*strName=NULL;

當(dāng)strName指向字符串”Figo”時(shí),那么當(dāng)我們說(shuō)strName時(shí)也即在說(shuō)”Figo”。

BEncode中字典類(lèi)型的存在。就是為了讓數(shù)據(jù)與名稱(chēng)關(guān)聯(lián)配對(duì)。也即dictionary后的數(shù)據(jù)要兩兩配對(duì)。

這里須要注意的是。名稱(chēng)必須為string類(lèi)型。

Dictionary可同意嵌套使用。表示方式:以小寫(xiě)字母’d’開(kāi)始。以小寫(xiě)字母’e’結(jié)尾。de中間放置要存儲(chǔ)的內(nèi)容。例如以下:

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

該dictionary內(nèi)容為{

‘name’=‘Figo’,

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

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

該dictionary內(nèi)容為{

‘Name-dic’={

‘First’=’Figo’,

’Second’=’Tom’}

}

那么開(kāi)頭的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中文簡(jiǎn)體GBK

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

種子文件結(jié)構(gòu)

keyword

含義

info

該keyword相應(yīng)的值是一個(gè)字典。它有兩種模式,”singlefile”和”multiplefile”:?jiǎn)挝募J胶投辔募J剑瑔挝募J绞侵腹蚕淼奈募H僅有一個(gè),多文件模式是指提供共享的文件不止一個(gè)。而是兩個(gè)或兩個(gè)以上,假設(shè)使用BT軟件下載一部影片時(shí),影片的上下部分可能分別放在不同的文件中。

announce

必選

該keyword的值為T(mén)racker的URL。

announce-list

可選

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

creation-date

可選

該keyword相應(yīng)的值存放的是種子文件創(chuàng)建的時(shí)間。

comment

可選

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

createdby

可選

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

在bitTorrent規(guī)范中,torrent文件又被稱(chēng)作Metainfofiles,其主要有announce部分和info部分組成。

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

比如:

announce

默認(rèn)的trackerserver地址

announce-list

(對(duì)標(biāo)準(zhǔn)的擴(kuò)展)備選的trackerserver列表,這里須要說(shuō)明一下備選server的選擇和嘗試連接順序。

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

{‘a(chǎn)nnounce-list’=[[tracker1,tracker2,tracker3],[backup2-list],[backup3-list]]}

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

1)、首先依次嘗試連接第一個(gè)列表提供的url。假設(shè)tracker1無(wú)響應(yīng)。嘗試tracker2.當(dāng)tracker2連接成功時(shí)。則第一個(gè)備份列表中的處理順序變?yōu)椋?/p>

[tracker2,tracker1,tracker3]

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

則嘗試連接backup3-list。可是backup2-list與backup3-list不會(huì)由于連接失敗而像backup1-list那樣改變處理順序;

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

creationdate

torrent文件的創(chuàng)建時(shí)間,為UNIX時(shí)間格式。

comment

string類(lèi)型,是關(guān)于torrent文件的描寫(xiě)敘述信息。

createdby

創(chuàng)建此torrent文件的程序信息。

encoding

指出info中pieces部分的編碼類(lèi)型,一般為UTF-8。有時(shí)也會(huì)遇到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表示數(shù)值型

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

這里須要注意info部分的單文件傳輸和多文件傳輸時(shí)的不同:?jiǎn)挝募鬏斒侵竧orrent文件僅僅存儲(chǔ)了單個(gè)文件下載信息;多文件傳輸指torrent中存儲(chǔ)了一個(gè)以上的文件下載信息。

keyword

含義

piecelength

每一個(gè)piece的長(zhǎng)度,值是B編碼類(lèi)型,通常為i262144e。即256K

pieces

字符串類(lèi)型。存放每一個(gè)piece的hash值,這個(gè)字符串長(zhǎng)度一定是20的倍數(shù)。由于每一個(gè)piece的hash值的長(zhǎng)度為20字節(jié)。

private

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

單文件

name

共享文件的文件名稱(chēng)。也就是要下載的文件的文件名稱(chēng)。

length

共享文件的長(zhǎng)度,以byte為單位。

md5sum

可選,是共享文件的md5值,這個(gè)值在bt協(xié)議中根本不是用。

多文件

name

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

file

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

files字典

length

共享文件的長(zhǎng)度。以byte為單位。

md5sum

可選,同上。

path

存放共享文件的路徑和文件名稱(chēng)。

1)、單文件傳輸形式:

name

要下載的文件名稱(chēng)字

length

要下載文件的大小(單位為byte)

md5sum

32為的16進(jìn)制MD5字符串。

piecelength

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

pieces

存儲(chǔ)每一個(gè)分片的SHA1值(每一個(gè)SHA1的hash長(zhǎng)度為20byte)

比如:目標(biāo)文件大小FileSpace為1039143285bytes,文件每一個(gè)分片大小PerPieceSpace為1048576bytes,計(jì)算可得:

1039143285=1048576x991+4469

即FileSpace=PerPieceSpace*991+4469

目標(biāo)文件依照指定大小分片后,為991個(gè)滿(mǎn)足分片大小的分片文件和1個(gè)余數(shù)文件。總共是992個(gè)小文件。

其存儲(chǔ)的SHA1每一個(gè)長(zhǎng)度為20bytes。進(jìn)而可知pieces中存儲(chǔ)的SHA1個(gè)數(shù)為:
NumberOfSHA1=19840/20=992

即torrent文件的pieces中存儲(chǔ)了992個(gè)SHA1值。這樣每一個(gè)小文件都相應(yīng)上了一個(gè)SHA1校驗(yàn)值。

2)、多文件傳輸形式

files

表示該torrent為多文件形式,每一個(gè)文件都是dictionary類(lèi)型數(shù)據(jù)表示。

name

表示多個(gè)文件存儲(chǔ)在以name命名的目錄。

length

要下載文件的大小(單位為byte)

path

指出要下載文件存儲(chǔ)相對(duì)于name字段表示的目錄的位置。

如果name為dir1,此時(shí):

1)假設(shè)path值為file1.rmvb。表示file1.rmvb的存儲(chǔ)路徑為dir1file1.rmvb

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

md5sum

32位的16進(jìn)制MD5值字符串。

piecelength

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

pieces

存儲(chǔ)每一個(gè)分片的SHA1值(每一個(gè)SHA1的hash長(zhǎng)度為20字節(jié))

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

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

urleed6:lengthi275e4:pathl37:飛鳥(niǎo)網(wǎng)-和浪子一起來(lái)開(kāi)心農(nóng)場(chǎng)偷菜吧.urle10:path.utf-8l53:椋為笩緗?鍜屾氮瀛愪竴璧鋒潵寮€蹇?jī)鍐滃満鍋疯彍鍚?urleed6:lengthi266e4:pathl45:飛鳥(niǎo)娛樂(lè)-邊看電影邊學(xué)英語(yǔ),娛樂(lè)學(xué)習(xí)兩不誤.urle10:path.utf-8l65:椋為笩濞變箰-杈圭湅鐢?shù)濯?jiǎng)杈瑰?鑻辮?錛屽ū涔愬?涔?fàn)涓や笉?.urleed6:lengthi2640e4:pathl37:飛鳥(niǎo)娛樂(lè)論壇-超多最新爆爽資源下載.rtfe10:path.utf-8l53:椋為笩濞變箰璁哄潧-瓚呭?鏈€鏂扮垎鐖借祫婧愪笅杞?

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

)9:publisher8:飛鳥(niǎo)娛樂(lè)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:本片簡(jiǎn)單介紹,海報(bào),截圖等,雙擊進(jìn)入查看.urle

10:path.utf-8

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

e

d

6:length

i275e

4:path

l37:飛鳥(niǎo)網(wǎng)-和浪子一起來(lái)開(kāi)心農(nóng)場(chǎng)偷菜吧.urle

10:path.utf-8

l53:椋為笩緗?鍜屾氮瀛愪竴璧鋒潵寮€蹇?jī)鍐滃満鍋疯彍鍚?urle

e

d

6:length

i266e

4:path

l45:飛鳥(niǎo)娛樂(lè)-邊看電影邊學(xué)英語(yǔ),娛樂(lè)學(xué)習(xí)兩不誤.urle

10:path.utf-8

l65:椋為笩濞變箰-杈圭湅鐢?shù)濯?jiǎng)杈瑰?鑻辮?錛屽ū涔愬?涔?fàn)涓や笉?.urle

e

d

6:length

i2640e

4:path

l37:飛鳥(niǎo)娛樂(lè)論壇-超多最新爆爽資源下載.rtfe

10:path.utf-8

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

rtfe

e

d

6:length

i288e

4:path

l45:飛鳥(niǎo)娛樂(lè)原創(chuàng)IMDBTOP250經(jīng)典大片一網(wǎng)打盡.urle

10:path.utf-8

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

e

d

6:length

i2195501970e

4:path

l55:環(huán)太平洋Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD.mp4e

10:path.utf-8

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

e

d

6:length

i266e

4:path

l35:老調(diào)網(wǎng)-下載中英字幕電影的好地方.urle

10:path.utf-8

l50:鑰佽皟緗?

涓嬭澆涓?嫳瀛楀箷鐢?shù)濯?jiǎng)鐨勫ソ鍦版柟.urle

e

e#這是緊隨files后L的結(jié)束符。

4:name

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

10:name.utf-8

55:鐜?お騫蟲(chóng)磱Pacific.Rim.2013.BluRay.720p.x264.AAC-LZHD

12:piecelength

i2097152e

6:pieces

20940:....................#20940/20=1047個(gè)piece

9:publisher

8:飛鳥(niǎo)娛樂(lè)

13:publisher-url

21:http://bbs.hdbird.com

19:publisher-url.utf-8

21:http://bbs.hdbird.com

15:publisher.utf-8

12:椋為笩濞變箰

e#這個(gè)e是緊隨info后面d的結(jié)束符

5:nodes

l

l

21:router.bittorrent.com

i6881e

e

l

20:router.lanspirit.net

i53e

e

e

e#這個(gè)e是文件開(kāi)頭d的結(jié)束符

#這個(gè)nodes部分是torrent文件的擴(kuò)展,包括IP和port的列表,用于連接DHT網(wǎng)絡(luò)的初始節(jié)點(diǎn)。并通過(guò)這些節(jié)點(diǎn)進(jìn)行find_node。

終于維護(hù)一張完整的DHT路由表。

至此!torrent文件格式所有解說(shuō)完成,有時(shí)間再把BT的通信過(guò)程總結(jié)一下以作編程及(P2SP、P4P)網(wǎng)絡(luò)使用。

總結(jié)

以上是生活随笔為你收集整理的Torrent 文件图文解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。