BT种子结构及bencoding编码解析

本文介绍了BT种子文件的bencoding编码方式,包括字符串、整数、列表和字典四种数据类型,并详细展示了种子文件中的关键字如announce、creation date等,以及多文件结构的例子。通过解析种子文件,揭示了其内部的数据结构和编码规则。

一、数据类型

bencode有4种数据类型:string, integer, list 和 dictionary。

strings(字符串)

编码为:<字符串长度>:<字符串>
例如: 4:test 表示为字符串"test"
4:例子 表示为字符串“例子”
字符串长度单位为字节
没开始或结束标记

integers(整数)

编码为:i<整数>e
开始标记i,结束标记为e
例如: i1234e 表示为整数1234
i-1234e 表示为整数-1234
整数没有大小限制
i0e 表示为整数0
i-0e 为非法
以0开头的为非法如: i01234e 为非法

lists(列表)

编码为:l<bencoding编码类型>e
开始标记为l,结束标记为e
列表里可以包含任何bencoding编码类型,包括整数,字符串,列表,字典。
例如: l4:test5abcdee 表示为二个字符串["test","abcde"]

dictionaries(字典)

编码为d<bencoding字符串><bencoding编码类型>e
开始标记为d,结束标记为e
关键字必须为bencoding字符串
值可以为任何bencoding编码类型
例如: d3:agei20ee 表示为{"age"=20}
d4:path3:C:/8:filename8:test.txte 表示为{"path"="C:/","filename"="test.txt"}

 

二、关键字

全部内容必须都为bencoding编码类型。

整个文件为一个字典结构,包含如下关键字
announce:tracker服务器的URL(字符串)
announce-list(可选):备用tracker服务器列表(列表)
creation date(可选):种子创建的时间,Unix标准时间格式,从1970 1月1日 00:00:00到创建时间的秒数(整数)
comment(可选):备注(字符串)
created by(可选):创建人或创建程序的信息(字符串)
info:一个字典结构,包含文件的主要信息,为分二种情况:单文件结构或多文件结构
单文件结构如下:
          length:文件长度,单位字节(整数)
          md5sum(可选):长32个字符的文件的MD5校验和,BT不使用这个值,只是为了兼容一些程序所保留!(字符串)
          name:文件名(字符串)
          piece length:每个块的大小,单位字节(整数)
          pieces:每个块的20个字节的SHA1 Hash的值(二进制格式)
多文件结构如下:
          files:一个字典结构
                 length:文件长度,单位字节(整数)
                 md5sum(可选):同单文件结构中相同
                 path:文件的路径和名字,是一个列表结构,如/test/test.txt 列表为l4:test8test.txte
          name:最上层的目录名字(字符串)
          piece length:同单文件结构中相同
          pieces:同单文件结构中相同

三、例子

下面以一个海贼王的种子为例,用文本编辑器打开种子文件之后,如图

 整理格式之后,更便于观察数据结构,如下:(彩色字体为标志字段,加粗字体为关键字段)

d
8:announce35:http://torrentsmd.com:8080/announce
13:announce-list
    l
        l35:http://torrentsmd.com:8080/announcee
        l34:http://torrentsmd.me:8080/announcee
        l44:udp://tracker2.christianbro.pw:6969/announcee
        l34:udp://allesanddro.de:1337/announcee
        l48:udp://tracker.internetwarriors.net:1337/announcee
        l32:udp://peerfect.org:6969/announcee
        l34:http://torrentsmd.eu:8080/announcee
        l44:udp://ulfbrueggemann.no-ip.org:6969/announcee
        l42:udp://tracker.swateam.org.uk:2710/announcee
        l42:udp://tracker.cypherpunks.ru:6969/announcee
        l44:http://tracker.devil-torrents.pl:80/announcee
        l38:udp://tracker.cyberia.is:6969/announcee
        l39:http://retracker.bashtel.ru:80/announcee
        l44:https://open.kickasstracker.com:443/announcee
        l30:http://grifon.info:80/announcee
        l42:udp://tracker.opentrackr.org:1337/announcee
        l49:udp://tracker.leechers-paradise.org:6969/announcee
        l40:udp://tracker.tiny-vps.com:6969/announcee
        l43:udp://tracker.coppersurfer.tk:6969/announcee
        l41:udp://tracker.halfchub.club:6969/announcee
        l45:http://tracker.electro-torrent.pl:80/announcee
        l39:udp://tracker.justseed.it:1337/announcee
        l39:http://retracker.telecom.by:80/announcee
        l39:http://tracker.city9x.com:2710/announcee
        l34:udp://tracker.acg.gg:2710/announcee
        l44:http://retracker.spark-rostov.ru:80/announcee
        l37:udp://zephir.monocul.us:6969/announcee
        l41:udp://tracker.vanitycore.co:6969/announcee
        l38:udp://bt.xxx-tracker.com:2710/announcee
        l28:http://pt.lax.mx:80/announcee
        l48:udp://tracker.tvunderground.org.ru:3218/announcee
        l32:udp://thetracker.org:80/announcee
        l29:http://asnet.pw:2710/announcee
        l36:udp://tracker.doko.moe:6969/announcee
        l36:http://retracker.mgts.by:80/announcee
        l36:http://t.nyaatracker.com:80/announcee
        l41:udp://tracker.torrent.eu.org:451/announcee
        l35:http://share.camoe.cn:8080/announcee
        l38:http://retracker.omsk.ru:2710/announcee
        l39:http://agusiq-torrents.pl:6969/announcee
        l26:http://fxtt.ru:80/announcee
        l43:http://tracker.filetracker.pl:8089/announcee
        l40:http://tracker.grepler.com:6969/announcee
        l41:http://tracker.torrentyorg.pl:80/announcee
        l44:http://tracker1.wasabii.com.tw:6969/announcee
        l44:http://tracker2.wasabii.com.tw:6969/announcee
        l53:https://opentracker-milanesi.rhcloud.com:443/announcee
        l39:udp://inferno.demonoid.pw:3418/announcee
        l33:udp://open.stealth.si:80/announcee
        l36:udp://tracker.files.fm:6969/announcee
        l39:udp://tracker.grepler.com:6969/announcee
        l40:http://ipv4.tracker.harry.lu:80/announcee
        l42:http://tracker.vanitycore.co:6969/announcee
        l33:udp://mgtracker.org:6969/announcee
        l36:udp://tracker.mg64.net:6969/announcee
        l37:http://tracker.mg64.net:6881/announcee
        l34:http://mgtracker.org:6969/announcee
        l38:udp://tracker.zer0day.to:1337/announcee
        l46:udp://public.popcorn-tracker.org:6969/announcee
        l33:udp://www.eddie4.nl:6969/announcee
        l42:udp://tracker.pirateparty.gr:6969/announcee
        l40:udp://tracker.leechers-paradise.org:6969e
        l34:udp://tracker.coppersurfer.tk:6969e
        l40:udp://inferno.demonoid.ooo:3389/announcee
        l32:udp://62.138.0.158:6969/announcee
        l39:http://tracker3.itzmx.com:6961/announcee
        l41:http://tracker.kamigami.org:2710/announcee
        l37:http://tracker.dler.org:6969/announcee
        l33:http://t.nyaatracker.com/announcee
        l30:http://t.acg.rip:6699/announcee
        l39:http://ipv4.tracker.harry.lu:80/annoucee
        l37:http://ipv4.tracker.harry.lu/announcee
        l35:http://87.248.186.252:8080/announcee
        l33:http://retracker.mgts.by/announcee
        l38:http://tracker.xfsub.com:6868/announcee
        l39:http://tracker1.itzmx.com:8080/announcee
        l40:udp://inferno.demonoid.com:3418/announcee
        l31:udp://9.rarbg.com:2710/announcee
        l43:http://tracker.opentrackr.org:1337/announcee
        l43:udp://tracker1.wasabii.com.tw:6969/announcee
        l34:http://91.218.230.81:6969/announcee
        l39:udp://open.facedatabg.net:6969/announcee
        l39:udp://ipv4.tracker.harry.lu:80/announcee
        l33:udp://trackerxyz.tk:1337/announcee
        l43:udp://tracker2.wasabii.com.tw:6969/announcee
        l34:udp://tracker.xku.tv:6969/announcee
        l45:udp://tracker.edoardocolombo.eu:6969/announcee
        l35:udp://tracker.desu.sh:6969/announcee
        l43:udp://tracker.christianbro.pw:6969/announcee
        l39:udp://tracker.bluefrog.pw:2710/announcee
        l34:udp://tr.cili001.com:6666/announcee
        l32:udp://explodie.org:6969/announcee
        l33:udp://z.crazyhd.com:2710/announcee
        l35:udp://tracker1.xku.tv:6969/announcee
        l37:udp://tracker.skyts.net:6969/announcee
        l36:udp://tracker.safe.moe:6969/announcee
        l44:udp://tracker.piratepublic.com:1337/announcee
        l36:udp://tracker.kuroy.me:5944/announcee
        l40:udp://tracker.kamigami.org:2710/announcee
        l42:udp://tracker.filetracker.pl:8089/announcee
        l36:udp://tracker.dler.org:6969/announcee
        l37:udp://sandrotracker.biz:1337/announcee
        l42:udp://retracker.lanta-net.ru:2710/announcee
        l35:udp://p4p.arenabg.com:1337/announcee
        l39:udp://oscar.reyesleon.xyz:6969/announcee
        l32:udp://86.19.29.160:6969/announcee
        l33:udp://208.67.16.113:8000/announcee
        l39:https://tracker.bittor.xyz:443/announcee
        l37:http://tracker.kuroy.me:5944/announcee
        l38:http://sandrotracker.biz:1337/announcee
        l40:http://open.acgtracker.com:1096/announcee
        l51:udp://packages.crunchbangplusplus.org:6969/announcee
        l47:http://tracker.videodrugproject.com:80/announcee
        l35:http://tracker.tfile.me:80/announcee
        l33:http://explodie.org:6969/announcee
        l33:udp://santost12.xyz:6969/announcee
        l30:udp://wambo.club:1337/announcee
        l36:udp://retracker.nts.su:2710/announcee
        l45:udp://tracker.dutchtracking.com:6969/announcee
        l38:udp://tc.animereactor.ru:8082/announcee
    e
10:created by13:uTorrent/2210
13:creation datei1577851741e
8:encoding5:UTF-8
4:info
    d
        6:lengthi2073586611e
        4:name91:航海王:狂热行动.ONE.PIECE.STAMPEDE.2019.HD1080P.X264.AAC.Japanese&Mandarin.CHS.mkv
        12:piece lengthi2097152e
        6:pieces19780:@¥焱ۋ?ǁb)P¨.t8~\¿Г....(此处省略)....
    e
e

 

其中 d  e  和  d  e 之间为字典(dictionaries)类型,l  e 之间为列表(lists)类型,i  e 之间为整数(integers)类型。

这样就很容易看出,整个文件是一个字典,关键字如下:

announce=http://torrentsmd.com:8080/announce

announce-list=http://torrentsmd.com:8080/announce,

                        http://torrentsmd.me:8080/announce,

                        .....,

                        udp://tc.animereactor.ru:8082/announce

created by=uTorrent/2210

creation date=1577851741

encoding=UTF-8

info=

        length=2073586611

        name=航海王:狂热行动.ONE.PIECE.STAMPEDE.2019.HD1080P.X264.AAC.Japanese&Mandarin.CHS.mkv

        piece length=2097152

        pieces=@¥焱ۋ?ǁb)P¨.t8~\¿Г....(此处省略)....

 

参考

BT种子文件 bencoding编码详细解析

https://blog.csdn.net/thanklife/article/details/54910294

公共 BitTorrent Tracker

https://hao.su/3278/

torrent在线解析工具

https://tool.lu/torrent/

BT原理分析(转)

https://www.cnblogs.com/EasonJim/p/6601146.html

BT服务器的搭建(tracker-P2P服务器架设)(转)

https://www.cnblogs.com/EasonJim/p/6601330.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值