一直跟你索取数据,你有求必应地给它了,等你跟它请求的时候,不好意思,没有,不信你看我进度,我可是 0% 啊!
——这就是吸血。
然而 BT 协议非常宽松,大多数开源客户端并不屏蔽吸血客户端,有些客户端如 qee,可以通过 Peer/Client ID 识别它们并屏蔽。
个人使用的 Transmission 就只能屏蔽 IP,而且作者表示不会加入屏蔽客户端这种功能。我只好写了个 Shell 脚本,检测到特定客户端就屏蔽它的 IP。
transmission-remote 的 API 并不能获取 Peer ID,只有 Client ID,也就是根据客户端名称屏蔽的,通过 CLIENTS
来设置。
由于 IP 动态分配,也建议设置一下 TIMEOUT_SECONDS
,这样每过一段时间就会清空黑名单。至于 NAT 共用 IP 什么的,那就不在考虑范围内了,误伤就误伤了吧。
另一个问题是加入黑名单后即使 reload 了也不会立即生效,这个我已经提了 issue。目前暂时的解决方法是设置 RESTART_TORRENT=true
重启该任务。
通过 Peer ID 或 Client ID 屏蔽只是权宜之计,且不说可以随意修改,迅雷的离线服务器也是用的 libtorrent,而且普通用户吸血也是不能这样简单判断的。如果要根据其百分比、是否上传之类的判断,实现就会比较复杂,先凑合用吧。
还有一个已知问题,目前 Transmission 黑名单不支持 IPv6,甚至应用本身也没法禁用 IPv6。如果要禁就只能系统里禁了。
systemd 脚本
加戏时间
不吸血我怎么办?开会员?
更不能用。
一个号称离线下载的?
正经人谁用离线啊。
是啊。
你用离线吗?
我不用,你用吗?
玩 P2P 的能用离线下载?
用离线下载的能叫 P2P?
(异口同声)__!