BEncode编码方式以及torrent文件的一些内容
字符串:
字符串被如此编码:<字符串长度>:字符串正文.这种表示法没有任何的分界符.
例子:如"8:announce"指"announce".
整数:
整数被如此编码:<i>整数值<e>.可以为负数,如'i-3e'
例子:'i3e' 指 3.
列表:
列表是如此被表示的:<l>Bencode Value<e>,
列表可以用来表示多个对象.
列表内容可以包括字符串,整数,字典,甚至列表本身.
例子:'l4:spam4:eggse' 指 [ "spam", eggs" ]
字典:
字典是一个一对一的映射.它表示了一个主键(必须为字符串)和一个数据项(可以为任何Bencode值)的关系.字典可以用来表示一个对象的多种属性.
字典是如此被编码:<d><bencoded string><bencoded element><e>
注意:字典必须根据主键预排序.
Metainfo
BitTorrent下载时,用户必须下载一个.torrent文件.它就是所谓"Metainfo file",里面存储有关于下载内容的announce地址,长度,大小,SHA1杂凑项等内容.它由Bencode编码组成.而且字符串是用UTF-8编码的.
不过在中国,常常使用GBK编码。它由如下几项组成:
- :描述下载内容的信息,是一个字典.有两种可能,一种是"单文件"模式:当BitTorrent只下载一个文件的时候使用.另一种是"多文件"模式,是在下载多个内容的时候使用.两种情况下Info各有不同.Info
- :整数,指文件的大小.length
- :(可选),字符串,含有32字节md5校验码.BitTorrent没有使用MD5而是使用了SHA1作为自已的签名算法.这是为其他P2P软件兼容而设置的可选内容.md5sum
- :字符串,这是下载文件的名字,纯粹是建议.name
- :整数,是BitTorrent文件块的大小.piece length
- :字符串,连续的存放着所有块的SHA1杂凑值,每一个文件块的杂凑值为20字节.pieces
- files: 一个由字典组成的列表,每个字典表示一个文件,字典的键值有如下内容:
- length:整数,指当前文件的大小.
- md5sum:(可选),字符串,同单文件模式,指当前文件.
- path:由字符串组成的列表,每个列表元素指一个路径名中的一个目录或文件名.比如说:"l3:abc3:abc:6abc.txte",指文件路径"abc/abc/abc.txt".
- :字符串,BitTorrent下载路径中最上层的目录名name
- :整数,是BitTorrent文件块的大小.piece length
- :字符串,连续的存放着所有块的SHA1杂凑值,每一个文件块的杂凑值为20字节.pieces
- :字符串,指向tracker的URL.announce
- :(可选),字典,这是一个对官方协议的扩展,支持"多Tracker".announce-list
- :(可选),整数,创建日期(UNIX创世纪格式:1970-1-1日00:00UTC到当时的秒数)creation date
- :(可选),字符串,注释comment
- :可选,字符串,创建此.torrent文件的BT下载端程序名和版本号created by
- :BitComet对Metafile的扩展,一般用来指出不使用utf-8而使用gbk.encoding
举一个例子,星球大战:
d8:announce34:http://tracker.ydy.com:86/announce10:createdby13:BitComet/0.5813:creationdatei1117953113e8:encoding3:GBK4:infod6:lengthi474499162e4:name51:05.262005.StarWars Episode IV A New Hope-Rv9.rmvb10:name.utf-851:05.26.2005.Star WasEpisode IV A New Hope-Rv9.rmvb12:piecelengthi262144e6:pieces36220:XXXXXXXXXXXXXXX(SHA1杂凑 值)
表示了如下信息:
Tracker地址 : http://tracker.ydy.com:86/announce
被BitComet/0.58创建
创建时间:1970-1-1 00:00秒后1117953113秒.即Sun Jun 5 14:31:53 2005.
encoding是BitComet的扩展,实际上用了UTF-8就不需要GBK.
- info: (这是单文件模式的代表)
- 大小:474499162(452Mb)
- 文件名:05.262005.Star Wars Episode IV A New Hope-Rv9.rmvb
- name.utf-8:也是BitComet的扩展,指出文件名编码不是GBK而是UTF-8.
- 文件块大小:262144字节(256KB)
- pieces:长度为366220的SHA1杂凑值内容,由于每一个文件块20字节SHA1杂凑值,可见文件块有36620 / 20 = 1831个
BEncode编码方式以及torrent文件的一些内容相关推荐
- python 文件编码的识别_【python】python编码方式,chardet编码识别库
环境: python3.6 需求: 针对于打开一个文件,可以读取到文本的编码方式,根据默认的文件编码方式来获取文件,就不会出现乱码. 针对这种需求,python中有这个方式可以很好的解决: 解决策略: ...
- vscode指定文件的编辑语言以及编码方式
背景 有些文件的扩展名在多种语言中都有使用,使用vscode打开时,可能会出现vscode选定的解释语言和自己想要的编辑语言不符合的问题.比如在vscode中,.m文件被默认解释为objective- ...
- C#读取Torrent文件中的可下载文件信息
Torrent文件采用BEncode编码方式(详细介绍见参考文献6),为了读取Torrent文件中的文件信息,需要解析Torrent文件并获取每个文件的详细路径和名称. 在GitHub中查找T ...
- java获取文件编码_java如何获取文件编码格式
1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK. 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理 ...
- Unicode 字符集与它的编码方式
正式内容开始之前,我们先来了解一个基本概念,编码字符集. 编码字符集:编码字符集是一个字符集,它为每一个字符分配一个唯一数字.Unicode 标准的核心是一个编码字符集,字母"A" ...
- 【从零开始制作 bt 下载器】一、了解 torrent 文件
[从零开始制作 bt 下载器]一.了解 torrent 文件 写作背景 读取 torrent 文件 认识 bencode 使用 Python 解析 torrent 文件 解密 torrent 文件 结 ...
- python中的编码方式
说明 这里我们以python2.7为例讲解python的编码方式 指定执行编码方式 python2.7的默认编码方式为ascii字符集,这里所说的编码方式指执行编码方式,在编程过程中,有三个地方都涉及 ...
- [C#]Bencode编码算法/torrent文件解析
最近工作上的事少了些,便想起了打入冷宫N久的博客,于是找了些小玩意做做,放到博客和github上头当是给有兴趣的朋友一起交流. 首先是想简单说下torrent文件的格式,torrent文件其实说白了就 ...
- BT源代码学习心得(三):种子文件的编码方式 -- 转贴自wolfenstein (NeverSayNever)
BT源代码学习心得(三):种子文件的编码方式 author: wolfenstein BT的作者使用了一种比较简单易懂的编码方式来对设计种子文件.这种编码方式能够很简单得对python中的各种数据类型 ...
最新文章
- SecureCRT图形界面(通过设置调用Xmanager - Passive程序)
- java基本数据类型_老杜带你学Java【第六课】
- Python---根据字符串导入包(importlib)
- 类型,对象,线程栈和托管堆在运行时的相互关系(一)。
- Python | 面试必问,线程与进程的区别,Python中如何创建多线程?
- 图像处理基本概念——卷积,滤波,平滑
- 计算机网络7种类型,OSPF中7种类型LSA
- 为什么wait和notify必须在同步方法或同步块中调用?
- LWUIT的绘图功能
- DelimiterBasedFrameDecoder 自定义分隔符解码器,解决 TCP 粘包
- Atiti. Php Laravel 5.1 环境搭建以及 error 排除
- JavaScript navigator对象
- echart 动画 饼图_巧用EChart画动态饼图
- 捣鼓openwrt不死bootloader (1)
- 怎样转换WPS格式,WPS怎么转换PPT格式
- 日期格式符RR和YY的区别
- “专精特新”背后的京东动力
- iOS 支付宝集成随手记
- linux命令kill9的含义,[整理]kill -9的含义
- 明解C语言入门篇_第13章_文件处理
热门文章
- Open vSwitch相关字段详解之L4:TCP, UDP, SCTP
- 卸载Win10+ubuntu14双系统中的ubuntu系统
- 计算机设计复合材料,两种复合材料几何建模算法-计算机辅助设计与图形学学报.PDF...
- leetcode算法题--二叉树的最近公共祖先
- leetcode算法题--搜索旋转排序数组
- go标准库的学习-fmt
- MySQL还原数据库提示Unknown MySql server host
- C++ 原码、反码、补码理解笔记
- 函数 —— fork()将运行着的程序分成2个(几乎)完全一样的进程
- hbase delete.deleteColumns问题