「LUCKY STUN穿透」使用脚本自动修改比特彗星的监听端口
2024.12.05
在之前的教程中我们已经实现了 为qbittorrent 和 Transmission 自动更换监听端口
而在本教程中将讲解如何自动化的更换 比特彗星 的监听端口
在2.10版本中比特彗星更新 WebUI 其提供了更换监听端口的接口
这使得使用脚本自动化的更换端口成为了可能
由于Windows批处理自身的限制 以及 BC API的一些特性
使其相对于qb和Tr的更新方法会更复杂一些
比特彗星 Web API接口定义:链接
有关 curl 的安装 和部分lucky的设置方法
在之前的教程中已经讲解过本文中不再赘述
建议先阅读之前的教程
检查比特彗星版本
要想使用此更新方法则比特彗星的版本要大于等于2.10
检查软件版本号
获取认证令牌
使用新式API接口 需要令牌进行验证
其可以从新版WebUI的请求中获取到令牌 其长期有效
登录新版 WebUI
启用 远程下载 设置 用户名和密码 并检查端口号
先登录到旧版 再通过下方的链接跳转到新版WebUI
显示出新版 WebUI 后需要再次登录
检视HTTP请求
登录到新版 WebUI 后即可通过开发人员选项
查看HTTP请求获取用于验证的令牌
打开 开发人员选项(F12)选择任意请求
查看 请求标头 寻找 Authorization 字段
以 Bearer开头的部分即为令牌 复制 Bearer 之后的字符
编辑和设置自动更新脚本
在获取完成令牌后就可以开始编辑更新脚本了
与之前教程中的一样先手动创建并运行批处理 进行测试
确保可用后再填入lucky stun 的自定义脚本中
感谢 泥浆 提供的脚本支持
示例
set TOKEN=YOUR_TOKEN
set WEBUI=http://127.0.0.1:1235
for /F %%a in ('curl -Lks "%WEBUI%/api/config/connection/get" -H "Authorization: Bearer %TOKEN%" -H "Client-Type: BitComet WebUI"') do (set BODY=%%a)
set PORTSTR=%BODY:*"listen_port_tcp":=%
set OLDPORT=%PORTSTR:~0,4%
echo %PORTSTR:~0,5%| findstr "^[0-9]*$" >nul && set OLDPORT=%PORTSTR:~0,5%
call set BODY=%%BODY:"listen_port_tcp":%OLDPORT%="listen_port_tcp":${port}%%
curl -Lks "%WEBUI%/api/config/connection/set" -H "Authorization: Bearer %TOKEN%" -H "Client-Type: BitComet WebUI" -d %BODY:"=\"%
按照实际情况修改脚本
将刚才获取的token填入其中
修改WebUI参数的地址和端口 为比特彗星实际使用的端口
若lucky和比特彗星在同一设备上则使用127.0.0.1即可
若不在同一设备上填写则BC所在设备的局域网地址
若lucky运行在docker容器中 也建议使用局域网地址
因为是手动测试 我们需要暂时将 预备给lucky传递端口的变量
${port}替换成直接的端口号
测试端口号可以任意填写 但不要低于4位数
最后加上 pause 保持窗口以便于检视运行效果
示例
测试效果
运行刚才保存好的批处理文件 检查输出效果
若设置都正确 则可以看到脚本成功获取到了旧的端口号
并成功的提交了新端口 与此同时BC弹出了设置更新的通知
在STUN穿透中设置脚本
在测试完成后就可以将其写到STUN穿透规则中
将之前换掉的端口变量换回来 并去掉最后的 pause
示例
若设置都正确则STUN规则在穿透成功后
其会自动的修改BC的监听端口 BC也会在右下角弹出通知
检视STUN穿透日志
在Linux设备上进行更新
若lucky运行在Linux设备上(含docker) 则需要通过shell脚本进行更新
得益于其更强大的功能 使用sh脚本进行更新会更加简单
示例
TOKEN=YOUR_TOKEN
WEBUI=http://127.0.0.1:12345
BODY=$(curl -Lks "$WEBUI/api/config/connection/get" -H "Authorization: Bearer $TOKEN" -H "Client-Type: BitComet WebUI" | sed -E 's/"listen_port_tcp":[0-9]{1,5}/"listen_port_tcp":'${port}'/')
curl -Lks "$WEBUI/api/config/connection/set" -H "Authorization: Bearer $TOKEN" -H "Client-Type: BitComet WebUI" -d $BODY