最新消息:

python实现bt种子转磁链接之——bt种子解析即协议分析(一)

Python 大步 3851浏览 0评论

即将毕业,在寝室闲着没事做,打算用python写个小程序,实现bt种子(torrent file)转磁链接(Magnet )的功能,毕竟种子占地方,而且不好存放不是吗?转换成磁链接后,可以 放到任何文本文档下,复制传播方便,哥邪恶了!

百度里面基本上是没有什么太有用的信息,所以直接去谷歌比较靠谱。实现的python代码很简单,简单到不要6行就可以实现bt种子转磁链接的功能。我特此来记录下过程(嘿嘿,其实就是作为伪原创的,特意把东西写详细写长,其中有说的不对,别拿砖拍我)第一步当然是到网上查找搜集相关的资料了。网上有很多种子转磁链接的在线网站和小工具,可以提供给我们一些参考。如:

所谓知己知彼,百战不殆。下面我就从收集的资料中,首先分析下bt种子及协议,这里主要是引用自:BT 协议库libtorrent 的种子文件解析方法探究》吴海的论文。因为写的比较形象。

#############################开始了##############

p2p(peer-to-peer,P2P)。P2P 模式的特征是:服务和资源分布化,资源不集中存储在某些设备上,而是分散存储在运行P2P 程序的设备上,每一个对等方都可以为其他对等方提供服务。

P2P 应用方式分为3 类:集中式目录、分布式查询和结合这两者的混合方式。集中式是的是第一代的p2p,要用到大型的服务器,所以容易被端掉,而且一旦出故障,就甭想下片了。分布式的就是将目录服务分摊给那些在bt下载的用户,bt下载的用户既是下载的受益者,又是bt下载的服务提供者。系统采用洪泛查询(query flooding)算法使用户获得文件信息,收到该报文的主机向它们的所有邻居转发该报文,这些邻居又依次向它们的所有邻居转发该报文等。第三种就是第一、二中的结合了。其中一种实现方法是将覆盖网络中的对等方划分为若干小组,每个小组选取一个具有高带宽连接和高因特网连接性的成员作为组长,组长负责管理组内成员及与其他组长通信。在小组内使用集中式目录服务,服务器就是该组的组长。各组长之间使用分布式的目录服务。混合方式目前在P2P 应用中使用最为广泛,其代表是BitTorrent(以下简称BT)。

BT 网络由如下几部分组成:.torrent 文件、种子提供站点、目录服务器和内容发布者/下载者。

BT 网络由如下几部分组成:.torrent 文件、种子提供站点、目录服务器和内容发布者/
下载者。
(1).torrent 文件是一个文本文件,包含了tracker 信息和文件信息两部分。tracker 信
息主要是指BT 下载中需要用到的tracker 服务器的地址和针对tracker 服务器的设置;文件信息是指将目标文件计算处理后再根据BT 协议的B 编码规则编码后得到的信息。BT 的主要原理是把提供下载的文件虚拟分成大小相等的块,块大小必须为2Kbyte 的整数次方,并把每个块的索引信息和Hash 验证码写入.torrent 文件中,所以.torrent 文件就是被下载文件的“索引”。
(2)种子提供站点也就是.torrent 文件的提供站点,为下载者提供.torrent 文件下载服务。
(3)目录服务器记录被下载的文件的索引信息及下载该文件的用户的信息(主要是IP
地址及端口号)。
(4)早期的BT 协议只支持tracker 服务器,这种目录服务器是集中式目录与分布式查
询的混合型;在BT 协议的升级版本中,增加了对DHT(分布式Hash 表)网络的支持,该网络中目录服务器是分布式的。内容发布者/下载者是BT 网络的主体,最终的下载由它们完成。构成BT 网络的这几部分的相互关系如图1 所示。6I$J6A52UZ7YPRWNA1_J7@2

 

BT 协议工作过程

BT 协议主要包括3 个部分:.torrent 文件的格式、tracker HTTP/HTTPS 协议和Peer wire协议(使用TCP)。其中tracker HTTP/HTTPS 协议是BT 客户机与tracker 服务器之间的通信协议,Peer wire 协议是BT 客户机之间的通信协议。

(1)资源发布者制作.torrent 文件并上载到种子发布站点,将客户机连入BT 网络并在
tracker 服务器上发布信息。默认情况下,BT 的监听端口为6881-6889,也可由使用者指定;tracker 服务器的监听端口主要有8080、8000、6969 和2710,它们采取的连接方式都是TCP。
(2)BT 客户机(下载者)获取.torrent 文件,并向.torrent 文件中提供的tracker 服务器依次发起连接请求,直至与其中之一建立TCP 连接并获取对等方列表。
(3)BT 客户机随机地向列表中的对等方发起连接请求,因为对等方列表中对等方个
数比较多,所以在短时间内发出大量TCP 连接请求分组。这些分组的源地址相同,源端口号相邻,目的地址/端口号不同,并且有相当一部分的目的端口号为6881-6889。
(4)如果连接建立成功,BT 对等方之间进行握手,握手过程中使用特征字符串
“BitTorrent protocol”。然后使用interested、not interested、choke 和unchoke 等4 种分组互通对资源的意愿情况,之后通过Request Piece 和Piece 分组传输资源。
(5)资源传输完毕,关闭TCP 连接。

接下来第二篇:: python实现bt种子转磁链接之——bt种子解析即协议分析(二)

论文就是TMD的长,分成两篇来复制吧!!嘿嘿

python  种子 转 磁链接  解析 协议 分析

转载请注明:大步's Blog » python实现bt种子转磁链接之——bt种子解析即协议分析(一)

SiteMap