Torrent 文件格式详解.docx

上传人:b****6 文档编号:4365932 上传时间:2022-11-30 格式:DOCX 页数:14 大小:90.35KB
下载 相关 举报
Torrent 文件格式详解.docx_第1页
第1页 / 共14页
Torrent 文件格式详解.docx_第2页
第2页 / 共14页
Torrent 文件格式详解.docx_第3页
第3页 / 共14页
Torrent 文件格式详解.docx_第4页
第4页 / 共14页
Torrent 文件格式详解.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

Torrent 文件格式详解.docx

《Torrent 文件格式详解.docx》由会员分享,可在线阅读,更多相关《Torrent 文件格式详解.docx(14页珍藏版)》请在冰豆网上搜索。

Torrent 文件格式详解.docx

Torrent文件格式详解

Torrent文件格式分析

首先,我在网上找一个最近比较流行的大片《环太平洋》的torrent文件。

通过用UE把它打开,我们来看一下此torrent文件的内容:

d8:

announce39:

:

8077/announce13:

announce-listll39:

:

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:

19:

publisher-url.utf-821:

15:

publisher.utf-812:

椋為笩濞变箰e5:

nodesll21:

i6881eel20:

i53eeee

 

下面我们开始详细讲解一下torrent文件格式:

B编码

为了在torrent文件中存储bt下载所需信息,需要一定规范记录这些信息,在这里torrent文件使用的是BEncode格式规范,和JSON一样,本质都是用来交换和存储信息。

BEncode有四种存储类型:

(字符串型、数值型、列表型、字典型)

1、字符串[string]

字符串表示方式为:

数字前缀:

字符串,例如super表示为:

5:

super数字前缀以十进制数字指出字符串的长度。

例如:

0:

””

4:

大庆

6:

daqing

15:

2、数值[integers]

数值的表示方式为:

以小写字母”i”开始,以小写字母”e”结尾,ie中间放置十进制数值。

例如:

i0e表示数字0(零)

i-3e表示数字-3

i7e表示数字7

3、列表[list]

列表类型允许嵌套,列表中的可以存储列表,列表的表示方式:

以小写字母”l”开始,以小写字母”e”结尾,le中间放置存储的内容。

例如:

l7:

figo’s4:

blog3:

url23:

e

该list的内容为[‘super’s’,’blog’,’url’,’’]

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:

:

8077/announce13:

announce-listll39:

:

8077/announceel30:

http:

//tracker.prq.to/announceee8:

codepagei936e13:

creationdatei1381766089e

即可理解为:

announce=[‘:

8077/announce’]

announce-list=[‘:

8077/announce’,’http:

//tracker.prq.to/announce’]

codepage=936#代码936简体中文GBK

creationdate=1381766089#unix时间格式,此处是2013-10-1423:

54:

49

种子文件结构

关键字

含义

info

该关键字对应的值是一个字典,它有两种模式,”singlefile”和”multiplefile”:

单文件模式和多文件模式,单文件模式是指共享的文件只有一个,多文件模式是指提供共享的文件不止一个,而是两个或两个以上,如果使用BT软件下载一部影片时,影片的上下部分可能分别放在不同的文件里。

announce

必选

该关键字的值为Tracker的URL。

announce-list

可选

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

creation-date

可选

该关键字对应的值存放的是种子文件创建的时间。

comment

可选

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

createdby

可选

值存放生成种子文件的BT客户端软件的信息,如客户端名、版本号。

在bitTorrent规范中,torrent文件又被称作Metainfofiles,其主要有announce部分和info部分组成。

1、announce部分(红色表示必选,蓝色部分表示可选)

例如:

announce

默认的tracker服务器地址

announce-list

(对标准的扩展)备选的tracker服务器列表,这里需要说明一下备选服务器的选择和尝试连接顺序。

如下的表示为announce-list的一种表示:

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

在bt客户端程序连接tracker服务器时,对于announce-list的处理过程如下:

1)、首先依次尝试连接第一个列表提供的url,如果tracker1无响应,尝试tracker2.当tracker2连接成功时,则第一个备份列表中的处理顺序变为:

[tracker2,tracker1,tracker3]

2)、如果第一个备份列表依次连接失败,则尝试backup2-list。

如果backup2-list也依次连接失败。

则尝试连接backup3-list。

但是backup2-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:

:

8077/announce13:

announce-listll39:

:

8077/announceel30:

http:

//tracker.prq.to/announceee8:

codepagei936e13:

creationdatei1381766089e

可分解为

d

8:

announce

39:

:

8077/announce

13:

announce-list

l

l39:

:

8077/announcee

l30:

http:

//tracker.prq.to/announcee

e

8:

codepage

i936e

13:

creationdate

i1381766089e

#上图中:

D表示字典型、S表示字符串型、L表示列表型、N表示数值型

2、info部分(红色表示必须的部分,蓝色部分表示可选的部分)

这里需要注意info部分的单文件传输和多文件传输时的不同:

单文件传输是指torrent文件只存储了单个文件下载信息;多文件传输指torrent中存储了一个以上的文件下载信息。

关键字

含义

piecelength

每个piece的长度,值是B编码类型,通常为i262144e,即256K

pieces

字符串类型,存放每个piece的hash值,这个字符串长度一定是20的倍数,因为每个piece的hash值的长度为20字节。

private

该值如果为1,则表明客户端必须通过连接Tracker来获取其他下载者信息,即peer的IP地址和端口号;如果为0,则表明客户端还可以通过其它方式获取peer的IP地址和端口号,如DHT方式,DHT(DistributeHashTabel)即分布式哈希表,它是一种以分布式的方式来获取peer的方法,现在许多BT客户端既支持通过Tracker来获取peer,也支持通过DHT来获取peer,如果种子文件中没有private关键字,则表明不限制一定要通过连接tracker来获取peer。

单文件

name

共享文件的文件名,也就是要下载的文件的文件名。

length

共享文件的长度,以byte为单位。

md5sum

可选,是共享文件的md5值,这个值在bt协议中根本不是用。

多文件

name

存放共享文件的文件夹名字。

file

它的值是一个列表,含有多个字典,每个共享文件为一个字典。

每个字典中含有三个关键字:

length、md5sum、path

files字典

length

共享文件的长度,以byte为单位。

md5sum

可选,同上。

path

存放共享文件的路径和文件名。

1)、单文件传输形式:

name

要下载的文件名字

length

要下载文件的大小(单位为byte)

md5sum

32为的16进制MD5字符串。

piecelength

要下载文件按照piecelength指定大小分片,此处指明单个分片大小。

pieces

存储每个分片的SHA1值(每个SHA1的hash长度为20byte)

例如:

目标文件大小FileSpace为1039143285bytes,文件每个分片大小PerPieceSpace为1048576bytes,计算可得:

1039143285=1048576x991+4469

即FileSpace=PerPieceSpace*991+4469

目标文件按照指定大小分片后,为991个满足分片大小的分片文件和1个余数文件,总共是992个小文件。

其存储的SHA1每个长度为20bytes,进而可知pieces中存储的SHA1个数为:

NumberOfSHA1=19840/20=992

即torrent文件的pieces中存储了992个SHA1值。

这样每个小文件都对应上了一个SHA1校验值。

2)、多文件传输形式

files

表示该torrent为多文件形式,每个文件都是dictionary类型数据表示。

name

表示多个文件存储在以name命名的文件夹。

length

要下载文件的大小(单位为byte)

path

指出要下载文件存储相对于name字段表示的文件夹的位置。

假设name为dir1,此时:

1)如果path值为file1.rmvb,表示file1.rmvb的存储路径为dir1\file1.rmvb

2)如果path值为dir2\file1.rmvb,表示file1.rmvb的存储路径为dir1\dir2\file1.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:

19:

publisher-url.utf-821:

15:

publisher.utf-812:

椋為笩濞变箰e5:

nodesll21:

i6881eel20:

i53eeee

分解文件为

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:

19:

publisher-url.utf-8

21:

15:

publisher.utf-8

12:

椋為笩濞变箰

e#这个e是紧随info后面d的结束符

5:

nodes

l

l

21:

i6881e

e

l

20:

i53e

e

e

e#这个e是文件开头d的结束符

#这个nodes部分是torrent文件的扩展,包含IP和端口的列表,用于连接DHT网络的初始节点,并通过这些节点进行find_node。

最终维护一张完整的DHT路由表。

至此!

torrent文件格式全部讲解完毕,有时间再把BT的通信过程总结一下以作编程及(P2SP、P4P)网络使用。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1