Torrent 文件图文解析

Torrent文件格式分析

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

l4:yeari2013ee

该list的内容为[‘year’,2013]

4、 字典[dictionary]

字典是为了让一个具体的名字l8:football5:sleep8:thinkingee

该dictionary内容为{

‘name’ = ‘Figo’,

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

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

该dictionary内容为{

‘Name-dic’= {

‘First’=’Figo’,

’Second’=’Tom’}

}

那么开头的

关键字

含义

info

该关键字对应的值是一个字典,它有两种模式,”single file”和”multiple file”:单文件模式和多文件模式,单文件模式是指共享的文件只有一个,多文件模式是指提供共享的文件不止一个,而是两个或两个以上,如果使用BT软件下载一部影片时,影片的上下部分可能分别放在不同的文件里。

announce

必选

该关键字的值为Tracker的URL。

announce-list

可选

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

creation-date

可选

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

comment

可选

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

created by

可选

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

 

在bitTorrent规范中,torrent文件又被称作Metainfo files,其主要有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次序尝试。

creation date

torrent文件的创建时间,为UNIX时间格式。

comment

string类型,是关于torrent文件的描述信息。

created by

创建此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:creation datei1381766089e

可分解为

d

  8:announce

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

 

  13:announce-list

  

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

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

  e

 

  8:codepage

  i936e

 

  13:creation date

  i1381766089e

 

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

 

 

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

这里需要注意info部分的单文件传输和多文件传输时的不同:单文件传输是指torrent文件只存储了单个文件下载信息;多文件传输指torrent中存储了一个以上的文件下载信息。

关键字

含义

piece length

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

pieces

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

private

该值如果为1,则表明客户端必须通过连接Tracker来获取其他下载者信息,即peer的IP地址和端口号;如果为0,则表明客户端还可以通过其它方式获取peer的IP地址和端口号,如DHT方式,DHT(Distribute Hash Tabel)即分布式哈希表,它是一种以分布式的方式来获取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字符串。

piece length

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

pieces

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

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

1039143285 = 1048576 x 991 + 4469

即 FileSpace= PerPieceSpace*991 + 4469

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

其存储的SHA1每个长度为20 bytes,进而可知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的存储路径为dir1file1.rmvb

2) 如果path值为dir2file1.rmvb,表示file1.rmvb的存储路径为dir1dir2file1.rmvb

md5sum

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

piece length

要下载文件安装piece length指定大小分片,此处指明单个分片大小。

pieces

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

 

下面我们看一下info部分的示例:

 

 4:infod5:filesld6:lengthi202e4:pathl40:本片简介,海报,截图等,双击进入查看.urle10:path.utf-8l58:鏈墖绠€浠嬶紝娴锋姤锛屾埅鍥剧瓑锛屽弻鍑昏繘鍏ユ煡鐪rleed6:lengthi275e4:pathl37:飞鸟网-和浪子一起来开心农场偷菜吧.urle10:path.utf-8l53:椋為笩缃屾氮瀛愪竴璧锋潵寮€蹇冨啘鍦哄伔鑿滃惂.urleed6:lengthi266e4:pathl45:飞鸟娱乐-边看电影边学英语,娱乐学习两不误.urle10:path.utf-8l65:椋為笩濞变箰-杈圭湅鐢靛奖杈瑰鑻辫锛屽ū涔愬涔犱袱涓嶈.urleed6:lengthi2640e4:pathl37:飞鸟娱乐论坛-超多最新爆爽资源下载.rtfe10:path.utf-8l53:椋為笩濞变箰璁哄潧-瓒呭鏈€鏂扮垎鐖借祫婧愪笅杞tfeed6:lengthi288e4:pathl45:飞鸟娱乐原创IMDB TOP250 经典大片 一网打尽.urle10:path.utf-8l59:椋為笩濞变箰鍘熷垱IMDB TOP250 缁忓吀澶х墖 涓€缃戞墦灏rleed6: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:piece lengthi2097152e6: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:鏈墖绠€浠嬶紝娴锋姤锛屾埅鍥剧瓑锛屽弻鍑昏繘鍏ユ煡鐪rle

      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:椋為笩濞变箰璁哄潧-瓒呭鏈€鏂扮垎鐖借祫婧愪笅杞tfe

      e

      d

        6:length

        i288e

        4:path

        l45:飞鸟娱乐原创IMDB TOP250 经典大片 一网打尽.urle

        10:path.utf-8

        l59:椋為笩濞变箰鍘熷垱IMDB TOP250 缁忓吀澶х墖 涓€缃戞墦灏rle

      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:piece length

    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的结束符

 

#来源:tsbirdman163

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2014年11月15日
下一篇 2014年11月16日

相关推荐