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

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

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

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

顶层字段

字段(含空格)类型必要含义infoDictionary是包含文件信息的字典,详细结构见下文announceString否tracker 的 URLannounce-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是文件长度,单位 bytemd5sumString否MD5 校验和 (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是文件长度,单位 bytemd5sumString否MD5 校验和 (32个十六进制字符),bittorrent 中实际完全用不到该值pathList是字符串列表,表示文件路径,路径中的文件夹和文件名会按顺序拆分成列表中的元素,如: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

相关文章

不可能的意思
英国365bet网址

不可能的意思

📅 08-01 🔍 4259
怅字的成语
英国365bet网址

怅字的成语

📅 07-14 🔍 7045
火影忍者究极风暴4为什么进不去
速发365app下载

火影忍者究极风暴4为什么进不去

📅 08-08 🔍 4869