Simple-Tracker / qBittorrent-ClientBlocker

一款适用于 qBittorrent/Transmission (Beta)/BitComet (Beta, Partial) 的客户端屏蔽器, 默认屏蔽包括但不限于迅雷等客户端. A client blocker compatible with qBittorrent/Transmission (Beta)/BitComet (Beta, Partial) which is prohibited to include but not limited to clients such as Xunlei.
MIT License
1.02k stars 26 forks source link

功能建议 #2

Closed zhongfly closed 9 months ago

zhongfly commented 9 months ago

因为anacrolix/torrent的问题找到这个屏蔽工具,使用后有几点功能建议

  1. 支持通过一些条件自动判断吸血用户,例如进度一直为0但是上传量已经超过种子大小的0.1%,像这次anacrolix/torrent吸血的问题就会被自动发现。
  2. 定期释放ip,避免误封,甚至是按被封次数不断加长某ip的封禁时间。
  3. windows上能否支持最小化到托盘之类的?(不过可以通过各种小工具实现就是了,倒不是很要紧)
Simple-Tracker commented 9 months ago

感谢反馈!

  1. 因此功能在一定程度上会增加错误屏蔽率 (原因在于客户端进度可能有滞后但上传量却是实时的), 未来会考虑添加此可选功能;
  2. 默认情况下, IP 封禁时间是 1 天 (86400 秒), 随后便会被释放, 出于简化实现及实际用途的考虑, 未有计划逐级添加封禁时间, 未来将加入一个可选项用于配置封禁时间及每次判断间隔;
  3. 该工具的设计本意未有考虑 Windows, 而是用于考虑在无 GUI 的服务器上以 systemd 运行为后台服务, 未来将尝试能否较好实现在 Windows 平台上的快捷键最小化托盘功能;
Simple-Tracker commented 9 months ago

已实现回复中 2, 部分实现 3 (默认窗口热键: CTRL+ALT+B. 经过测试, 托盘和快捷键之间对窗口管理会起一些冲突, 暂时不想继续排查), 并发布 1.8 版本.

zhongfly commented 9 months ago

例如进度一直为0但是上传量已经超过种子大小的0.1%

这个主要是举例,不过我看到有其他屏蔽工具更加严格,条件是进度为0且上传量大于10M。 如果未来可以支持的话,可以考虑具体数值(例如10M)与种子大小百分比都支持,并且这两种值都可以自定义,然后程序根据设置来限制。 例如取两者的最大值作为限制值,又或者是其中一个留空、满足另一个不为空的条件就限制。

不过仔细想想进度为0这个条件也不完美,如果变成自己上传一定量后对方的进度变化为0会更合理,但这显然就难度加大变麻烦了,有些不太现实

Simple-Tracker commented 9 months ago

已实现回复中 1, 开启 config 中的 banByPU 即可启动此功能, 并发布 1.9 版本. 由于 3 个功能均基本完成, 视为此 Issue 基本解决并随回复一起关闭. 判断规则: Peer 实际下载量为 Torrent 大小乘以进度百分比, 若客户端上传量大于 Torrent 大小的 2%, 且 Peer 实际下载量的 5 倍却比客户端上传量还小, 则认为 Peer 是有问题的并自动封禁. (由于缺乏测试条件, 此功能未经测试)

zhongfly commented 9 months ago

若 Peer 实际下载量的 5 倍比客户端上传量还小

那么这样考虑了进度可能滞后吗?假如对方进度是0,本地上传1kb那也被封禁了吧

Simple-Tracker commented 9 months ago

目前来说, 5 倍即是避免进度滞后的余量, 确实未考虑到特殊值的情况, 待我加一个起始条件...

zhongfly commented 9 months ago

目前来说, 5 倍即是避免进度滞后的余量, 确实未考虑到特殊值的情况, 待我加一个起始条件...

百分比可以额外加一个0.几%,在0进度时,就是我提的第一条… 伪代码表示一下意思(float64(torrentTotalSize) * (clientProgress + 0.002) * 5) < float64(clientUploaded) 5和0.002也许可以调小

edit:看到最新的条件了,感觉是这个意思

Simple-Tracker commented 9 months ago

规则已修改为: float64(clientUploaded) > (float64(torrentTotalSize) 0.02) && (float64(torrentTotalSize) clientProgress * 5) < float64(clientUploaded) 2% 即 0.02, 即 100MB Torrent 会有 2MB 上传量的起始判断条件, 但对于 10MB Torrent 就只会有 0.2MB 了. 我已重新发版, 希望能修复此问题.

补充: 未来将开放此功能的设置.

zhongfly commented 9 months ago

规则已修改为: float64(clientUploaded) > (float64(torrentTotalSize) 0.02) && (float64(torrentTotalSize) clientProgress * 5) < float64(clientUploaded) 2% 即 0.02, 即 100MB Torrent 会有 2MB 上传量的起始判断条件, 但对于 10MB Torrent 就只会有 0.2MB 了. 我已重新发版, 希望能修复此问题.

如果这2个值(2%和5)可以开放设置也不错,因为不同的人/环境可能有不同的评判标准

Simple-Tracker commented 9 months ago

已完成, 将在未来的下一版本开放此功能的设置, 并已在代码中完善此部分相关说明. 注意: config 中的 BanByPU 将被更名为 BanByProgressUploaded, 这是一个破坏性改动, 与之相关的 3 个设置项 BanByProgressUploaded, BanByPUStartPrecent 及 BanByPUAntiErrorRatio 将不会默认放置在 config.json 中. BanByPUStartPrecent 是百分比而非小数.

2.0 版本已经发布, 这些改动均已应用. 未来的下一版本将增加 BanByPUStartMB 的设置, 可以设定起始上传量要求, 与其它条件是 和 (and) 的关系. 未来的相关更新说明将只在 Release Note 内进行.

zhongfly commented 9 months ago

默认窗口热键: CTRL+ALT+B

我在win10上测试,发现只会最小化窗口到任务栏……和窗口自带的最小化没有区别

zhongfly commented 9 months ago

目前不知道是不是bug:当qb的密码错误时,程序不会报错,没有任何提示(debug设置为true也如此)

Simple-Tracker commented 9 months ago

目前不知道是不是bug:当qb的密码错误时,程序不会报错,没有任何提示(debug设置为true也如此)

刚刚在最新 Commit 上编译测试的, qBUsername: "admin", qBPassword: "". [2024-01-19 11:53:39][Login] 登录失败: 账号或密码错误. [2024-01-19 11:53:39][Main] 认证失败.

请注意 2.1 版本引入了破坏性改动: Config 内 username 更名为 qBUsername, Config 内 password 更名为 qBPassword. 若 qBUsername 为空, 则是直接跳过登录的, 因为不具备登录条件, 会转变为其它部分的报错.

(2.1-2.3 期间因 bug 登录功能不可用, 与账号密码无关, 已在 2.4 修复)

Simple-Tracker commented 9 months ago

默认窗口热键: CTRL+ALT+B

我在win10上测试,发现只会最小化窗口到任务栏……和窗口自带的最小化没有区别

这一功能在 Windows Server 2022 上测试通过, 测试结果表明可隐藏整个窗口, 可能不同的子版本有些许差异, 由于无测试环境暂时无法进一步排查. Windows 11 确有相关改动, 参见 https://stackoverflow.com/questions/75877438/how-to-hide-console-in-windows-11.

zhongfly commented 9 months ago

关于屏蔽清理,我想问一下,是不是程序启动时,之前在qb里手动添加的屏蔽ip会被清理掉? 我目前发现了这个现象,在关闭程序后又恢复成启动前的屏蔽ip了,我觉得这挺不错的,只是想问下是有意这样做的吗?

Simple-Tracker commented 9 months ago

关于屏蔽清理,我想问一下,是不是程序启动时,之前在qb里手动添加的屏蔽ip会被清理掉? 我目前发现了这个现象,在关闭程序后又恢复成启动前的屏蔽ip了,我觉得这挺不错的,只是想问下是有意这样做的吗?

是有意的, 避免重新开启程序后出现重复追加 IP 地址的情况, 因为程序的屏蔽列表是在内存中进行维护.