传统的 PT 系统在技术上无法防止作弊,因为据 PT流量作弊工具之PTLiar | Demon's Blog :

PT服务器与BT客户端之间的通信协议很简单。一开始BT客户端会向PT服务器发出请求,告知种子的状态(完成还是需要下载)。PT服务器返回一个间隔时间和peer列表。此后,BT客户端按照PT服务器给定的间隔时间定时向服务器报告上传了多少,下载了多少,还剩下多少(任务结束时也会报告同样的信息)。这个过程中的问题在于,上传量数据完全是由客户端提供的,而针对如此庞大的P2P网络,PT服务器完全无法验证上传量的真实性。所以,只要伪造了这个通信的过程,上传量就可以随意设定了。

从理论上讲,这种伪装做种/欺骗上传量的方法是无法从根本上防范的,因为PT服务器没有掌握足够信息。

PT 系统相对 BT 系统的区别主要是取消了 DHT(用于发现可以上传下载资源的对等节点),改为由 PT 服务器返回对等节点列表,指定上传者的 BT 客户端可以向哪几个节点上传资源。 PT 系统默认上传者的 BT 客户端是常用的客户端,即不是专门为了 PT 系统设计的、传统的那些 BT 客户端。这就像知乎的服务器默认浏览者使用的浏览器是常用的浏览器,而不是专门为了知乎而设计的、能够屏蔽广告、支持云黑名单、屏蔽手机截图的浏览器,知乎的服务器甚至还假设你不会运行 UserScript(比如 有哪些超神的油猴脚本? ),这是服务器对客户端盲信的一面,让客户端有作弊的可能,比如屏蔽广告从而损伤服务器和其他使用标准浏览器的用户的利益。 但服务器和客户端之间也有相互怀疑的一面,比如客户端会质疑来自服务器的命令( 为什么浏览器要限制跨域访问? ),服务器也会质疑来自客户端的授权宣言( Authorization Claim ),比如一个用户想要删除自己的 Github 仓库时,平时用于创建仓库的令牌是无效的( Bad credentials ),得重新输入密码得到一个有删除仓库权限的一次性令牌,才能删除仓库。

PT 系统主要想限制的是客户端的下载行为,在鉴权( Authentication ,使用称为「Key」的永久令牌来证明客户端与数据库中用户的对应关系,我一直疑惑难道不应该用 PKI 或者一次性令牌吗?)后在数据库中检查用户的上传量,如果上传量不足则不返回对等节点列表(因为 PT 系统没有 DHT,所以想要下载,就只能依靠服务器返回对等节点,从指定的对等节点处下载)。