aria2b icon indicating copy to clipboard operation
aria2b copied to clipboard

新增功能:监视客户端进度,ban掉吸血且一直汇报无进度的客户端IP

Open ilolipopi opened this issue 1 year ago • 3 comments

背景

  • 最近发现有许多客户端(大多是随机id)吃大量上传,但进度一直汇报为0。 本来一般吸血吧,但也有据说是PCDN为了平衡上下行比例恶意刷流量的(来源:[差评君的微博](https://weibo.com/5734325998/Oqgeha9bp ) 。
  • 我发现我居然能吸到迅雷的血 天呐噜,迅雷居然有上传 所以还是不要一刀切地按名字ban啰

逻辑

初筛(也就是最长那行if)

  • 名称符合config.noprogress_keywords
  • 上传速度大于1KiB/s(太少就不管了吧,节约点性能,毕竟我写的应该一言难尽)
  • 汇报进度为0(aria2.getPeersbitfield全为0)
    • TODO:不为0时也可以算下增幅够不够

符合的再进行下列判断

判断规则

注:使用扫描时的瞬时速度当作扫描间隔里的平均速度,统计对每个peer的上传量(因为没找到aria2c RPC怎么获取现成/精确的每个peer的上传量,transmission倒是有)

  • 上传了超过5个块的量
  • 进度为0(以后可以改成各种进度不对劲的都算)
  • 持续超过10次扫描

就ban IP

注意事项

  • 每个种子的每个peer客户端的上传量都存在全局变量里的,应该不会爆吧
  • 第一次写JS && 第一次提正经PR,请勿轻易合并或盲目运行

ilolipopi avatar Sep 30 '24 14:09 ilolipopi

我觉得看起来好像差不多了?至少在我这儿(Node.js LTS release: Hydrogen 18.20.4-1)跑起来挺欢快的

ilolipopi avatar Oct 10 '24 11:10 ilolipopi

来点日志看看么(IP记得打码)

// 我现在不太方便很少下种子,就没办法测试了

makeding avatar Oct 10 '24 11:10 makeding

我取消注释了app.js第120行的printpeer,所以会把通过初筛(也就是最长那行if) 的peer全部打印出来,并且PeerId后面还加了一列Ep集数。 --block-keywords="AAAAAAAAAA"是为了不让迅雷一上来就被ban log-pr.txt

ilolipopi avatar Oct 11 '24 02:10 ilolipopi

好像太早 approve 了, 今天看了下代码 好像没有关掉 「监视客户端进度」 功能的选项? 增加了的话我再测试下 然后 npm 发版

makeding avatar Nov 02 '24 15:11 makeding

--noprogress-keywords=""也能关吧……

ilolipopi avatar Nov 04 '24 14:11 ilolipopi