{"id":49912568,"url":"https://github.com/makeding/aria2b","last_synced_at":"2026-05-16T13:15:05.901Z","repository":{"id":53504548,"uuid":"291126002","full_name":"makeding/aria2b","owner":"makeding","description":"aria2 自动 ban 掉迅雷等吸血客户端的脚本 (aria2_ban_thunder)","archived":false,"fork":false,"pushed_at":"2024-11-02T09:17:59.000Z","size":51,"stargazers_count":135,"open_issues_count":2,"forks_count":15,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-15T19:53:33.322Z","etag":null,"topics":["aria2","aria2-ban","aria2c","ban-peer"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/makeding.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-08-28T19:07:41.000Z","updated_at":"2025-09-11T03:34:25.000Z","dependencies_parsed_at":"2024-05-30T19:54:33.003Z","dependency_job_id":"b8787b04-5a10-49ce-8f20-0d56d79e2780","html_url":"https://github.com/makeding/aria2b","commit_stats":{"total_commits":24,"total_committers":5,"mean_commits":4.8,"dds":0.5,"last_synced_commit":"67040ed327077f1f774e9183647667879844af12"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/makeding/aria2b","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makeding%2Faria2b","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makeding%2Faria2b/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makeding%2Faria2b/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makeding%2Faria2b/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/makeding","download_url":"https://codeload.github.com/makeding/aria2b/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makeding%2Faria2b/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33104085,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T04:41:52.686Z","status":"ssl_error","status_checked_at":"2026-05-16T04:41:52.009Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aria2","aria2-ban","aria2c","ban-peer"],"created_at":"2026-05-16T13:15:05.299Z","updated_at":"2026-05-16T13:15:05.894Z","avatar_url":"https://github.com/makeding.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# aria2b\n\naria2 自动 ban 掉迅雷等不受欢迎客户端的脚本（仅限 Linux）  \n\n由 [aria2_ban_thunder](https://github.com/makeding/aria2_ban_thunder) 改名而来  \n# 原理\n通过 aria2 RPC （就是API）自动查找不受欢迎的 peer 然后使用 iptables + ipset 来封禁其 IP （所以 Windows / macOS 不魔改是没法用的）  \n\n这是不修改 aria2 源码（其实就是自己太菜了 改不动 C++）而 ban 掉这些客户端的一个办法。\n## 客户端屏蔽规则\n### 关键字\n应该好理解吧，就是客户端名称符合关键字就ban\n### 监视进度\n- 初筛（也就是最长那行if）\n  - 名称符合config.noprogress_keywords\n  - 上传速度大于1KiB/s（太少就不管了吧，节约点性能，毕竟我写的应该一言难尽）\n  - 汇报进度为0（```aria2.getPeers```的```bitfield```全为0）\n    - TODO：不为0时也可以算下增幅够不够\n\n符合的再进行下列判断\n- 判断进度不对劲的规则\n  - 上传了超过5个块的量\n  - 进度为0（以后可以改成各种进度不对劲的都算）\n  - 持续超过10次扫描\n  \n\u003e **_注：_** 此处使用扫描时的瞬时速度当作扫描间隔里的平均速度，统计对每个peer的上传量（因为没找到aria2c RPC怎么获取现成/精确的每个peer的上传量，transmission倒是有）\n## 依赖\n`nodejs` `ipset` `iptables`  \n自行参考[Node.js 官方教程](https://github.com/nodesource/distributions/blob/master/README.md)  \n\n开机自动启动 `ipset` `iptables` 按照自己需求来安排\n### Alpine\n\n    apk add iptables ip6tables ipset nodejs\n### Ubuntu / Debian\n    apt-get install ipset\n### ArchLinux\n    pacman -S ipset yarn\n\n### Centos\n    yum install ipset\n\n## 下载\n三选一  \n### 稳定版（强烈推荐）\n\u003e 同时也是更新命令\n\n    npm i -g aria2b\n    # 或者\n    yarn global add aria2b\n    aria2b\n### 稳定版但是单文件\n\u003e 适合 OpenWrt 或者不想使用包管理器的你\n\n到 [releases](https://github.com/makeding/aria2b/releases) 下载最新版本\n\n    chmod +x aria2b\n    ./aria2b\n\n### 开发版\n\n    git clone https://github.com/makeding/aria2b.git # 克隆\n    cd aria2b\n    yarn # 安装依赖\n    # npm install # 也是安装依赖\n    node app.js\n\n    git pull # 更新\n## 配置\n目前版本已经默认开箱即用了，欢迎报告 bug  \n* 使用aria2的配置文件\naria2b支持寄生配置。会读取aria2本体的配置文件来找 aria2 RPC 端口以及 secret 等各种参数。因此仅需一个配置文件即可对同时 aria2 和 aria2b 做修改。\n  * 默认读取的路径为 `$HOME/.aria2/aria2.conf` -\u003e `/tmp/etc/aria2/aria2.conf.main` (OpenWRT)-\u003e `/etc/aria2/aria2.conf` -\u003e `./aria2.conf`  \n主机若为本地则默认关闭证书校验（自行 `update-ca-trust` 让本地系统信任之类的其实更好）  \n  * 也可以使用 -c 来指定 aria2 的配置文件\n    ```\n    aria2b -c \u003cpath\u003e\n    ```\n* 使用命令行\n也可以在命令行中设置aria2b的各种参数。例如：\n    ```\n    aria2b -u \u003curl\u003e -s \u003csecret\u003e\n    ```\n\n所有配置如下表所示：\n| 描述 | cli |  aria2 config 寄生配置  | 默认值 | 备注\n|-|-|-|-|-|\n| rpc url | -u --url | N/A | http://127.0.0.1:6800/jsonrpc \n| rpc secret | -s --secret | ab-rpc-secret | N/A\n| ban 客户端关键字 | -b --block-keywords | ab-bt-ban-client-keywords | XL,SD,XF,QN,BD | 以,为分割符\n| 需监视进度的客户端关键字 | --noprogress-keywords | ab-bt-noprogress-keywords | XL,SD,XF,QN,BD,Unknown | 以,为分割符\n| 进度阈值 | --noprogress-piece| ab-bt-noprogress-piece | 5 | 单位：种子的分片数\n| 超过阈值等待次数 | --noprogress-wait | ab-bt-noprogress-wait | 10 |\n| IP 解除封禁时间 | --timeout | ab-bt-ban-timeout | 86400 | 以秒来计算\n| 关闭证书校验 | --rpc-no-verify | ab-rpc-no-verify| N/A | rpc 为本地时默认关闭证书校验 \n| 自定义信任ca证书 | --rpc-ca | ab-rpc-ca | N/A | 路径/base64两次编码\n| 自定义信任证书 | --rpc-cert | ab-rpc-cert | N/A | 路径/base64两次编码\n| 自定义信任私钥 | --rpc-key | ab-rpc-key | N/A | 路径/base64两次编码\n\n\u003e **_注意：_** ⚠️寄生配置**不**支持结尾带 # 注释\n\n`--rpc-ca` `--rpc-cert` `--rpc-key` 需要同时配置，不然还是会不信任，这是 Node.js 的[设定](https://nodejs.org/api/tls.html)，这里推荐系统去手动信任 ca 证书来完成而不是这么麻烦（搜索关键词 `update-ca-trust`）  \n## 守护\n### systemd\n参考配置\n```\n[Unit]\nDescription=aria2 ban unwelcome clients via ipset\nAfter=network.target aria2.service\n\n[Service]\nType=simple\nUser=root\nRestart=on-failure\nRestartSec=5s\n\n# 这里的路径自己改改，默认应该是这个\nExecStart=/usr/local/bin/aria2b\n\n[Install]\nWantedBy=multi-user.target\n```\n命令：\n```\nsystemctl edit aria2b --full --force\nsystemctl enable aria2b.service --now\n```\n### pm2\n```\n# 自己安装\n# yarn global add pm2 \n# pacman -S pm2 # ArchLinux\npm2 start --name 'aria2b' aria2b\npm2 save\npm2 startup\n```\n# blocklist 参考 (--block-keywords)\n| 客户端 |  Peer名称 |\n|-|-|\n| 迅雷 | XL SD |\n| 影音先锋 | XF |\n| qq旋风 | QD |\n| 百度网盘 | BN（可能） |\n| 未知 | Unknown （请注意大写） |\n\n以上吸血 peer 参考了来自隔壁的 [qBittorrent-Enhanced-Edition](https://github.com/c0re100/qBittorrent-Enhanced-Edition/blob/ebe908f186be5fa2aba8710a543b3ac5c92b92fa/src/base/bittorrent/session.cpp#L2226) 项目的源码，在这里表示感谢  \n如果还想屏蔽更多的 bt 客户端，可以参考 参考[这边的源码](https://github.com/makeding/bittorrent-peerid/blob/master/index.js#L249)  （没有什么必要啦 就迅雷之类的会吸血）  \nban 未知的 peer 按照需求添加\n\n# Enjoy～ \n如果你觉得好用请推荐给别人  \n有什么问题 发 issue 就可以了，或者自己改改 发个 PR 吧\n# License\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmakeding%2Faria2b","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmakeding%2Faria2b","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmakeding%2Faria2b/lists"}