图片来源:https://www.pixiv.net/artworks/113139569
整个 .torrent 文件实际上就是一个包含了约定字段的 bencode 编码字典, bencode 编码规则见 https://blog.geekgo.tech/programming/bencode/
顶层字段
字段(含空格) | 类型 | 必要 | 含义 |
info | Dictionary | 是 | 包含文件信息的字典,详细结构见下文 |
announce | String | 否 | tracker 的 URL |
announce-list | List | 否 | 额外 tracker,列表的每个元素都是一个字符串列表,每个字符串都是一个 tracker 的 URL (另外官方文档里对这些 tracker 的处理顺序有一些要求,详情见 这里) |
creation date | Integer | 否 | 种子创建时间(Unix 时间戳) |
comment | String | 否 | 没有格式要求的文本备注 |
created by | String | 否 | 创建种子的程序名称和版本(实际也可以填任意其他内容) |
encoding | String | 否 | 未在官方文档中找到定义,似乎是字符串编码,值多为 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 ” |
httpseeds | List | 否 | 每个元素是一个 URL,通过在 URL 后添加参数可以直接从这些网站下载需要的 torrent 数据,详见 这里 |
info 字典结构
info 的结构分为单文件和多文件两种情况
单文件
字段(含空格) | 类型 | 必要 | 含义 |
name | String | 是 | 文件名 |
length | Integer | 是 | 文件长度,单位 byte |
md5sum | String | 否 | MD5 校验和 (32个十六进制字符),bittorrent 中实际完全用不到该值 |
piece length | Integer | 是 | 每个分片的长度,单位字节 |
pieces | String | 是 | 每 20 字节是对应分片的 SHA1 值(二进制字节串,非十六进制字符) |
private | Integer | 否 | 当存在 private 字段且设置为 1 时,bittorrent 客户端仅向种子文件中声明的 tracker 声明自己的存在,并且仅与该 tracker 返回的其他客户端连接(一些 Private Tracker,即 PT 站会用到该字段 ) |
多文件
字段(含空格) | 类型 | 必要 | 含义 |
name | String | 是 | 顶层文件夹名 |
files | List | 是 | 每个元素都是一个字典,对应一个文件,字典包含文件长度、路径和 MD5 校验和,详见下文 |
piece length | Integer | 是 | 同单文件 |
pieces | String | 是 | 同单文件 |
private | Integer | 否 | 同单文件 |
files 列表中每个字典的结构
字段 | 类型 | 必要 | 含义 |
length | Integer | 是 | 文件长度,单位 byte |
md5sum | String | 否 | MD5 校验和 (32个十六进制字符),bittorrent 中实际完全用不到该值 |
path | List | 是 | 字符串列表,表示文件路径,路径中的文件夹和文件名会按顺序拆分成列表中的元素,如:dir1/dir2/file.ext ,会被编码为 l4:dir14:dir28:file.exte |
参考:
- https://wiki.theory.org/BitTorrentSpecification#Metainfo_File_Structure
- Private Torrents
- Multitracker Metadata Extension
- HTTP Seeding
- The BitTorrent Protocol Specification
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
一条评论 “种子文件结构(.torrent 文件, BitTorrent V1)”