为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Python

使用效果图

webp


webp

  • 在腾讯云最低配服务器上跑了两天的效果,可以看出速度还是很快的,一天上万种子。

快速安装

  • linux使用:在python3的虚拟环境下(小白可以参看云服务器简单配置pip3 install magneticod就安装好了种子爬虫,在虚拟环境下命令行执行magneticod就可以运行了,等待一会儿,可以看到如下的日志输出,表明爬虫正在运行,并且收集到种子了。

    webp

    (也可以使用magneticod -d运行显示更详细的信息,-d参数表示输出debug信息。)
    网页显示与查询功能安装,同样在虚拟环境下pip install magneticow就好了,然后命令行magneticow --port 8080 --user 用户名 密码就可以运行在8080端口了。使用localhost:8080访问,输入自己更改的用户名和密码即可。


  • windows使用:windows下直接使用pip安装暂时有点问题(可以先尝试像上面那样pip安装),需要到github上下载源码包 - download zip,如下图:

    webp


    然后解压进入magneticod文件夹,在当前目录打开命令行,python setup.py install安装,再进入magneticow文件夹同样命令安装。还需要做一件事,就是找到你的python动态链接库中的sqlite3.dll(我的在Anaconda3\DLLs路径下),在SQLite Download Page找到适合你版本的sqlite-dll替换掉它,我用的是sqlite-dll-win64-x64-3200000.zip。(参考stackoverflow)这样就可以成功运行了。
    windows的使用效果不如linux(暂时认为是windows的bug,udp也会报错——[WinError 10054] 远程主机强迫关闭了一个现有的连接),限制速度之后就会好。

    webp

    windows不限速


种子与磁力链接

  • 说实话,作为一个从不开车、偶尔上车的良好公民 :),我对这些东西的了解十分有限。

  • 我一直习惯使用的是基于ipv6的非公开BT站点,类似北邮人BT、6维空间这样需要注册的BT站点。想要资源时,在站点上下载相应的种子(torrent)文件,使用utorrent客户端下载即可,至于其中的原理不求甚解,大概知道的就是下载完成该资源且开启ut客户端的用户越多我的下载速度越快,同时下载的人越多速度越快,因为下载的同时会互相上传文件的不同部分给对方,下载完成后要尽保种的义务,尽量开启ut客户端,方便其他用户下载该资源,增加我的上传量。分享文件做种时,要生成一个种子文件,并提交到站点服务器。

  • 为了有更清楚的认知,打开ut客户端研究一下,顺便下载下权力的游戏最新集。用ut客户端打开种子进行下载,在下载时观察下面的状态栏,第二栏就是Trackers,看来是非常关键的一个东西。

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

webp

  • 原来,该BT站点提供了一个Tracker服务器(倒数一二行),记录了所有下载者的信息或者文件分享者的信息,当我下载文件时,这个服务器会告诉我其他人的下载状态(谁拥有资源,谁下载完成了,谁正在下载),也告诉其他人我的下载状态,让我们互通有无,互相传递资源,增加下载速度,而tracker服务器充当了信息交换中心的角色。可以看到,第一行的DHT被禁用了,是为了不走外网流量,DHT非常重要,下文会讲到,暂时不管。

    webp


  • 在peers一栏我们可以看到其他下载者的详细信息,大家互相帮助上传与下载。

  • 在pieces一栏可以发现文件被分割成为很多份,每小份为1M大小,而我当前下载的视频为4个多G。在files栏里可以看到所有区块的下载状况。


    webp


    webp

  • 在对资源下载过程有了初步认识后,我们来详细地看下种子文件到底是什么。原来种子文件本质上是一种B编码后的文本文件,它包含了资源的详细信息,要打开它看里面的内容需要先解码,我们可以使用BEncode Editor这个软件。随便打开一个外网站点上下载的种子。

    webp


  • 在BEncode Editor中显示如下,这个73KB的种子包含了丰富的信息,在它的tracker服务器列表中可以看到名为海盗党的希腊域名,这个种子文件也才创建不久。


    webp

  • 而最关键的信息全在info字典中,它是种子文件元信息。点开查看详细内容。可以看到下载文件的分块机制和我们之前在ut客户端看到的一致。在种子文件的元信息中包含了所有内容信息,以及所有分块的哈希验证码(数字指纹),来确保文件的真实性。在下载时我们会向种子文件中记录的tracker服务器发出请求,得到其他有该资源的用户的地址,一小块一小块的下载,每小块下载完成后都与种子文件中的该小块的哈希值进行比对,看是否被篡改。

    webp


  • 每个种子文件也具有一个唯一标识码,称为种子文件的info_hash,是种子中所有info信息B编码后的SHA-1哈希值:20个字节,即40个16进制码。根据这串码就能找到对应的种子文件

  • 除了种子,我们还会遇到磁力链接,如下图,磁力链接又是什么呢?

    webp


  • 下图是一个磁力链接的分解,来自阮一峰老师的BT下载的未来,详细见wiki百科-磁力链接

    webp



作者:treelake
链接:https://www.jianshu.com/p/f1659aba5aed


点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消