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个

posted @ 2011-07-21 14:37 Leo Chin 阅读(...) 评论(...) 编辑 收藏