字符串:

字符串被如此编码:<字符串长度>:字符串正文.这种表示法没有任何的分界符.
例子:如"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文件的一些内容相关推荐

  1. python 文件编码的识别_【python】python编码方式,chardet编码识别库

    环境: python3.6 需求: 针对于打开一个文件,可以读取到文本的编码方式,根据默认的文件编码方式来获取文件,就不会出现乱码. 针对这种需求,python中有这个方式可以很好的解决: 解决策略: ...

  2. vscode指定文件的编辑语言以及编码方式

    背景 有些文件的扩展名在多种语言中都有使用,使用vscode打开时,可能会出现vscode选定的解释语言和自己想要的编辑语言不符合的问题.比如在vscode中,.m文件被默认解释为objective- ...

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

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

  4. java获取文件编码_java如何获取文件编码格式

    1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK. 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理 ...

  5. Unicode 字符集与它的编码方式

    正式内容开始之前,我们先来了解一个基本概念,编码字符集. 编码字符集:编码字符集是一个字符集,它为每一个字符分配一个唯一数字.Unicode 标准的核心是一个编码字符集,字母"A" ...

  6. 【从零开始制作 bt 下载器】一、了解 torrent 文件

    [从零开始制作 bt 下载器]一.了解 torrent 文件 写作背景 读取 torrent 文件 认识 bencode 使用 Python 解析 torrent 文件 解密 torrent 文件 结 ...

  7. python中的编码方式

    说明 这里我们以python2.7为例讲解python的编码方式 指定执行编码方式 python2.7的默认编码方式为ascii字符集,这里所说的编码方式指执行编码方式,在编程过程中,有三个地方都涉及 ...

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

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

  9. BT源代码学习心得(三):种子文件的编码方式 -- 转贴自wolfenstein (NeverSayNever)

    BT源代码学习心得(三):种子文件的编码方式 author: wolfenstein BT的作者使用了一种比较简单易懂的编码方式来对设计种子文件.这种编码方式能够很简单得对python中的各种数据类型 ...

最新文章

  1. SecureCRT图形界面(通过设置调用Xmanager - Passive程序)
  2. java基本数据类型_老杜带你学Java【第六课】
  3. Python---根据字符串导入包(importlib)
  4. 类型,对象,线程栈和托管堆在运行时的相互关系(一)。
  5. Python | 面试必问,线程与进程的区别,Python中如何创建多线程?
  6. 图像处理基本概念——卷积,滤波,平滑
  7. 计算机网络7种类型,OSPF中7种类型LSA
  8. 为什么wait和notify必须在同步方法或同步块中调用?
  9. LWUIT的绘图功能
  10. DelimiterBasedFrameDecoder 自定义分隔符解码器,解决 TCP 粘包
  11. Atiti. Php Laravel 5.1 环境搭建以及  error 排除
  12. JavaScript navigator对象
  13. echart 动画 饼图_巧用EChart画动态饼图
  14. 捣鼓openwrt不死bootloader (1)
  15. 怎样转换WPS格式,WPS怎么转换PPT格式
  16. 日期格式符RR和YY的区别
  17. “专精特新”背后的京东动力
  18. iOS 支付宝集成随手记
  19. linux命令kill9的含义,[整理]kill -9的含义
  20. 明解C语言入门篇_第13章_文件处理

热门文章

  1. Open vSwitch相关字段详解之L4:TCP, UDP, SCTP
  2. 卸载Win10+ubuntu14双系统中的ubuntu系统
  3. 计算机设计复合材料,两种复合材料几何建模算法-计算机辅助设计与图形学学报.PDF...
  4. leetcode算法题--二叉树的最近公共祖先
  5. leetcode算法题--搜索旋转排序数组
  6. go标准库的学习-fmt
  7. MySQL还原数据库提示Unknown MySql server host
  8. C++ 原码、反码、补码理解笔记
  9. 函数 —— fork()将运行着的程序分成2个(几乎)完全一样的进程
  10. hbase delete.deleteColumns问题