后记于2023:群晖的DownloadStation用的是Transmission/2.9.4。在入坑PT之后,我发现qBittorrent更好用,并且更能抢上传,于是欣然换了qBittorrent-Enhanced-Edition
历史车轮滚滚向前,但车辙下的印迹仍然有参考意义->我改qBittorrent-Enhanced-Edition的代码来模拟了Transmission/2.9.4因为一些PT站不认qBittorrent-Enhanced-Edition
Introduction
群晖的 Download Station 用的是 Transmission. 最近下载BT,发现有不少 Xunlei 0.0.1.8,只下载不上传.但是由于群晖的动态库不太一样,尝试加载DLP失败了.就另辟蹊径,通过 Download Station API 获取 Peer 信息,筛选出吸血驴,限速到 1 Package/S.不但能防止吸血驴吸血,还能拖住吸血驴的资源
Structure
Download Station API -> Python script -> IPtables
Highlight
- 自动识别吸血驴并屏蔽+自动恢复
- 支持 IPv6
- Python 脚本,自定义度高
Efficacy

Configuration
data.json
修改 SYNOAPI_PREFIX
, USERNAME
, PASSWORD
三个字段, 保存即可
{
"data": {
"config": {
"SYNOAPI_PREFIX": "http://IP:PORT/",
"LOGIN_API": "webapi/auth.cgi?api=SYNO.API.Auth&version=2&method=login&account=USERNAME&passwd=PASSWORD&session=DownloadStation&format=sid'",
"PEER_API": "webapi/DownloadStation/task.cgi?api=SYNO.DownloadStation.Task&version=1&method=list&additional=peer",
"EMULE_API": "webapi/entry.cgi?api=SYNO.DownloadStation2.Task.eMule&version=1&method=list_upload",
"USERNAME": "USERNAME(with admin permission)",
"PASSWORD": "PASSWORD"
},
"blacklist": [
................
Installation
Dependence
在套件中心安装 Python3 即可
Run When Start
既然能看到这里, 开机启动应该不是一件难事,就可以跳过这一段
Debug
- 标准输出和错误输出均重定向在 /tmp/deny.log
- 防火墙可以使用
iptables-save
,ip6tables-save
查看
代码解释
源代码有注释
这段代码是一个用于运行在Synology Download Station上的守护进程脚本。它的作用是拒绝迅雷下载客户端的连接,以及根据配置的黑名单拒绝一些其他下载任务的连接。以下是代码的主要逻辑:
导入必要的模块:
1. os:提供操作系统相关的功能。
2. time:提供时间相关的功能。
3. request:用于发送HTTP请求。
4. json:用于处理JSON数据。
主程序逻辑:
1. 读取存储在 data.json 文件中的配置信息和黑名单数据。
2. 通过登录API获取会话ID(sid)。
3. 进入主循环:
1. 通过 PEER_API 获取正在下载的任务列表,提取任务中的下载客户端信息(peer_raw)。
2. 遍历 peer_raw 中的每个下载客户端信息,如果客户端名称出现在黑名单中,则将其IP地址添加到deny_addr 中。
3. 通过 EMULE_API 获取正在下载的eMule任务列表,根据黑名单,将需要拒绝连接的eMule任务加入deny_addr 中。
4. 清空 peer_raw 列表,为下一轮数据准备。
5. 更新防火墙规则,拒绝 deny_addr 中的IP地址连接,并设置一些限制策略。
6. 更新已拒绝的IP地址列表 denied_addr。
7. 清空 deny_addr 列表,为下一轮数据准备。
8.等待5秒后继续下一轮循环。
4. 异常处理:
如果发生任何异常,将异常信息打印出来。
代码的主要功能是通过调用Synology Download Station的API来获取任务信息和会话ID,然后根据黑名单数据拒绝特定下载客户端的连接,同时根据eMule任务的黑名单拒绝连接。然后,使用iptables ip6tables设置防火墙规则来实际拒绝连接。整个过程在一个无限循环中进行,每轮循环等待5秒钟