Torrent小记

由于某些众所周知的原因,我对torrent文件(也就是我们常说的种子文件)产生了浓厚的兴趣,这里是官方百科对torrent文件的定义:

torrent文件本质上是文本文件,包含Tracker信息和文件信息两部分。Tracker信息主要是BT下载中需要用到的Tracker服务器的地址和针对Tracker服务器的设置,文件信息是根据对目标文件的计算生成的,计算结果根据BitTorrent协议内的B编码规则进行编码。所以,torrent文件就是被下载文件的“索引”。

既然是文本文件,使用文本编辑器,意料之中的失败,打开之后是大片大片的乱码,当然主要是中文乱码… 数字以及字母信息还是显示的相当完整的。也许当我打开一个纯英文Tracker信息的torrent文件时,就可以很清楚的了解其中的内容了。现在先来看一下torrent文件的编码格式.

bencoding编码

BT种子文件使用了一种叫bencoding的编码方法来保存数据。

bencoding现有四种类型的数据:srings(字符串),integers(整数),lists(列表),dictionaries(字典)

编码规则如下:

  • 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"}

Torrent文件基本结构

种子具体文件结构如下:

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

如果字典用{}表示,列表用[]表示,字符用”“表示,目录类型的BT文件大致是这样的

{
"announce"="http://btfans.3322.org:8000/announce"   ;tracker 服务器的URL(字符串)
"announce-list"=["http://..","http://.."]           ;备用tracker服务器列表(列表)
"creation date"=1175204110                          ;种子创建的时间,Unix标准时间格式
"encoding"="GBK"                                    ;编码
"comment"="备注"
"created by"="创建人信息"{"info"={"files"=[{"filehash"="SHA1 Hash","length"=168099584,"path"=["01.rmvb"]},{...},{...}                ]"name"="保存目录名""piece length"=2097152    ;每个块的大小,单位字节(整数)"pieces"="每个块的SHA1 Hash的值的顺序排列(二进制格式,长度为"20 X 块数")"}}}

其中,filehash为20个字节的二进制的SHA1 Hash

需要下载文件的主要信息保存在'info'值中,可以逐字解码。

转载于:https://www.cnblogs.com/peihao/p/5290078.html

torrent文件编码相关推荐

  1. Torrent文件的解析与转换

    阅读目录 Torrent简介 Torrent结构 Torrent文件编码 Torrent文件解析 Torrent文件与Magnet 具体实现 Reference 回到顶部 Torrent简介 BitT ...

  2. BEncode编码方式以及torrent文件的一些内容

    字符串: 字符串被如此编码:<字符串长度>:字符串正文.这种表示法没有任何的分界符. 例子:如"8:announce"指"announce". 整数 ...

  3. [C#]Bencode编码算法/torrent文件解析

    最近工作上的事少了些,便想起了打入冷宫N久的博客,于是找了些小玩意做做,放到博客和github上头当是给有兴趣的朋友一起交流. 首先是想简单说下torrent文件的格式,torrent文件其实说白了就 ...

  4. BT种子的技术原理是什么?就是.torrent文件该如何理解?

    看到很多咨询BT种子原理的问题,在这里整理些资料,希望对需要的朋友有帮助. 可以分两个层面来分析一下: 1.torrent文件的原理:如果这个问题是指torrent文件本身,那么,当你对一个文件(或者 ...

  5. torrent文件解析器

    第二步工作是解析torrent文件,有了bencoding编码解析器 解析torrent文件当然是易如反掌的任务了. 实现的封装类CTorrentParser,完成的主要任务有: 1.判断torren ...

  6. C#读取Torrent文件中的可下载文件信息

      Torrent文件采用BEncode编码方式(详细介绍见参考文献6),为了读取Torrent文件中的文件信息,需要解析Torrent文件并获取每个文件的详细路径和名称.   在GitHub中查找T ...

  7. torrent文件打开成php,.torrent格式用什么打开

    .torrent格式用迅雷打开,.torrent种子文件本质上是文本文件,包含Tracker信息和文件信息两部分,Tracker信息主要是BT下载中需要用到的Tracker服务器的地址和针对Track ...

  8. Python3 解析 torrent 文件

    (可直接转到文末下载) 起因: 找资源的时候,在某些网站下载到torrent文件.虽说挺常见的,但是这玩意只能用第三方软件打开,总觉得不爽.另外也是单纯出于好奇心,想看看这玩意长什么样子,一探究竟. ...

  9. BitTorrent协议规范之torrent文件

    BitTorrent下载每个资源需要一个元数据信息(meta info)文件,该文件描述资源的相关信息,其后缀名通常为.torrent,所以也叫torrent文件.   torrent文件中内容采用B ...

最新文章

  1. 57张图,13个实验,干死 MySQL 锁!
  2. 你知道面试必问的AOP吗(1),2021吊打面试官系列
  3. linux ulimit 永久生效设置方法
  4. Spring之HibernateTemplate 和HibernateDaoSupport
  5. 那年学过的Java笔记二SE面向对象
  6. [leetcode]139. 单词拆分
  7. 程序员、技术主管和架构师
  8. php mysql begin_PHP mysqli_begin_transaction() 函数用法及示例
  9. Redis在win7下安装步骤
  10. php空间自动发邮件,PHP 发送QQ邮件【实例】
  11. 研究音频编解码要看什么书
  12. The road to learning English-Words
  13. vs项目中的引用是什么意思
  14. Not in a hypervisor partition (HVP=0) (VERR_NEM_NOT_AVAILABLE). AMD-V is dis
  15. 整了半天终于把五笔整出来了
  16. 模拟手机通讯录联系人功能
  17. 华为音频编辑服务,实时分离人声、伴奏和乐器声
  18. 补环境:vm2 transformer.js 源码分析
  19. 【C语言】通讯录(文件版)
  20. Android动态删减ListView,类似学习经历增删,钉钉物品领用

热门文章

  1. 百年前的京城,AI带你去穿越
  2. c语言编译 aiocompiler,RK3399快速熟悉(基于AIO-3399C开发板)
  3. 搬家了:http://shallwe2000.cc
  4. java excel 导入 关闭,excel关联别的表格数据库-java实现excel表导入,有的字段数据库中没有,需要关......
  5. 计算机网络7层模型介绍
  6. Bike Sharing 案例
  7. 深度学习经典和最新模型
  8. 箩筐技术公司宣布新一届董事会成员以及高管任命
  9. 只有部署 SSL 证书才能保护网上隐私信息安全
  10. 【广告“禁用词”】 实施细则