冰箱研会长 发表于 2020-7-18 11:35

Transmission屏蔽迅雷的脚本 > < 蹭蹭S1高权重

本帖最后由 冰箱研会长 于 2020-7-18 15:49 编辑

其实最初的版本在闭坛的那一天就写完了, 闭坛期间把ARM机的shell换成了Powershell, 顺带着用powershell写了个更完善的版本放到了Github上.
可能有人看我在其他地方发过, 然而我发现在那些地方根本百度不到! 所以我就一直等待着S1重开的这一天, 想着一定要在PC区重新发一遍, 让有需求的人能比较容易的找到.

这个脚本的起因是下载VCB的高达Origin的时候, 列表里一堆迅雷, 我一个个手动的加到屏蔽列表里面, 同时百度的时候看到qbit有人写了利用webapi的脚本,
我就想也许可以利用Transmission的api来实现同样的事情.
一番搜索之后, 我发现Transmission有利用RPC接口的官方轮子transmission-remote, 这下就可以在shell里实现屏蔽列表的实时增补了.


#!/bin/zsh
Username=aaaaaaaaaaaaaa
#transmission webgui的用户名
Password=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
#transmission webgui的密码
ClientList=(Xunlei Thunder "\-DL3760\-" "\-XL0012\-""\-UW110Q\-" "\-FD51\]\%C7\-" "\-LrD250\-")
#这里指定要修改的客户端列表, 每个客户端用空格分隔
ListAddress="/var/www/html/blocklist.txt"
#这里写你的list的储存位置

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 exists, not adding"
      else
                echo "$EachIp didn't exist, adding"
                echo "$EachIp - $EachIp , 0 , Autogen" >> $ListAddress
      fi
done

echo "updating blocklist..."
transmission-remote --auth $Username:$Password --blocklist-update
#transmission-remote --auth $Username:$Password -t all --reannounce
#sleep 2s
#echo "stoping all current torrents..."
transmission-remote --auth $Username:$Password-t all --stop
sleep 2s
#echo "starting all current torrents..."
transmission-remote --auth $Username:$Password-t all --start
rm "templist.txt"



这个是ZSH版本的, 我得承认我学习ZSH的时间一共不到4个小时, 结果就是这一坨大屎, 用了一堆字符串处理的外部命令, 奇妙的中间缓存文件, 总之就是非常不优雅.
编写体验极差, 在这里发上来的另一个原因也是希望有好心人教教我, 我实在不忍心看到口耳相传的ZSH被我用成这个德性.


<# function TBTblocklist(){
#This function use ConvertFrom-SourceTable script!!!
$Username = "aaaaaaaaa";
$Password="aaaaaaaaaaaaa";
$ListAddress="/var/www/html/blocklist.txt";
]$ClientList=@('Xunlei','Thunder','-XL0012-','-DL3760-');
$ClientNoticed=0;

$CurrentPeers=transmission-remote --auth "$($Username):$($Password)" -t all -ip;
$CurrentPeers = $CurrentPeers.Trim() -replace '\s{2,}',',' | ConvertFrom-Csv;
$CurrentPeers = $CurrentPeers | Where-Object {$_.Address -ne "Address"};

$CurrentPeers | ForEach-Object{
    if( ($ClientList -contains $_.Client.split(' ')) -And !(Select-String -Path $ListAddress -Pattern "$($_.Address) -SimpleMatch -Quiet")){
    Write-Output "$($_.Address.ToString()) - $($_.Address.ToString()),0,$($_.Client.ToString())" >> $ListAddress;
    Write-Output "$($_.Address.ToString()) with $($_.Client.ToString()) Client detected, adding";
    $ClientNoticed=1;
    }
}

transmission-remote --auth "$($Username):$($Password)" --blocklist-update;
Write-Output "Blocklist Updated!";
$CurrentTorrents=transmission-remote --auth "$($Username):$($Password)" -t all -l| Select-Object -SkipLast 1 ;
$CurrentTorrents= $CurrentTorrents.Trim() -replace '\s{2,}',',' | ConvertFrom-Csv;
$CurrentTorrents | ForEach-Object {
    if( ($_.Status.ToString().Contains("Seeding")) -And ($ClientNoticed) ){
      transmission-remote --auth "$($Username):$($Password)" -t $($_.ID) -S;
    Write-Output "Torrent $($_.ID) stopped!";
      Start-Sleep -s 2;
      transmission-remote --auth "$($Username):$($Password)" -t $($_.ID) -s;
    Write-Output "Torrent $($_.ID) started!"
    }
}
}
这个是旧版本 不推荐#>

function TBTblocklist(){
#This function use ConvertFrom-SourceTable script!!!
$Username = "aaaaaaaaaaaa";
$Password="aaaaaaaaaaaaaaaaaa";
$ListAddress="/var/www/html/blocklist.txt";
]$ClientList=@('Xunlei','Thunder','-XL0012-','-DL3760-');

$CurrentTorrents=transmission-remote --auth "$($Username):$($Password)" -t all -l| Select-Object -SkipLast 1 ;
$CurrentTorrents= $CurrentTorrents.Trim() -replace '\s{2,}',',' | ConvertFrom-Csv;
$CurrentTorrents | ForEach-Object {
    $ClientNoticed=0;
    $CurrentPeers=transmission-remote --auth "$($Username):$($Password)" -t $($_.ID) -ip;
    $CurrentPeers = $CurrentPeers.Trim() -replace '\s{2,}',',' | ConvertFrom-Csv;
    $CurrentPeers = $CurrentPeers | Where-Object {$_.Address -ne "Address"};
    $CurrentPeers | ForEach-Object{
      if( ($ClientList -contains $_.Client.split(' ')) -And !(Select-String -Path $ListAddress -Pattern "$($_.Address) -SimpleMatch -Quiet")){
    Write-Output $_.Client      
    Write-Output "$($_.Address.ToString()) - $($_.Address.ToString()),0,$($_.Client.ToString())" >> $ListAddress;
      Write-Output "$($_.Address.ToString()) with $($_.Client.ToString()) Client detected, adding";
      $ClientNoticed=1;
      }
    }
    transmission-remote --auth "$($Username):$($Password)" --blocklist-update;
    Write-Output "Blocklist Updated For Torrent $($_.ID)";
    if( ($_.Status.ToString().Contains("Seeding")) -And ($ClientNoticed) ){
      transmission-remote --auth "$($Username):$($Password)" -t $($_.ID) -S;
      Write-Output "Torrent $($_.ID) stopped!";
      Start-Sleep -s 2;
      transmission-remote --auth "$($Username):$($Password)" -t $($_.ID) -s;
      Write-Output "Torrent $($_.ID) started!"
    }
}
}



这个是写成方程形式的Powershell版本, 实操是在Jetson Nano上, 版本是 Linux ARM64 7.0.3.
吐槽这个arm版本, 目录下面一堆dll, 解释器启动需要1s!
脚本的原理很简单, 本质上就是利用Powershell的特性, 先把plaintxt的外部输出里的分隔符(这里两个以上的空格都被我当成是分隔符了)换成逗号,

然后用CSV的方式将输出转化为PsObject的数组, 之后就是遍历数组, 该屏蔽的屏蔽, 该重启的重启,
因为我个人一般做种2.0之后就不做了, 后面还加了一个判断任务是否人为暂停的部分, 这样手动暂停的任务就不会被重开了.
ZSH的版本没有这个判断, 因为我写不出来.
原来这个to psobject的转换用的是iRon7大佬的ConvertFrom-SourceTable, 可惜种子任务右对齐的ID没法被正确的转换, 我就用了比较笨的CSV方法.

用这个脚本需要机器上安装一个web服务器, 脚本里的ListAddress就是只想服务器在本机的绝对目录的, 同时这个文件的url要写在Transmission的黑名单地址里.
脚本会自动让Transmission更新屏蔽列表, 同时重启符合条件的任务.
我直接用crontab定时了这个脚本, 基本上5min启停一次.

基本就是这样, 如果用的是Powershell版本的话, 你可以在屏蔽列表里面看到每一个ip用的都是什么客户端, zsh因为我不会写所以都是Autogen > <.
https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200718112725.png




yuuu 发表于 2020-7-18 11:42

求ut屏蔽迅雷的方法,每次给冷门种做种的时候看到列表里一堆XL0012吃满3M上传就像吃了苍蝇一样恶心

冰箱研会长 发表于 2020-7-18 11:46

本帖最后由 冰箱研会长 于 2020-7-20 08:36 编辑

yuuu 发表于 2020-7-18 11:42
求ut屏蔽迅雷的方法,每次给冷门种做种的时候看到列表里一堆XL0012吃满3M上传就像吃了苍蝇一样恶心 ...
兄弟别用UT了...现在ut是真正意义上的垃圾..
Linux 用Transmission , Deluge
Windows直接上比特彗星, 自带客户端屏蔽.
-------------
UT是有屏蔽脚本的...我一直以为那个是QT的脚本 > <
楼下有人发了 这里就编辑下

password 发表于 2020-7-18 12:36

yuuu 发表于 2020-7-18 11:42
求ut屏蔽迅雷的方法,每次给冷门种做种的时候看到列表里一堆XL0012吃满3M上传就像吃了苍蝇一样恶心 ...

最简单的方法是使用qBittorrent-Enhanced-Edition

whatd 发表于 2020-7-18 13:01

冰箱研会长 发表于 2020-7-18 11:46
兄弟别用UT了...现在ut是真正意义上的垃圾..
Linux 用Transmission , Deluge, Qt, 后两者都有人写屏蔽脚 ...

bitcomet都被人喊吸血了。

冰箱研会长 发表于 2020-7-18 13:08

whatd 发表于 2020-7-18 13:01
bitcomet都被人喊吸血了。

几百年谣传了 还是出口转内销的那种

rossokun 发表于 2020-7-18 13:42

yuuu 发表于 2020-7-18 11:42
求ut屏蔽迅雷的方法,每次给冷门种做种的时候看到列表里一堆XL0012吃满3M上传就像吃了苍蝇一样恶心 ...

https://github.com/ShenHongFei/utorrent-block-xunlei
需要uTorrent 3配合webui来用

—— 来自 Sony G8342, Android 9上的 S1Next-鹅版 v2.2.2.1

Ichthys 发表于 2020-7-18 15:06

yuuu 发表于 2020-7-18 15:22

rossokun 发表于 2020-7-18 13:42
https://github.com/ShenHongFei/utorrent-block-xunlei
需要uTorrent 3配合webui来用


谢了,我还是换吧

linux40 发表于 2020-7-18 15:37

只有remote能用啊。。。

冰箱研会长 发表于 2020-7-18 15:50

linux40 发表于 2020-7-18 15:37
只有remote能用啊。。。

一般情况下有webui的话都会有remote才对...
ubuntu的话那就是transmission-daemon这个版本的

冰箱研会长 发表于 2020-7-18 16:12

本帖最后由 冰箱研会长 于 2020-7-18 16:23 编辑

Ichthys 发表于 2020-7-18 15:06
tr我只用来挂pt,楼主能写个aria2的么
我本来打算明年年初fork一个来着(我以前发过帖子) 后来我就换Tr了...Aria2的计划就无限期搁置了
不过ARIA2是cli程序做本体, 理论上要比tr容易写.
----------------------
简单查了一下
https://github.com/ShenHongFei/utorrent-block-xunlei/issues/3
https://github.com/aria2/aria2/issues/1294

ARIA2似乎连blocklist都没有 那这种方法就彻底行不通了
等明年1月份吧, 我掂量掂量fork一支出来.

oskneo 发表于 2020-7-18 16:56

冰箱研会长 发表于 2020-7-18 11:46
兄弟别用UT了...现在ut是真正意义上的垃圾..
Linux 用Transmission , Deluge, Qt, 后两者都有人写屏蔽脚 ...

不是卫星更恶心吗,经常放一堆让别人用彗星的垃圾文件。
还是继续安心用ut,反正老版本没看到有啥缺点的。
说啥分享精神,连分享个迅雷都不爽

—— 来自 HUAWEI HDL-W09, Android 8.0.0上的 S1Next-鹅版 v2.2.2.1

冰箱研会长 发表于 2020-7-18 17:00

oskneo 发表于 2020-7-18 16:56
不是卫星更恶心吗,经常放一堆让别人用彗星的垃圾文件。
还是继续安心用ut,反正老版本没看到有啥缺点的 ...

彗星那个文件是老版本彗星才有的bug, 现在还说这个让人感觉回到2005.

至于分享精神...不分享给迅雷才是最符合"人人为我, 我为人人"的分享精神的.
我的带宽就那么多, 分享的总量基本是恒定的, 与其分享给根本没有分享精神的迅雷用户, 我当然要给那些至少有可能分享的正规BT用户.

这么简单的道理不用我详细讲吧?

BRS5672023 发表于 2020-7-18 21:24

一直用KDE的ktorrent下BT,不知道这个内置的“对等点卫士过滤器”有没有用,倒是没有手动屏蔽过对等点(一般也看不到xunlei的对等点)https://p.sda1.dev/0/8a7bade9cb83a1d20ab1d10eba9c6b88/IMG_C8CF0CCF2CCC73AFC425B929B71476D6.png

—— 来自 Xiaomi Mi MIX 2S, Android 10上的 S1Next-鹅版 v2.2.2.1

冰箱研会长 发表于 2020-7-19 06:47

BRS5672023 发表于 2020-7-18 21:24
一直用KDE的ktorrent下BT,不知道这个内置的“对等点卫士过滤器”有没有用,倒是没有手动屏蔽过对等点(一 ...

一般这类过滤器, 尤其是国外网站提供的文件, 都是针对一些恶意服务商的, 估计很少会对迅雷做优化吧.

暗影翔 发表于 2020-7-19 11:22

password 发表于 2020-7-18 12:36
最简单的方法是使用qBittorrent-Enhanced-Edition

qb的改版怕被ban,有类似上面的方法么?我都是开偏好加密

starrlit 发表于 2020-7-19 12:54

一个提议,反正最后都是调命令,不如用 python 来写逻辑,反正会用你这脚本的估计都有装 python。

冰箱研会长 发表于 2020-7-19 13:59

本帖最后由 冰箱研会长 于 2020-7-20 08:35 编辑

暗影翔 发表于 2020-7-19 11:22
qb的改版怕被ban,有类似上面的方法么?我都是开偏好加密
有 我这个脚本就是受UT脚本作者启发写的
不过被ban...头一次听说修改BT CLIENT被ban的, 都是正经开源的客户端, 被ban也太说不过去了 > <

冰箱研会长 发表于 2020-7-19 14:00

starrlit 发表于 2020-7-19 12:54
一个提议,反正最后都是调命令,不如用 python 来写逻辑,反正会用你这脚本的估计都有装 python。 ...

一开始是打算写python的(最初不知道remote的存在), 后来有remote, 外加我自己python主要是数值计算用的比较多, 和系统交互不是很会, 就直接写powershell版本了.

暗影翔 发表于 2020-7-19 15:16

冰箱研会长 发表于 2020-7-19 13:59
有 我这个脚本就是受Qb脚本作者启发写的
不过被ban...头一次听说修改BT CLIENT被ban的, 都是正经开源的客 ...

pt站肯定会限制客户端的。qb4.2.0-1就被u2ban了,2后来解了。肯定要用从客户端反馈数据没任何问题,只是自己这边ban了xl连接的。

冰箱研会长 发表于 2020-7-19 15:24

暗影翔 发表于 2020-7-19 15:16
pt站肯定会限制客户端的。qb4.2.0-1就被u2ban了,2后来解了。肯定要用从客户端反馈数据没任何问题,只是 ...

PT那就没办法了, 不过pt也不需要考虑迅雷吧。 我认识的人大部分都是PT BT分开用不同客户端的。

暗影翔 发表于 2020-7-19 15:25

冰箱研会长 发表于 2020-7-19 15:24
PT那就没办法了, 不过pt也不需要考虑迅雷吧。 我认识的人大部分都是PT BT分开用不同客户端的。
...

好吧

bonbonfox 发表于 2020-7-19 18:11

qb官版现在是不是会自动屏蔽迅雷了?以前黑方框xl00002之类的已经不见了,吸血的出现很快也会消失,我想应该不会是用户的自觉性提高了。。。

冰箱研会长 发表于 2020-7-19 18:21

bonbonfox 发表于 2020-7-19 18:11
qb官版现在是不是会自动屏蔽迅雷了?以前黑方框xl00002之类的已经不见了,吸血的出现很快也会消失,我想应 ...

不是很清楚 我只用过彗星,Aria2, Transmission, 不过很难想象官方release会为xunlei做优化...
也许是优化了反吸血机制吧

bonbonfox 发表于 2020-7-19 18:43

冰箱研会长 发表于 2020-7-19 18:21
不是很清楚 我只用过彗星,Aria2, Transmission, 不过很难想象官方release会为xunlei做优化...
也许是优化 ...

应该是反吸血,上个反应屏蔽xunlei的issue也没见怎么样,少看到吸血雷心情好不少。
虽说新版客户端应该都会自动屏蔽pt种子外网分享,不过还是单独一个管理比较舒服,ut221除了不能大种子用起来也挺好。

AirstripOne 发表于 2020-7-19 18:59

本帖最后由 AirstripOne 于 2020-7-19 19:03 编辑

其实根本不需要这么麻烦,又是读 API 又是判断又是加黑名单的,我这有个简单粗暴的法子,防火墙看到有迅雷两字就直接砍,奥利给!
iptables -I INPUT -p tcp -m string --string XL0012 --algo bm -j DROP
iptables -I INPUT -p udp -m string --string XL0012 --algo bm -j DROP
各路 BT 客户端通吃,同理把 XL0012 换成 Xunlei 和 Xfplay 再输一遍,列表里就彻底清净了。

starrlit 发表于 2020-7-19 21:36

AirstripOne 发表于 2020-7-19 18:59
其实根本不需要这么麻烦,又是读 API 又是判断又是加黑名单的,我这有个简单粗暴的法子,防火墙看到有迅雷 ...

确实奥利给
可每个包都扫描一遍会不会影响网速啊

—— 来自 Xiaomi MI 8, Android 10上的 S1Next-鹅版 v2.2.2.1

偶滴小乔 发表于 2020-7-19 21:46

yuuu 发表于 2020-7-18 11:42
求ut屏蔽迅雷的方法,每次给冷门种做种的时候看到列表里一堆XL0012吃满3M上传就像吃了苍蝇一样恶心 ...

https://github.com/ShenHongFei/utorrent-block-xunlei

之前有人写过,是从WEBUI里面读取数据,但是我用的WEBUI不显示上传列表,所以之前我试了没用

AirstripOne 发表于 2020-7-19 22:01

本帖最后由 AirstripOne 于 2020-7-19 22:02 编辑

starrlit 发表于 2020-7-19 21:36
确实奥利给
可每个包都扫描一遍会不会影响网速啊

两条规则而已,谈不上影响,我家里树莓派连着 100 Mbps 的带宽跑 BT,看不出肉眼可见的差别。

冰箱研会长 发表于 2020-7-20 15:44

AirstripOne 发表于 2020-7-19 18:59
其实根本不需要这么麻烦,又是读 API 又是判断又是加黑名单的,我这有个简单粗暴的法子,防火墙看到有迅雷 ...

兄弟你确定这个方法可以吗?

# Generated by iptables-save v1.6.1 on Mon Jul 20 15:41:55 2020
*filter
:INPUT DROP
:FORWARD DROP
:OUTPUT ACCEPT
:ufw-after-forward -
:ufw-after-input -
:ufw-after-logging-forward -
:ufw-after-logging-input -
:ufw-after-logging-output -
:ufw-after-output -
:ufw-before-forward -
:ufw-before-input -
:ufw-before-logging-forward -
:ufw-before-logging-input -
:ufw-before-logging-output -
:ufw-before-output -
:ufw-logging-allow -
:ufw-logging-deny -
:ufw-not-local -
:ufw-reject-forward -
:ufw-reject-input -
:ufw-reject-output -
:ufw-skip-to-policy-forward -
:ufw-skip-to-policy-input -
:ufw-skip-to-policy-output -
:ufw-track-forward -
:ufw-track-input -
:ufw-track-output -
:ufw-user-forward -
:ufw-user-input -
:ufw-user-limit -
:ufw-user-limit-accept -
:ufw-user-logging-forward -
:ufw-user-logging-input -
:ufw-user-logging-output -
:ufw-user-output -
-A INPUT -p udp -m string --string "DL3760" --algo bm --to 65535 -j DROP
-A INPUT -p tcp -m string --string "DL3760" --algo bm --to 65535 -j DROP
-A INPUT -p tcp -m string --string "Thunder" --algo bm --to 65535 -j DROP
-A INPUT -p udp -m string --string "Thunder" --algo bm --to 65535 -j DROP
-A INPUT -p udp -m string --string "Xunlei" --algo bm --to 65535 -j DROP
-A INPUT -p tcp -m string --string "Xunlei" --algo bm --to 65535 -j DROP
-A INPUT -p udp -m string --string "XL0012" --algo bm --to 65535 -j DROP
-A INPUT -p tcp -m string --string "XL0012" --algo bm --to 65535 -j DROP


上面是我当前的iptables-save, 遇见迅雷还是会上传.
现在基本都是加密传输, 防火墙可以解密匹配字符串吗?

AirstripOne 发表于 2020-7-20 18:45

本帖最后由 AirstripOne 于 2020-7-20 18:54 编辑

冰箱研会长 发表于 2020-7-20 15:44
防火墙可以解密匹配字符串吗?
不可以,需要关闭加密。所幸的是大部分客户端都没有默认加密或者强制加密,所以基本不会对使用产生影响。
我个人是允许加密的,但就算这样,我天天刷列表到现在,大概也就看到过一两次迅雷。
另外需要注意一下,IPv6 要用 ip6tables,不过语句都是一样的。

冰箱研会长 发表于 2020-7-20 19:22

本帖最后由 冰箱研会长 于 2020-7-20 19:27 编辑

AirstripOne 发表于 2020-7-20 18:45
不可以,需要关闭加密。所幸的是大部分客户端都没有默认加密或者强制加密,所以基本不会对使用产生影响。
...
> <
我列表里至少一大半是加密的客户端... 而且迅雷也有不少加密的 > <

https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200720192729.png

今天加入规则之后的收获有这么多 > <

暗影翔 发表于 2020-7-21 23:06

冰箱研会长 发表于 2020-7-19 15:24
PT那就没办法了, 不过pt也不需要考虑迅雷吧。 我认识的人大部分都是PT BT分开用不同客户端的。
...
尝试了找了别人打包的qbee,看了git上的issue,好像qbee无法跟原版qb共存。我是自己编译了一**-nox4.1.9.1用于pt、bt。

moondigi 发表于 2020-8-16 21:33

这个脚本又暂停又开始任务的感觉很麻烦,觉得用iptables配合ipset直接封掉ip更好
页: [1]
查看完整版本: Transmission屏蔽迅雷的脚本 > < 蹭蹭S1高权重