梦璃
梦璃

扔掉迅雷!正确下载磁力链接和种子——以qBEE为例

原创教程 吾爱之 - 22

不要使用迅雷!

前言

BT下载是一个老生常谈的话题,站内也有篇文章讲这个,但是里面只是提到了 qBittorrent-Enhanced-Edition,没有详细地说明如何去使用该软件,同时也有一些事实性错误。看见客户端 Peer 列表里一堆 0% 进度的 Xunlei,我决定抽点时间写下这篇文章,从一个使用者的角度教给大家如何正确下载种子和磁力链接,尽量不涉及协议细节和软件实现,也尽量不提及其他内容,欢迎大佬斧正。

某种子的 Peer 列表

基本知识

本节介绍了 BT协议的一些基本常识,虽然不知道并不影响你使用 BT,但还是推荐看一下。

什么是 BT 协议

严格意义上讲,BitTorrent(以下简称 BT)是一簇协议,由多个协议及其扩展共同组成,可以在这里找到官方认可的所有协议规范。首先它是一个 P2P(Peer to Peer)文件分享协议,与另一个曾经流行的P2P分享协议 eD2k 相比专注于上传和下载。网龄略长(有没有听说过VeryCD?)、对 eD2k 协议略有了解的朋友可能知道,eD2k 更加注重分享,你需要设置一个共享文件夹,把自己有的文件共享出去,其他用户可以通过目录服务器连接到你并获取你所有分享列表,这天然延长了资源的寿命;而 BT 协议没有这个概念,一个种子或一条磁力对应一个文件或文件夹,任何人都可以该种子获取此文件,也许这就是 BT 协议更加流行的原因,同时这种 Hit and Run 也造成了大量死种。

Torrent 文件与磁力链接

很多人可能会疑惑,torrent 文件也就是所谓的种子文件,跟磁力链接有什么关系,他们是不是一一对应的。标准答案是没什么关系。磁力链接是一套开源分享标准,它可以用来分享 BT 协议,也可以用来分享其他的协议。但是实际上并没有其他常见协议采用磁力链接的形式分享,我们见到的磁力链接基本上都是以 magnet:?xt=urn:btih: 开头的用于 BT 协议,后接一串以 16 进制表示或 base32 表示的 sha1 散列值,有时还有其他参数,这个值被称为 info_hash,是 tracker 用来识别种子的唯一方式。这里我们可以说,从 BT 协议设计角度和实际角度出发,一个磁力链接唯一对应了一个 torrent 文件,一个 torrent 文件也唯一对应了一个磁力链接。但是从数学的角度出发,一个磁力链接或者一个 info_hash 实际上对应无穷多个种子文件,这是散列函数的特性所导致的。然而你可以简单认为由于 info_hash 空间过大(数量过多),产生碰撞即有两个种子对应一个磁力链接的可能性十分接近0。那么根据这个特性,你拥有一个种子文件通过一个数学公式就可以生成它的磁力链接,在 BT 软件内可以直接看到,但是你拥有一个磁力链接却无法找到对应的种子文件(即鸽笼定理)。

在实际协议运行过程中,由磁力链接向种子文件的转换也是头疼的问题,协议规定在没有中心服务器的情况下由 DHT 网络负责传递种子文件。

由于 BT 协议对文件进行分块,完全相同的文件可以产生多个不同的种子文件。

BT 的架构

上文提到 BT 是一个 P2P 协议,也就是说文件并不存在于某个中心服务器上,而是放在各个用户手里(称为 Peer),有人做种你就可以下载,没有则不行(称为死种),这与传统的中心化协议有本质区别。例如网盘或者HTTP直连都是中心化的,所有文件都存放在提供商的服务器上。

PlantUML diagram

一次典型的 BT 协议下载过程需要至少一个 Tracker 和至少两个 Peer (一个为下载者Leecher一个为上传者Seeder)参与。Tracker 实际上是中心化的,没有 Tracker 的帮助 Peer 间无法直接建立连接,后面谈到的分布式哈希表(DHT)解决了这个问题。这里假定一个种子已经被发布至 Tracker(如何发布取决于 Tracker 具体实现,这里只需要认为 Tracker 知道有这样一个种子存在)。当一个 Peer 连接到 Tracker后,会提交 info_hash,并向 tracker 发送自己的状态(上传还是下载,完成百分比多少等),这个过程称为 announce,使用HTTP明文传输;tracker 将会持续记录当前这个种子的所有活动 Peer,包括自动记录 announce 时的客户端IP地址和端口号,以及它提交状态信息。其他 Peer 提交同样的 info_hash 时,tracker 会向这个 Peer 返回它记录其他 Peer 的信息。然后该 Peer 主动或被动连接到其他 Peer 进行进一步通信,建立连接并互相传输数据;这个过程是不经过也不需要 tracker ,可以使用 TCP 或 uTP(基于 UDP),如今以 TCP 协议为主。

Peer 间通信

这是一个比较复杂的过程,牵扯到文件分块、校验、PeerID 等等一系列过程,你只需要知道你通过 BT 下载的文件在种子的制作时就被分割成了等大的小块,块是跨文件的,文件传输的基本单位就是一块(piece),获取到一个块后会根据种子文件内保存的信息校验。每个块可以来自不同的 Peer,这也就加速了你的下载过程,同时也允许只做种部分文件。此外下载者Leecher和做种者Seeder并不严格区分,一个下载者同时可以共享,向其他 Peer 发送自己已下载的部分,只不过我们习惯上按照下载完成与否区分不同 Peer。

DHT 协议

分布式哈希表 DHT 的出现正是为了解决中心式 tracker 的各种问题,比如容易被屏蔽、单点故障等。它类似 eD2k 的 KAD 网络,允许 BT 客户端在没有 tracker 的情况下可以自行发现其他 Peer 进行下载和上传,这是一个真正的去中心化网络,使用独立的协议。通过磁力链接获取种子文件正是通过 DHT 实现的,种子文件从拥有该种子的 Peer 上被直接传递到你的客户端,市面上的磁力搜索引擎也大都是通过爬取 DHT 网络实现。需要注意的是从 DHT 获取的种子文件是不带 tracker 地址的,所以磁力链接通常会包含额外的 tracker 字段,用于当客户端获取到种子后自动使用指定的 tracker。

与之功能类似的还有 PeX 协议,此处略去不讲。

DHT 网络需要 Bootstrap,一个第一次启动的客户端一般连接不到其他 DHT 节点,这时候可以下载几个热门种子,通过 tracker 获取到一些节点用于 DHT 网络发现,之后就不再需要了。

BT v2

你在较新的客户端中会发现有些地方会写着 v2 字样,它是 BT 协议的最新版本,解决了原有 v1 协议中存在的一些问题,比如文件 padding、哈希冲突(上面提到的sha1算法被换掉了)等等,是一次很好的升级。然而正如所有的大型网络一样,现有的 BT 网络已经长期运行在 v1 上,v1 并不能向后兼容 v2,因此在目前的网络中 v2 使用的频率不多,很多基础设施也没有升级的打算,导致 v2 推行缓慢。

选择下载客户端

上面讲了一些技术细节,接下来是本文重中之重的客户端选择。

为什么不要使用迅雷

虽然只要按照 BT 协议标准向 Tracker 和 Peer 发起请求即可下载文件,成为合法客户端,但是客户端是有高下之分的。有些客户端不严格遵守 BT 协议,产生危害整个网络的行为,点名迅雷。迅雷又被称为吸血雷,包括迅雷在内的一些吸血客户端会利用 BT 协议的弱点,只下载不上传,或者只给自己同类的客户端上传,不遵守 BT 协议,试图将用户都揽到自己这里,导致正常的客户端无法下载。从上面的简介里可以得知,BT 协议是一个人人为我,我为人人的协议,如果当前没有人在做种,任何新用户就无法下载。所以维护这个网络的最好做法就是做种,向其他 Peer 提供自己有的资源。然而吸血客户端严重违反了这个原则,继续使用它们只会导致整个网络更加恶化,没有人愿意做种,最终大家的利益都受损。

除此之外大部分移动设备上的下载器、各类离线下载器(如果它们真的有离线下载功能)都属于此类危害网络的客户端,也请不要使用这类软件。

符合要求的客户端

以下列表来自某 PT 站:(无奖竞猜:这是哪个站?)

BitTorrent 7.xx ( >= 7.9 )
btpd 0.16
Deluge 1.3.x
Deluge 2.x
Halite 0.4.0.4
KTorrent 21.x
KTorrent 22.x
KTorrent 5.1.x
Leechcraft 0.6.x
libtorrent/1.1.x
qBittorrent 3.0.9
qBittorrent 3.3.x
qBittorrent 4.0.x
qBittorrent 4.1.x
qBittorrent 4.2.x
qBittorrent 4.3.x
qBittorrent 4.4.x
qBittorrent 4.5.x
rTorrent 0.9.x / libtorrent 0.13.x
Transmission 2.xx
Transmission 3.0.0
Transmission 4.0.0
Transmission 4.0.1
Transmission 4.0.2
Transmission 4.0.3
uTorrent 1.8.x
uTorrent 2.0.4
uTorrent 2.2.x
uTorrent 3.5.3
uTorrent 3.5.4
uTorrent 3.5.5
uTorrent Mac 1.8x

这些客户端都被认为的严格遵守 BT 协议,也是推荐使用的客户端。其中个人认为下载速度最快、连通性最好的是用 Python 编写的 Deluge,其核心是 libtorrent,但是资源消耗比较大;其次最适合保种的是 Transmission。此外列表里没有的 Aria2 作为全能下载器也可以一用。

其他客户端

然而只有这些严格遵守协议的客户端还不够,它们非常容易被吸血雷吸血,对付公网 BT 恶劣环境力不从心。这里我更推荐使用 qBittorrent 的第三方修改版 qBittorrent-Enhanced-Edition,相比于官方版,它添加了以下功能:

自动屏蔽迅雷、QQ旋风、百度网盘等吸血客户端和离线下载器
自动屏蔽来自中国未知客户端
自动更新内置tracker列表
Peer白名单、黑名单

这些功能对于公网下载都非常实用,对君子则君子、对小人则小人,提高下载速度、避免被吸血。

qBEE安装与设置

以下教程仅针对 Windows,Linux 用户相信有能力自己解决。

下载安装

qBEE 唯一指定下载地址:

https://github.com/c0re100/qBittorrent-Enhanced-Edition/releases

进入后找到最新的版本,点击 Show all assets,找到 qbittorrent_enhanced_版本号_x64_setup.exe 下载。

这里提供最新版本的链接:https://github.com/c0re100/qBittorrent-Enhanced-Edition/releases/download/release-4.5.2.10/qbittorrent_enhanced_4.5.2.10_x64_setup.exe

下载或访问出现问题请翻墙。

安装取消勾选 Install with Debug Symbol Files(没有用),勾选创建桌面快捷方式,软件没有任何捆绑;安装完成后双击桌面上的 qb 图标打开。

配置软件

软件主界面如图所示,上方工具按钮从左到右分别是添加磁力链接、添加种子文件、删除任务、开始任务、停止任务、设置。

qBEE有些设置可能需要手动修改,我们先点击设置按钮,这里给出一些需要注意的参数:

左侧点击“下载”,对于机械硬盘建议开启为“所有文件预分配磁盘空间”,下方可以修改默认保存路径

 

监听端口可以使用随机端口,并确保勾选了UPnP端口转发,这样可以使更多 Peer 连接到你,也会加速你的下载。使用过 eMule 等 eD2k 协议软件的知道有个 HighID 和 LowID 的概念,在端口转发被正确配置后你将拥有类似 HighID 的效果,反之是 LowID。如果端口转发失败(在主界面下方状态栏有指示),则可以尝试在路由器中手动端口转发,这超出了本篇文章的范围,网上有更多资料可供参考。

连接限制看着改,保持默认也可,理论上调大会增加上传速度和下载速度,具体数值取决于你自己。

 

速度一栏中可以设置全局速度限制,为了更快的下载这里当然是不设置,当然你也可以设置一个速度限制避免长期占用网络,但是强烈推荐不要设置过低的上传速度限制,这是你对网络做贡献的最好方式;如果你真的要设置上传限制,请尽量保证不低于最大上传速度的30%,这几乎不会影响你的任何上网体验。下面设置速度限制可以全部取消勾选,没什么用。

 

BitTorrent设置里勾选启用DHT、PeX和本地用户发现,加密模式可以选择允许加密,匿名模式没有用,这玩意不匿名。如果你的电脑配置较差,可以设置 Torrent 队列,限制同时下载和上传的任务数。做种限制尽量不要使用,请记住持续做种是你贡献网络的最好方式;如果真的要启用做种限制,则分享率限制不要低于3,意味着你的上传量等于三倍下载量时停止上传。

勾选 Automatically update public trackers list,点击 Refetch 可以手动刷新,下面出现类似图中的 /announce 的地址就是成功了,这个功能可以帮你把添加的种子和 DHT 网络获取的种子提交至列表中的 tracker,以获取更多 Peer。

 

WebUI尽量不要开启,配置不当有安全风险。

 

高级设置中勾选 Auto Ban Unknown Peer from China 和 Auto Ban BitTorrent Media Player Peer,更好地提高反吸血能力,其他设置不要轻易改动。

如此以来qBEE就设置完成了,下面可以开始添加种子和磁力链接了。

使用

选择种子或者输入磁力链接后,会弹出这样一个窗口。如果是磁力链接会先尝试获取元数据,这时候如果你是第一次使用这个软件,那八成会失败,因为你没有很好地整合在 DHT 网络中(见软件下方状态栏 DHT 结点数),先去网上随便找一个热门种子,可以是Ubuntu或其他开源软件的镜像等,添加任务,等一段时间后 DHT 结点数增加就好了。

这里在右侧可以选择下载哪一些文件和保存目录,点击OK后软件将自动开始下载。

选择一个任务可以在下方点击这几个选项查看数据,用户即 Peer 情况,你再也不会在里面看到永远是 0% 的 Xunlei 了。之后等待下载完成即可。下载速度取决于 Peer 数量和你跟现有 Peer 的连通性,热门种子可以轻松跑满你的带宽,冷门种子可能根本没速度,这时候只能等其他 Peer 上线。

 

结语

没人能够完全阻止迅雷这类客户端的存在,这是一个涉及商业利益和人性的问题,技术手段不是解决他们的方法,也不能解决这个问题。我毫不怀疑很多人看完这篇文章转头又用上了迅雷,但是我还是想发扬一下互联网精神,希望读者能够理解我的用心。

最后再次强调:远离迅雷等吸血客户端,你对网络的最好贡献方式就是使用符合标准的软件做种,请在下载完成后不要立刻关闭软件或删除任务,你的上传可以帮助其他人更快地下载。如果有可能,可以设置软件开机启动,或者尽量保证软件开启。

PS:如果你是Transmission用户,可以使用 https://github.com/WhymustIhaveaname/Transmission-Block-Xunlei 来屏蔽吸血客户端。

未经许可禁止转载本文。

梦璃 Since 2019

友情链接与合作请戳我

让璃月来随时通知阁下更新吧~ 同意 不用了