种子文件结构(.torrent 文件, BitTorrent V1)

图片来源:https://www.pixiv.net/artworks/113139569

整个 .torrent 文件实际上就是一个包含了约定字段的 bencode 编码字典, bencode 编码规则见 https://blog.geekgo.tech/programming/bencode/

顶层字段

字段(含空格)类型必要含义
infoDictionary包含文件信息的字典,详细结构见下文
announceStringtracker 的 URL
announce-listList额外 tracker,列表的每个元素都是一个字符串列表,每个字符串都是一个 tracker 的 URL (另外官方文档里对这些 tracker 的处理顺序有一些要求,详情见 这里
creation dateInteger种子创建时间(Unix 时间戳)
commentString没有格式要求的文本备注
created byString创建种子的程序名称和版本(实际也可以填任意其他内容)
encodingString未在官方文档中找到定义,似乎是字符串编码,值多为 UTF-8,但 The BitTorrent Protocol Specification 已经明确了 “All strings in a .torrent file that contains text must be UTF-8 encoded.”这里 的解释是 “the string encoding format used to generate the pieces part of the info dictionary in the .torrent metafile ”
httpseedsList每个元素是一个 URL,通过在 URL 后添加参数可以直接从这些网站下载需要的 torrent 数据,详见 这里

info 字典结构

info 的结构分为单文件多文件两种情况

单文件

字段(含空格)类型必要含义
nameString文件名
lengthInteger文件长度,单位 byte
md5sumStringMD5 校验和 (32个十六进制字符),bittorrent 中实际完全用不到该值
piece lengthInteger每个分片的长度,单位字节
piecesString 每 20 字节是对应分片的 SHA1 值(二进制字节串,非十六进制字符)
privateInteger当存在 private 字段且设置为 1 时,bittorrent 客户端仅向种子文件中声明的 tracker 声明自己的存在,并且仅与该 tracker 返回的其他客户端连接(一些 Private Tracker,即 PT 站会用到该字段 )
info 单文件结构

多文件

字段(含空格)类型必要含义
nameString顶层文件夹名
filesList每个元素都是一个字典,对应一个文件,字典包含文件长度、路径和 MD5 校验和,详见下文
piece lengthInteger同单文件
piecesString同单文件
privateInteger同单文件
info 多文件结构
files 列表中每个字典的结构
字段类型必要含义
lengthInteger文件长度,单位 byte
md5sumStringMD5 校验和 (32个十六进制字符),bittorrent 中实际完全用不到该值
pathList字符串列表,表示文件路径,路径中的文件夹和文件名会按顺序拆分成列表中的元素,如:dir1/dir2/file.ext,会被编码为 l4:dir14:dir28:file.exte

参考:

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

一条评论 “种子文件结构(.torrent 文件, BitTorrent V1)”