找回密码
 立即注册
查看: 1667|回复: 5

试着写了一个Transmission反迅雷脚本

该用户从未签到

1

主题

3

回帖

0

VC币

新手上路

Rank: 1

积分
130
ZdyyApyF1kM0P9q 发表于 2020-7-12 09:34:57 | 显示全部楼层 |阅读模式
本帖最后由 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跑一次.


  1. #!/bin/zsh
  2. Username=写你的名字
  3. #transmission webgui的用户名
  4. Password=写你的密码
  5. #transmission webgui的密码
  6. ClientList=(Xunlei Thunder "\-XL0012\-")
  7. #这里指定要修改的客户端列表, 每个客户端用空格分隔
  8. ListAddress="/var/www/html/blocklist.txt"
  9. #这里写你的list的储存位置, 我用的apache反代理

  10. for CertainClient ($ClientList){
  11. transmission-remote --auth $Username:$Password  -t all -ip |grep $CertainClient |awk '{print $1}' | xargs -L1 -I {ip} echo "{ip}" >> "templist.txt"
  12. }
  13. Temp=("${(@f)$(< templist.txt)}")
  14. #这里生成的临时文件之后会被自动清理
  15. for EachIp in $Temp
  16. do
  17.     if [ $(grep $EachIp $ListAddress) ]
  18.         then
  19.             echo "$EachIp exist, not adding"
  20.     else
  21.         echo "$EachIp didn't exist, adding"
  22.         echo "$EachIp - $EachIp , 0 , Autogen" >> $ListAddress
  23.     fi
  24. done

  25. transmission-remote --auth $Username:$Password --blocklist-update
  26. echo "clocklist updated"
  27. transmission-remote --auth $Username:$Password  -t all --stop
  28. echo "current session stopped, starting after 2 seconds"
  29. sleep 2s
  30. transmission-remote --auth $Username:$Password  -t all --start
  31. echo "session started"
  32. rm "templist.txt"
复制代码


我本人是个powershell用户, 除了Jetson Nano因为pwsh不支持用的zsh以外, 其他机器用的都是powershell core 7, 上述代码是我花费中午看动画片的时间, 用两个小时一边了解bash一边查Stackoverflow写出来的, 不用估计, 肯定是垃圾中的垃圾.

但即便如此, 我觉得这个思路应该是屏蔽指定客户端的最容易实践的思路了, 如果有擅长BASH/ZSH的人看到了, 能用老手的方式重新写出来, 造福更多用户, 我就感激不尽了.

此外, 国内大部分用户都是动态ip, 这个列表可以时不时清理一下. 我是每2天清理一次.

这个玩意在知乎我也发了一份, 等S1回血完毕我再去S1发一份. > <

顺便我得吐槽一下, 这个写bash的体验, 真就是绝望, 一直以为自己码感 (一种类似语感, 数感的概念, 可能是我自创的)挺好, 这两个小时基本上在各种看不懂里度过了...这辈子都不想再写BASH脚本了...
回复

使用道具 举报

  • TA的每日心情
    难过
    2020-6-8 15:17
  • 签到天数: 1 天

    [LV.1]初来乍到

    1

    主题

    4

    回帖

    0

    VC币

    新手上路

    Rank: 1

    积分
    183
    1315176066 发表于 2020-7-12 10:15:47 | 显示全部楼层
    感谢楼主分享,不会用呀
    回复 支持 0 反对 1

    使用道具 举报

  • TA的每日心情
    开心
    2021-2-26 00:10
  • 签到天数: 82 天

    [LV.6]常住居民II

    7

    主题

    97

    回帖

    48

    VC币

    高级会员

    Rank: 4

    积分
    24287
    Ryougi_Kukoc 发表于 2020-7-12 10:53:29 | 显示全部楼层
    哈哈哈tsdm楼下那个迅雷用户抗议的真是笑死我了
    回复 支持 1 反对 2

    使用道具 举报

    该用户从未签到

    1

    主题

    3

    回帖

    0

    VC币

    新手上路

    Rank: 1

    积分
    130
    ZdyyApyF1kM0P9q  楼主| 发表于 2020-7-12 11:13:52 | 显示全部楼层
    1315176066 发表于 2020-7-12 10:15
    感谢楼主分享,不会用呀

    如果是Transmission用户的话应该有Linux机器吧.

    Linux可以装一个反代理工具, Apache之类的, 让Transmission可以通过url访问位于本机上的屏蔽列表.

    使用Crontab定时脚本之后, 每一段时间脚本更新ip地址到屏蔽列表里.



    回复 支持 0 反对 1

    使用道具 举报

    该用户从未签到

    1

    主题

    3

    回帖

    0

    VC币

    新手上路

    Rank: 1

    积分
    130
    ZdyyApyF1kM0P9q  楼主| 发表于 2020-7-12 11:17:33 | 显示全部楼层
    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机器的局域网地址)


    回复 支持 0 反对 1

    使用道具 举报

    该用户从未签到

    1

    主题

    3

    回帖

    0

    VC币

    新手上路

    Rank: 1

    积分
    130
    ZdyyApyF1kM0P9q  楼主| 发表于 2020-7-12 11:19:58 | 显示全部楼层
    1315176066 发表于 2020-7-12 10:15
    感谢楼主分享,不会用呀


    url地址


    webui设置


    Linux机器上的代理目录


    回复 支持 0 反对 1

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表