Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请问该脚本用于Windows系统该如何更改?小白求助大佬 #1

Closed
XingYueY opened this issue Sep 22, 2023 · 14 comments
Closed

Comments

@XingYueY
Copy link

由于设备原因只能用win10 LTSC x86,再加上安装软件比较方便。我打开了脚本看了下感觉不能直接应用于Windows,请问该如何进行修改呢?或者是有什么替代方案吗?求助大佬

@qianbinbin
Copy link
Owner

  1. Transmission 主要是 Linux 用的,Windows 有各种替代品,比如 qee
  2. 你可以尝试虚拟 Linux 环境,比如 WSL 或虚拟机,在 Linux 中运行 Transmission 和脚本
  3. 你也可以参考 Transmission 文档了解如何在 Windows 下使用黑名单,然后自己写一个脚本

@XingYueY
Copy link
Author

  1. Transmission 主要是 Linux 用的,Windows 有各种替代品,比如 qee
  2. 你可以尝试虚拟 Linux 环境,比如 WSL 或虚拟机,在 Linux 中运行 Transmission 和脚本
  3. 你也可以参考 Transmission 文档了解如何在 Windows 下使用黑名单,然后自己写一个脚本

Transmission可以在占用较小系统资源的情况下保种。qee我也在用,但是保种的话占用系统资源太多了。说实在的,现在使用qee下载,再用Tr保种是一个比较好的方案。如果大佬精力有限,或者是改这个基本需要重新编写了,那就算了吧。

感谢回复。

@XingYueY
Copy link
Author

  1. Transmission 主要是 Linux 用的,Windows 有各种替代品,比如 qee
  2. 你可以尝试虚拟 Linux 环境,比如 WSL 或虚拟机,在 Linux 中运行 Transmission 和脚本
  3. 你也可以参考 Transmission 文档了解如何在 Windows 下使用黑名单,然后自己写一个脚本

目前有个问题想请教下大佬,就是脚本中如何实现的屏蔽迅雷等客户端的呢?我英语不好,确实不知道该从哪里入手,麻烦大佬指点下,非常感谢。

@qianbinbin
Copy link
Owner

Transmission可以在占用较小系统资源的情况下保种。qee我也在用,但是保种的话占用系统资源太多了。说实在的,现在使用qee下载,再用Tr保种是一个比较好的方案。如果大佬精力有限,或者是改这个基本需要重新编写了,那就算了吧。

感谢回复。

最简单的方式是通过某种方式在 Linux 上运行。

这个脚本依赖 transmission-remote 这个工具,我看了一下,这个工具似乎没有现成的 Windows 版(存疑?),所以我前面提到的自己写一个 Windows 脚本可能不适用。

理论上可以在 Windows 上运行 GUI 版本的 Transmission,打开 remote access(需要确认有这个功能),然后在某个 Linux 环境通过 transmission-remote 控制它。配置得当的话,它俩可以不跑在同一个机器上。

@qianbinbin
Copy link
Owner

目前有个问题想请教下大佬,就是脚本中如何实现的屏蔽迅雷等客户端的呢?我英语不好,确实不知道该从哪里入手,麻烦大佬指点下,非常感谢。

原理大概是:

  1. 通过 transmission-remote 与 transmission 服务通信
  2. 不断轮询查看 transmission 服务是否连接了吸血客户端
    peers=$(transmission-remote "$HOST" --auth "$AUTH" --torrent "$1" --info-peers)
    leechers=$(echo "$peers" | grep -i "$pattern")
  3. 如果存在则将其 IP 写入黑名单文件里,并重启连接了吸血客户端的任务

Transmission 只支持 IP 屏蔽,需要手动重启任务,而且不支持屏蔽 IPv6。

@XingYueY
Copy link
Author

目前有个问题想请教下大佬,就是脚本中如何实现的屏蔽迅雷等客户端的呢?我英语不好,确实不知道该从哪里入手,麻烦大佬指点下,非常感谢。

原理大概是:

  1. 通过 transmission-remote 与 transmission 服务通信
  2. 不断轮询查看 transmission 服务是否连接了吸血客户端
    peers=$(transmission-remote "$HOST" --auth "$AUTH" --torrent "$1" --info-peers)
    leechers=$(echo "$peers" | grep -i "$pattern")
  3. 如果存在则将其 IP 写入黑名单文件里,并重启连接了吸血客户端的任务

Transmission 只支持 IP 屏蔽,需要手动重启任务,而且不支持屏蔽 IPv6。

好嘞,谢谢大佬鼎力帮助,感谢!

@qianbinbin
Copy link
Owner

我又查了一下,原来 Windows 版已经把命令行工具打包进去了😄,安装时要勾选这些命令行工具,你确认一下 transmission-remote 在不在里面
剩下的就是两个选择
一是就用这个脚本,修改 LIST 变量,这是黑名单文件的路径,然后找个 Shell 环境,WSL、Cygwin、Git Bash 估计都可以
二是自己用 Python、BAT、PowerShell 等写一个,原理也不复杂

@XingYueY
Copy link
Author

我又查了一下,原来 Windows 版已经把命令行工具打包进去了😄,安装时要勾选这些命令行工具,你确认一下 transmission-remote 在不在里面
剩下的就是两个选择
一是就用这个脚本,修改 LIST 变量,这是黑名单文件的路径,然后找个 Shell 环境,WSL、Cygwin、Git Bash 估计都可以
二是自己用 Python、BAT、PowerShell 等写一个,原理也不复杂

好嘞大佬,非常感谢!👍

@XingYueY
Copy link
Author

XingYueY commented Sep 27, 2023

经过大佬的指点和个人的摸索,目前使用该脚本需要进行如下更改

首先,安装Transmission过程中需要勾选“Command-line tools”选项,将其选为“Will be installed on local hard drive”,安装后将Transmission安装目录加入环境变量,便于后续调取。

然后,安装可以运行shell脚本(就是.sh脚本)的环境,推荐git(目前试验成功,其他的应该差不多)。如果安装git,可以手动将git安装目录下的bin文件夹加入环境变量,便于直接打开脚本(也可以不设置,省事的话建议这么做)。

下一步,打开C:\Windows\ServiceProfiles\LocalService\AppData\Local\transmission-daemon\blocklists路径,在里面新建一个名为blocklist.txt的文件(也可以新建别的名称的文件,就是得修改我所上传的脚本,也可以使用网上已有的blocklist)。如果需要配置web UI或需要设置其他参数,这个文件夹不要关闭(关了也没事,就是这文件夹不好找,使用自带的GUI设置那些参数没用,需要关闭Transmission Daemon服务后手动修改transmission-daemon文件夹里的setting,当时设置web UI的时候差点没把我整懵)。

最后,下载这条回复所上传的pdf
trans-block.pdf
,将文件后缀改为sh,就可以按照大佬前面所说的使用步骤去使用就可以了。注意:运行脚本的时候需要 右键-以管理员身份运行 ,不然脚本报错无效!!!!如果对代码不放心,可以对照下大佬的代码,看看我改了哪里,大框架没动。

@qianbinbin
Copy link
Owner

qianbinbin commented Sep 27, 2023

我没有 Windows 设备,感谢 @XingYueY 的修改和测试。

blocklists 目录下的 .txt 文件,实际上可以不用自己创建,脚本会自动生成。网上的 blocklist 有时会把一些正常的机房 IP 包括在里面。

另外,

# reload: https://github.com/transmission/transmission/blob/main/docs/Editing-Configuration-Files.md#reload-settings
killall -HUP transmission-daemon

这里的作用是向 daemon 发送 SIGHUP 信号,让 Transmission 重新加载(reload)配置,也会重新载入黑名单,.bin 文件也会重新生成,但不会关闭进程。

根据 @XingYueY 的反馈,Git Bash 似乎不能使用 killall 命令,所以改成了重启 daemon:

  net stop "Transmission Daemon"
  sleep 2
  net start "Transmission Daemon"

我个人的经验是,重启单个任务就已经比较耗时了,尤其是打开文件比较多且硬盘速度比较慢的时候,可能会失败,所以我在重启单个任务时有重试的操作。如果频繁重启整个 daemon,合理推测是有一定概率失败的,当然如果打开文件不多或硬盘速度不错的话可能不会有这个问题。

Windows 上好像也没有与 Linux 类似的信号机制,我也不清楚如何在不关闭进程的情况下让 daemon 重新加载。

供参考。

@qianbinbin qianbinbin pinned this issue Sep 27, 2023
@XingYueY
Copy link
Author

XingYueY commented Oct 5, 2023

关于 @qianbinbin 前面提到的重启整个 daemon 可能会出现失败的可能,这个问题目前已经出现了,所幸的是这个问题会导致 daemon 重启过程中无法自动启动,需要手动启动 daemon ,并且并不常见(N2600小主机,win10 x86 LTSC2019,大概每天会出现一次这个问题)。

近期我留意到了 @GrandArth 在知乎的一篇2020年的专栏https://zhuanlan.zhihu.com/p/158711236,里面使用transmission-remote --auth $Username:$Password --blocklist-update指令来更新 blocklist,从而重新载入 blocklist 。不过该方法需要使用HFS(Http File Server,HTTP文件分享软件,类似的可以网址访问的分享方式也行)将 blocklists 目录下的 .txt 文件列为分享,然后将分享文件的网址(http://xxx.xxx/xxx.txt)作为黑名单列表的更新地址。这样就可以让Transmission调用自己的blocklist并自行更新 bin 文件,无需重启整个 daemon ,从而提高对低性能设备的兼容性。

目前运行一段时间表现良好,该思路可供参考。

@qianbinbin
Copy link
Owner

HTTP 服务这个方法确实可行(只是 Linux 上没有必要,你的小主机跑 Linux 的话非常合适),Windows 上既然不能 reload,就可以用这个方法,比重启好很多。

其实,用原来的方法应该也不一定要手动重启。比如,如果 transmission-remote 命令符合规范的话,可以用返回值来检查是否关闭/启动成功,一般返回值为 0 表示成功,其他则为失败,不过我不确定是否规范,仅供参考。再比如脚本里用 ps 之类的命令查询 transmission-daemon 是否在运行,隔 5 秒查询一次,不行就重试。

@XingYueY
Copy link
Author

XingYueY commented Oct 5, 2023

好嘞,谢谢大佬!
我这个小主机bios层面有限制,装Linux我试了没成功,不知道什么原因,就只是装了Windows(虽然不如Linux好用,但目前够我用的,后期再升级其他平台)。

关于HTTP服务,如果用HFS需要注意端口问题,HFS的默认端口和qee默认端口相同,注意改一下(如果改HFS的话,记得前面的网址也更新下)。

@XingYueY
Copy link
Author

XingYueY commented Nov 23, 2023

补充一个小概率触发的恶性bug,主要影响HFS更新blocklist。

rm -f "$LIST"

需要将此句改为:
echo "" > "$LIST"
否则可能造成HFS在检测时因无法检测到被删除的blocklist而导致更新失败的恶性bug(同样还有较小概率导致脚本对于blocklist.txt的修改产生乱码)。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants