Python北林计协bittorrent

BT下载与用python轻松自建种子搜索引擎

2017-08-02  本文已影响4268人  treelake

种子站点的集中特性使得它们很容易被关闭(提供音乐、电影等版权内容的种子文件的网站经常会因法律原因而被关闭,如海盗湾等的关停或者被墙,较近的如17年5月17日Extra Torrent关停)。
而来自土耳其·伊斯坦布尔的19岁程序员Bora想要解决这个问题,致力于真正的去中心化文件分享,他用python制作了一个开源软件,使得可以轻松地在自己的电脑上开启一个种子搜索引擎。(进一步,用pyinstaller打包成exe,前端用electron或者其它工具简单封装一下,完全不熟悉python 的普通用户也可以轻松使用)。
实际上再进一步,如果每个人将自己搜索到的种子数据在开放无审查的零网上进行分享互换(这也可以用python自动化),就可以实现完全无审查去中心化的文件分享机制。(零网参见开放的零网与个人站点尝试

使用效果图


快速安装

种子与磁力链接

基本概念 - Tracker:收集下载者信息的服务器,并将此信息提供给其他下载者,使下载者们相互连接起来,传输数据。

补充1:在前面我们看到的种子文件中,announce键记录了tracker服务器的地址信息,在BEP-5的Torrent File Extensions小节中提到无tracker的种子文件中没有announce键,而有nodes键记录了良好的节点地址。总之,在一个新节点(自身路由表为空)加入DHT网络时,需要一个引导过程,要知道一个已经在该网络中的节点。要么通过tracker服务器获取节点,要么是直接得到节点,并没有那么自由。此外,tracker服务器的速度还是比DHT查找要快,一般下载过程是两者的结合。

补充2:文件分享过程

补充3:Kademlia算法概要 - Kademlia基于两个节点之间的距离计算,该距离是两个网络节点ID号的异或,计算的结果最终作为整型数值返回。资源的info_hash和节点ID有同样的格式和长度,因此,可以使用同样的方法计算资源(info_hash)和节点ID之间的距离节点ID一般是一个大的随机数,选择该数的时候所追求的一个目标就是它的唯一性(希望在整个网络中该节点ID是唯一的)。异或距离跟实际上的地理位置没有任何关系,只与ID相关。因此很可能来自德国和澳大利亚的节点由于选择了相似的随机ID而成为邻居。选择异或是因为通过它计算的距离享有几何距离公式的一些特征

(此外还有用户交换 (PEX)协议,暂不讨论)

源码分析

注:网络分享繁多,很多话的正确性都不是那么高,深入探索还得自己去读官方英文协议和论文。别人的话都只是你通往更高处的一个垫脚石,不能停留在上面。

论文

可用参考

其他

上一篇下一篇

猜你喜欢

热点阅读