|
本帖最后由 ZdyyApyF1kM0P9q 于 2020-7-12 09:34 编辑
如题, 这是一个用来定时将使用迅雷系客户端的ip加入屏蔽列表的脚本.
现在win10主流的Bitcomet自带完善的客户端屏蔽, Linux比较主流的QB也有人写了基于WEB API的脚本, 相反, 反而是cli支持非常完善的Transmission没有相应的简化脚本.
在此之前
本脚本的原理就是使用Transmission-Remote获取某特定客户端的ip, 将其格式化输出到反代理目录(apache等等, 最好和Transmission在一台机器上)下的txt文件中, 再同样利用Transmission-Remote更新blocklist (注意, blocklist的url必须要预先写好, 指向本机的反代理目录下的文件).
在更新之后, 脚本会暂停所有任务并在2s之后重开, 以便禁止名单生效. (不等两秒的话, 经常性的没法正确重开)
建议使用crontab对这个脚本进行定时, 我个人是每10min跑一次.
- #!/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 $EachIp $ListAddress) ]
- 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天清理一次.
这个玩意在知乎我也发了一份, 等S1回血完毕我再去S1发一份. > <
顺便我得吐槽一下, 这个写bash的体验, 真就是绝望, 一直以为自己码感 (一种类似语感, 数感的概念, 可能是我自创的)挺好, 这两个小时基本上在各种看不懂里度过了...这辈子都不想再写BASH脚本了...
|
|