试着写了一个Transmission反迅雷脚本
本帖最后由 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脚本了...
感谢楼主分享,不会用呀{:4_685:} 哈哈哈tsdm楼下那个迅雷用户抗议的真是笑死我了 1315176066 发表于 2020-7-12 10:15
感谢楼主分享,不会用呀
如果是Transmission用户的话应该有Linux机器吧.
Linux可以装一个反代理工具, Apache之类的, 让Transmission可以通过url访问位于本机上的屏蔽列表.
使用Crontab定时脚本之后, 每一段时间脚本更新ip地址到屏蔽列表里.
1315176066 发表于 2020-7-12 10:15
感谢楼主分享,不会用呀
代码里面需要修改的就是 "用户名" "密码" "屏蔽列表在本地的绝对路径"
然后transmission的webui里面的屏蔽列表url写反代理url就行了.
我用的是apache, 代理目录的绝对路径是 /var/www/html
里面存了一个屏蔽列表 blocklist.txt
那脚本里面的绝对路径就写 /var/www/html/blocklist.txt就行了
webui里的屏蔽链接写 192.168.x.x/blocklist.txt (192.168.x.x是你的linux机器的局域网地址)
1315176066 发表于 2020-7-12 10:15
感谢楼主分享,不会用呀
https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200712111829.png
url地址
https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200712111905.png
webui设置
https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200712112015.png
Linux机器上的代理目录
页:
[1]