吸血客户端收集与解决方法

目前已发现滥用比特彗星进行循环下载的IP段

223.78.79.0/24
223.78.80.0/24
2409:873c:f03:6000::/56

使用 18550 和 15685 端口

建议在Windows防火墙中屏蔽该地址段或通过下列网址查询其正在下载的任务
以避免浪费上传量




emmm

他这个默认的配置文件里少了一个启用Basic认证
要手动加一下


内个,我加了呀:rofl::rofl::rofl:

并且GitHub仓库不是说启用UseBasicAuth嘛

下的是哪个版本?

clientURL项地址要加 http:// 或 https:// 吧?


是的
不过我倒是建议优先使用彗星自己的反吸血

1個讚

最新的3.3b6

能不能直接发一个config.json给我研究一下:blush::blush::blush:,感觉给bitcomet配置比给qbee麻烦

重点是自带的peerid屏蔽不支持正则表达式,也不支持屏蔽fdm那种不符合peerid规范的peerid,客户端列表也是直接一刀切,不允许输入自定义clientid来屏蔽

没什么好研究的,下面都是默认的没动,我目前也不用这个反吸血…
image

我只是好奇那个 execCommand_*命令怎么用:rofl::rofl::rofl:

本来是要进行测试的
用于拦截那些伪装成比特彗星的客户端
但之后确认那些IP段上的是正常的比特彗星 只是被滥用 用于刷流
而且防火墙规则我也没研究好 就这样搁置下来了

有一些边下边播的软件好像会用这个,标识是MO3000(比特彗星显示为n/a),一般会做种…可以选择性屏蔽。

有做种阶段的话其实还好

Taipei Torrent

其本身应该是正常客户端 但遭到滥用

通过命令操作Windows防火墙实现全自动/半自动的批量IP屏蔽

在较早的教程中我们通过调整比特彗星的反吸血设置
来屏蔽吸血客户端

比特彗星常见问题-屏蔽吸血客户端和设置自动反吸血 - 哔哩哔哩

但是这种方法并不能很有效的屏蔽被滥用的正常客户端
更好的方法是使用Windows防火墙进行屏蔽

而在之前的教程中我们又介绍了手动编辑防火墙规则
来屏蔽IP的方法 不过这个方法无法实现自动化

吸血客户端收集与解决方法 - #3 ie12

更好的方法是使用命令来控制Windows防火墙

远程动态关键字地址

在win10和更高版本中引入了一种名为 远程动态关键字地址 的新变量(RemoteDynamicKeywordAddresses)
下文中简称为动态关键字

微软文档:
RemoteDynamicKeywordAddresses
New-NetFirewallRule (NetSecurity) | Microsoft Learn

创建动态关键字
New-NetFirewallDynamicKeywordAddress (NetSecurity) | Microsoft Learn

我们可以将想要屏蔽的IP地址(段)写入创建动态关键字
再将其绑定到一条或多条防火墙规则上
当我们需要修改屏蔽IP(段时只需要修改这个动态关键字即可

比直接修改防火墙规则更加方便而且几乎没有IP数量限制

感谢泥浆提供的脚本支持

使用动态关键字的配置方法

打开powershell
生成 GUID

New-Guid

复制ID
创建防火墙规则并绑定动态关键字

入站规则

New-NetFirewallRule -DisplayName “规则名称” -Direction Inbound -Action Block -Program "BT客户端路径" -RemoteDynamicKeywordAddresses "{GUID}"

出站规则

New-NetFirewallRule -DisplayName “规则名称” -Direction Outbound -Action Block -Program "BT客户端路径" -RemoteDynamicKeywordAddresses "{GUID}"

示例

New-NetFirewallRule -DisplayName “BT_BC_BAN_IN” -Direction Inbound -Action Block -Program "C:\BitComet_2.07\BitComet_x64.exe" -RemoteDynamicKeywordAddresses "{3817fa89-3f21-49ca-a4a4-80541ddf7465}"

New-NetFirewallRule -DisplayName “BT_BC_BAN_OUT” -Direction Outbound -Action Block -Program "C:\BitComet_2.07\BitComet_x64.exe" -RemoteDynamicKeywordAddresses "{3817fa89-3f21-49ca-a4a4-80541ddf7465}"


接下来创建动态关键字
将想要屏蔽的IP地址(段)写入一个文本文件
每行一个地址段 支持 单IP CIDR 子网掩码以及IP范围

示例

1.1.1.1
223.78.79.0-223.78.79.255
223.78.80.0/24
2409:873c:f03:6000::/56
8.8.8.0/255.255.255.0

运行命令

New-NetFirewallDynamicKeywordAddress -Id "{GUDI}" -Keyword "名字" -Addresses (Get-Content IP列表文件路径 -Raw ).Replace("`r`n",",")

示例

New-NetFirewallDynamicKeywordAddress -Id "{3817fa89-3f21-49ca-a4a4-80541ddf7465}" -Keyword "BANIP" -Addresses (Get-Content C:\ip.txt -Raw ).Replace("`r`n",",")

运行成功后会显示出规则内容

这样我们就完成了防火墙规则和动态关键字的创建
若IP列表有更新则只需要更新动态关键字即可

更新动态关键字

先移除旧的关键字

Remove-NetFirewallDynamicKeywordAddress -Id "{GUID}"

示例

Remove-NetFirewallDynamicKeywordAddress -Id "{3817fa89-3f21-49ca-a4a4-80541ddf7465}"

再生成新的关键字
命令和之前创建的一样
其GUID要和之前绑定在防火墙规则中的相同

New-NetFirewallDynamicKeywordAddress -Id "{GUDI}" -Keyword "便于识别的名称" -Addresses (Get-Content IP列表文件路径 -Raw ).Replace("`r`n",",")

示例

New-NetFirewallDynamicKeywordAddress -Id "{3817fa89-3f21-49ca-a4a4-80541ddf7465}" -Keyword "BANIP" -Addresses (Get-Content C:\ip.txt -Raw ).Replace("`r`n",",")

查看已经创建的关键字

Get-NetFirewallDynamicKeywordAddress

懒人脚本

保存为批处理文件后就可以直接使用
仅需要修改 客户端和IP列表的路径即可

@echo off
set BTEXE="C:\Program Files\BitComet\BitComet.exe"
set IPFILE="C:\ip.txt"
set DYKWID="{3817fa89-3f21-49ca-a4a4-80541ddf7465}"

netsh advfirewall firewall delete rule name="BT_BAN_IPLIST" >nul
powershell.exe "New-NetFirewallRule -DisplayName "BT_BAN_IPLIST" -Direction Inbound -Action Block -Program '%BTEXE%' -RemoteDynamicKeywordAddresses '%DYKWID%'"
powershell.exe "New-NetFirewallRule -DisplayName "BT_BAN_IPLIST" -Direction Outbound -Action Block -Program '%BTEXE%' -RemoteDynamicKeywordAddresses '%DYKWID%'"
powershell.exe "Remove-NetFirewallDynamicKeywordAddress -Id '%DYKWID%'" >nul
powershell.exe "New-NetFirewallDynamicKeywordAddress -Id '%DYKWID%' -Keyword "BT_BAN_IPLIST" -Addresses (Get-Content '%IPFILE%' -Raw).Replace(\"`r`n\",\",\")"

pause

这样我们就实现了自动/半自动的更新规则
可以配合外置的一些反吸血软件或其他可输出想要屏蔽IP列表的软件使用

在防火墙管理工具中查看规则

使用命令行毕竟不是很直观
删除规则的时候可以直接使用高级Windows防火墙的管理工具
有时候可能会报错 显示无法删除 但是实际其实是可以删掉的

除此之外图形界面的管理工具并不能显示出动态关键字
所以使用动态关键字的规则看起来像是屏蔽了所有的IP

在win7上使用

win7其实是不支持动态关键字的 我们只能直接操作防火墙规则
使用较旧的 netsh advfirewall 命令

每条防火墙规则只能容纳 1000个IP(段)
参考:security - Is there a limit to the number of IP addresses for a Windows Firewall rule's Scope? - Super User

不过用于吸血IP的屏蔽还是足够的
这里也给出自动化脚本其使用方法和之前的是一样的

@echo off
setlocal enabledelayedexpansion

set BTEXE="C:\Program Files\BitComet\BitComet.exe"
set IPFILE="C:\ip.txt"

FOR /F %%i in ('type %IPFILE%') do set IPLIST=!IPLIST!%%i,

netsh advfirewall firewall delete rule name="BT_BAN_IPLIST" >nul
netsh advfirewall firewall add rule name="BT_BAN_IPLIST" dir=in action=block program=%BTEXE%
netsh advfirewall firewall add rule name="BT_BAN_IPLIST" dir=out action=block program=%BTEXE%
netsh advfirewall firewall set rule name="BT_BAN_IPLIST" new remoteip=%IPLIST%

pause

屏蔽指定地区的所有IP

由于动态关键字几乎支持无限数量的IP地址(段)
仅用于反一般的反吸血有些大材小用

我们还可以使用其屏蔽/允许指定地区的IP
这不仅适用于BT客户端 也可以用于 web站点 或者 远程桌面/登录

在IP2location上可以下载到指定地区的IP列表

可以将这些地址以上文中方法添加到动态关键字中
即可实现屏蔽或允许的效果 格式建议选择CIRD格式
注意要转换一下换行符 其符默认为UNIX换行符

不过这样一来IP(段)非常的多使用批处理效率可能不是很高
更好的方法是直接运行powershell脚本

不过win的默认安全策略并不运行直接运行PS脚本
虽然可以修改安全策略但更简的方法
是过批处理附加参数的方式间接运行

示例

powershell -ExecutionPolicy Bypass "C:\BT_BAN_IPLIST.ps1"

powershell 脚本

$BTEXE="C:\Program Files\BitComet\BitComet.exe"
$IPFILE="C:\ip.txt"
$DYKWID="{3817fa89-3f21-49ca-a4a4-80541ddf7465}"

$RULES=(Get-NetFirewallRule -DisplayName "BT_BAN_IPLIST" -ErrorAction Ignore)

$SET_RULES = {
	Remove-NetFirewallRule -DisplayName "BT_BAN_IPLIST" -ErrorAction Ignore
	New-NetFirewallRule -DisplayName "BT_BAN_IPLIST" -Direction Inbound -Action Block -Program $BTEXE -RemoteDynamicKeywordAddresses $DYKWID | Out-Null
	New-NetFirewallRule -DisplayName "BT_BAN_IPLIST" -Direction Outbound -Action Block -Program $BTEXE -RemoteDynamicKeywordAddresses $DYKWID | Out-Null
}

if (($RULES | Out-String -Stream | Select-String -SimpleMatch $DYKWID).Count -ne 2) {
	&$SET_RULES
}
elseif (($RULES | Get-NetFirewallApplicationFilter | Out-String -Stream | Select-String -SimpleMatch $BTEXE).Count -ne 2) {
	&$SET_RULES
}
elseif (($RULES | Out-String -Stream | Select-String -SimpleMatch Inbound).Count -ne 1) {
	&$SET_RULES
}

if (Get-NetFirewallDynamicKeywordAddress -Id $DYKWID -ErrorAction Ignore) {
	Update-NetFirewallDynamicKeywordAddress -Id $DYKWID -Addresses (Get-Content -Raw $IPFILE).Replace("`r`n",",") | Out-Null
}
else {
	New-NetFirewallDynamicKeywordAddress -Id $DYKWID -Keyword "BT_BAN_IPLIST" -Addresses (Get-Content -Raw $IPFILE).Replace("`r`n",",") | Out-Null
}
1個讚