更新了Powershell版本, arm可用, 功能更加完善了.
https://github.com/GrandArth/Transmission-Client-Block-Scirptgithub.com如题, 这是一个用来定时将使用迅雷系客户端的ip加入屏蔽列表的脚本.
现在win10主流的Bitcomet自带完善的客户端屏蔽, Linux比较主流的QB也有人写了基于WEB API的脚本, 相反, 反而是cli支持非常完善的Transmission没有相应的简化脚本.
在此之前
本脚本的原理就是使用Transmission-Remote获取某特定客户端的ip, 将其格式化输出到反代理目录下的txt文件中, 再同样利用Transmission-Remote更新blocklist (注意, blocklist的url必须要预先写好, 指向本机的反代理目录下的文件).
在更新之后, 脚本会暂停所有任务并在2s之后重开, 以便禁止名单生效.
似乎不用重开也行 注释掉了
建议使用crontab对这个脚本进行定时, 我个人是每10min跑一次.
既然重开不需要了 干脆2min一检查也挺好的
脚本
#!/bin/zsh
Username=写你的名字
#transmission webgui的用户名
Password=写你的密码
#transmission webgui的密码
ClientList=(Xunlei Thunder "-XL0012-")
#这里指定要修改的客户端列表, 每个客户端用空格分隔
ListAddress="/var/www/html/blocklist.txt"
#这里写你的list的储存位置, 我用的apache反代理
for CertainClient ($ClientList){
transmission-remote --auth $Username:$Password -t all -ip |grep $CertainClient |awk '{print $1}' | xargs -L1 -I {ip} echo "{ip}" >> "templist.txt"
}
Temp=("${(@f)$(< templist.txt)}")
#这里生成的临时文件之后会被自动清理
for EachIp in $Temp
do
if [ $(grep -c $EachIp $ListAddress) -gt 0 ]
then
echo "$EachIp exist, not adding"
else
echo "$EachIp didn't exist, adding"
echo "$EachIp - $EachIp , 0 , Autogen" >> $ListAddress
fi
done
transmission-remote --auth $Username:$Password --blocklist-update
#echo "clocklist updated"
#transmission-remote --auth $Username:$Password -t all --stop
#echo "current session stopped, starting after 2 seconds"
#sleep 2s
#transmission-remote --auth $Username:$Password -t all --start
#echo "session started"
#好像不用重开也行
rm "templist.txt"
菜鸡声明
我本人是个powershell用户, 除了Jetson Nano因为pwsh不支持用的zsh以外, 其他机器用的都是powershell core 7, 上述代码是我花费中午看动画片的时间, 用两个小时一边了解bash一边查Stackoverflow写出来的, 不用估计, 肯定是垃圾中的垃圾.
但即便如此, 我觉得这个思路应该是屏蔽指定客户端的最好的思路了, 如果有擅长BASH/ZSH的人看到了, 能用老手的方式重新写出来, 能造福更多用户, 我就感激不尽了.
此外, 国内大部分用户都是动态ip, 这个列表可以时不时清理一下. 我是每2天清理一次.
