#解析bt文件_Torrent文件的解析与转换

更新时间:2023-06-24 12:39:40 阅读: 评论:0

#解析bt⽂件_Torrent⽂件的解析与转换
阅读⽬录
1. Torrent简介
2. Torrent结构
3. Torrent⽂件编码
4. Torrent⽂件解析
5. Torrent⽂件与Magnet
6. 具体实现
7. Reference
口头的英文回到顶部
Torrent简介
BitTorrent协议的种⼦⽂件(英语:Torrent file)可以保存⼀组⽂件的元数据。这种格式的⽂件被BitTorrent协议所定义。扩展名⼀般
为“.torrent”。
.torrent种⼦⽂件本质上是⽂本⽂件,包含Tracker信息和⽂件信息两部分。Tracker信息主要是BT下载中需要⽤到的Tracker服务器的地址和针对Tracker服务器的设置,⽂件信息是根据对⽬标⽂件的计算⽣成的,计算结果根据BitTorrent协议内的Bencode规则进⾏编码。它的主要原理是需要把提供下载的⽂件虚拟分成⼤⼩相等的块,块⼤⼩必须为2k的整数次⽅(由于是虚拟分块,硬盘上并不产⽣各个块⽂件),并把每个块的索引信息和Hash验证码写⼊种⼦⽂件中;所以,种⼦⽂件就是被下载⽂件的“索引”。
回到顶部
Torrent结构
Torrent⽂件内容都以Bencoding编码类型进⾏存储,整体上是⼀个字典结构,见下:
Torrent总体结构
键名称数据类型可选项键值含义announcestringrequiredTracker的Urlinfodictionaryrequired该条映射到⼀个字典,该字典的键将取决于共享的⼀个或多个⽂件announce-listarray[]optional备⽤Tracker的Url,以列表形式存在commentstringoptional备注created bystringoptional创建⼈或创建程序的信息
Torrent单⽂件Info结构
Torrent多⽂件Info结构
files字典结构:
Torrent实际结构预览
以JSON序列化整个字典后,单⽂件和多⽂件的结构⼤致如下,注意:JSON内容省略了pieces摘要⼤部分内容,仅展⽰了开头部分,另外由于本⼈序列化⼯具设置所致,所有的整型都会序列化成字符串类型。
单⽂件结构
多⽂件结构
乱扔垃圾的图片
{    "creation date": "1604347014",    "comment": "Torrent downloaded from YTS.MX",    "announce-list": [        [            "udp://ppersurfer.tk
回到顶部
Torrent⽂件编码
根据上⽂所说,Torrent⽂件均以Bencoding编码进⾏存储,故我们需要⼤致了解⼀下Bencoding编码。
Bencoding以四种基本类型数据构成:
奥特之母污图string : 字符串
intergers : 整数类型
lists:列表类型
dictionary:字典类型
字符串类型
字符串类型由以下结构表⽰:字符串长度:字符串原⽂,例如:42:udp://:6969/announce。
字体怎么换
整形类型
整形类型由以下结构表⽰:ie,例如i1234e,则表明的整形数据为1234。
列表类型
列表类型由以下结构表⽰:le,即列表以字母l开头,以字母e结束,中间的均为列表中的数据,中间的值可以为任意的四种类型之⼀。
字典类型
字典类型由以下结构表⽰:de,即字典由字母d开头,以字母e结束,中间的均为字典中的数据,中间的值可以为任意的四种类型之⼀。
实际组合解析
根据上述描述来看看实际的内容解析,我们以下⽅的数据为例:
d8:announce49:udp://tracker.leechers-paradi:6969/announce13:announce-listll49:udp://tracker.leechers-paradi:6969/announceel48:udp://trac
⼤家可以先尝试根据上⾯的内容对这⼀串内容进⾏解析,我将这⼀串数据拆分开来⽅便⼤家理解和查看,可以明显看出其由⼀个拥有两个键值的字典,其中⼀个键为announce,另⼀个键为announce-list,两者的值⼀个为udp://tracker.leechers-
paradi:6969/announce,⼀个为列表,列表内还嵌套了⼀层列表。
d  8:announc
e    49:udp://tracker.leechers-paradi:6969/announce  13:announce-list      l        l          49:udp://tracker.leechers-paradi:6969/an学生时代电影
回到顶部
Torrent⽂件解析
莨绸根据上⽂对Torrent⽂件编码的了解,那么我们使⽤代码对Torrent⽂件就很简单了。我们只需要读取种⼦字节流,判断具体是哪种类型并
进⾏相应转换即可。
即:读取⽂件字节,判断字节属于哪⼀种类型:0-9 : 字符串类型、i:整形数据、l:列表数据、d:字典数据
再根据每个数据具体类型获取该数据的内容,再读取下⼀个⽂件字节获取下⼀个数据类型即可,根据这个分析,伪代码如下:
获取字符串值
// 当读取到字节对应的内容为0-9时进⼊该⽅法String readString(byte[] info,int offt) {// 读取‘:’以前的数据,即字符串长度int length = readLength(info,offt);// 根据
获取整数类型
西班牙共和国这⾥有⼀个注意项,考虑到数据边界问题,例如java等语⾔,推荐使⽤Long类型,以防数据越界。
/
/ 当读取到的字节对应的内容为i时,进⼊该⽅法Long readInt(byte[] info,int offt) {// 读取第⼀个'e'之前的数据,包括'e'    string data = readInt(info,offt)    return L 获取列表类型
因为列表类型中可以夹杂所有四种类型中任意要给即需要⽤到上⾯两个⽅法。
// 当读取到的字节对应的内容为l时,进⼊该⽅法List readList(byte[] info,int offt){    List list = new List();    // 读取到第⼀个'e'为⽌    while(info[offt] != 'e'){        swt 读取字典类型
读取字典类型与列表⼗分相似,唯⼀不同的就是需要区分键值,字典的键值可能为字符串,故依此来判断。
// 当读取到的字节对应的内容为d时,进⼊该⽅法Dictionary readDictionary(byte[] info,int offt){    Dictionary dic = new Dictionary();    // key为null时,字符串为键,否
回到顶部
Torrent⽂件与Magnet
磁⼒链接与Torrent⽂件是可以相互转换的,此⽂只讨论根据Torrent⽂件如何转换为Magnet磁⼒链接。
Magnet概述
磁⼒链接由⼀组参数组成,参数间的顺序没有讲究,其格式与在HTTP链接末尾的查询字符串相同。最常见的参数是"xt",是"exact
topic"的缩写,通常是⼀个特定⽂件的内容散列函数值形成的URN,例如:
magnet:?xt=urn:bith:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C
注意,虽然这个链接指向⼀个特定⽂件,但是客户端应⽤程序仍然必须进⾏搜索来确定哪⾥,如果有,能够获取那个⽂件(即通过DHT进⾏
搜索,这样就实现了Magnet到Torrent的转换,本⽂不讨论)。
部分字段名见下⽅表格:
字段名含义magnet协议名xtexact topic的缩写,包含⽂件哈希值的统⼀资源名称。BTIH(BitTorrent Info Hash)表⽰哈希⽅法名,这⾥还
可以使⽤ED2K,AICH,SHA1和MD5等。这个值是⽂件的标识符,是不可缺少的。dndisplay name的缩写,表⽰向⽤户显⽰的⽂件
名。这⼀项是选填的。trtracker的缩写,表⽰tracker服务器的地址。这⼀项也是选填的。bithBitTorrent info hash,种⼦散列函数Torrent转换为Magnet
dn : 向⽤户显⽰的⽂件名
即为Torrent⽂件中,Info字典下的name键所对应的值
tr : tracker服务器地址
即为Torrent⽂件中,announce以及announce-list两个键所对应的值羊蝎子的做法大全
bitch : 种⼦散列值
即为Torrent⽂件中,info对应的字典的SHA1哈希值(Hex)
根据下图,为4:infod,以d的地址作为哈希原⽂的起始索引,则为Adress:00 01A3
到整个info结束,以e的地址作为哈希原⽂的终⽌索引地址,则为Adress:03 0BE7
根据上述可知:
magnet = 'magnet:?xt=urn:btih:'+Hex(Sha1(info))+'&dn='+encode(name)+'&tr='+encode(announce)

本文发布于:2023-06-24 12:39:40,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1052777.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:类型   字典   数据   内容   列表   字符串   字节
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图