在前一篇文章中,我们介绍了在 NAS 上安装青龙面板跑任务的方法:让 NAS 自己赚电费:安装青龙脚本面板,订阅流行脚本,薅羊毛停不下来。
青龙面板是一个脚本任务管理平台,可以帮助我们定时的执行你所配置的脚本任务。我们可以自己开发脚本任务并上传配置到青龙面板中,也可以从互联网上订阅他人开发编写的通用型脚本任务,达到如对常见应用的自动签到、领取奖励、定时推送消息等目的。执行这些脚本任务可能会涉及账号登录或认证,其所需的账号认证信息,则需要按脚本任务的具体规则要求去配置,并在失效时及时更新。
但是用青龙面板跑过脚本的朋友应该都知道:许多本身不错的脚本任务,其账号认证所需参数存在获取难度高、有效期较短的问题,频繁的手动更新比较麻烦。这使得跑这些脚本的人工成本非常高。CK 认证信息获取难、过期快是劝退大家的主要原因之一。
下面介绍一种基于代理工具 whistle
与插件拦截网络请求,实现自动提取并同步 CK 认证信息至青龙面板的方法。
1 代理工具软件 whistle
与插件 @lzwme/whistle.x-scripts
简介
提示:此章节为背景与原理介绍,若无兴趣可直接跳过
在获取脚本运行所需的账号认证信息时,基本都会用到代理工具,常见的如 WireShark、fiddler、charles、whistle、burpsuite、mitmproxy 等等,它们功能都十分强大。whistle
也是一个与之功能相似的代理工具,它基于 Node.js
使用 JavaScript 开发,并支持强大的插件扩展能力。
我在基于个人研究学习等目的的基础上,开发了一个插件 @lzwme/whistle.x-scripts
,以方便可以自定义的对网络请求做过滤审查,分析提取一些有意思的东西。该插件设计了一套针对网络请求过滤与匹配的规则,将常见的通用处理参数配置化,可以用编写配置规则的方式,简化对网络请求拦截与处理的复杂度。
在拥有个人 NAS 并使用上青龙面板后,为了解决 CK 获取难题,我对该插件进一步扩展,针对青龙面板做了一些功能定制,可以通过编写简单的脚本规则的方式提取 CK 并同步到青龙面板的环境变量中。
需要说明的是,代理软件 whistle
和插件 @lzwme/whistle.x-scripts
都是开源的,可以接受任何代码安全审查,所有代码都可以从 GitHub 下载到:
此外,针对当前较为热门的一些青龙脚本任务编写了对应的 CK 提取规则脚本,也开源在了 GitHub 中:
2 安装与配置代理软件自动获取 CK 上传到青龙面板的方法
2.1 使用个人电脑安装与配置的方法与步骤
首先需要在电脑上安装 Node.js
。到其官方下载并安装:https://nodejs.org
然后新建一个本地目录(如 D:\code
),打开 cmd
命令提示符并进入到该目录(可以在文件夹的地址输入栏直接输入 cmd 并按回车键,快速打开并进入该目录),执行如下命令:
# 进入 code 目录下 cd d:\code # 设置 npm 使用国内镜像 npm config set registry https://registry.npmmirror.com # 全局安装 whistle 和插件 @lzwme/whistle.x-scripts npm i -g whistle @lzwme/whistle.x-scripts # 拉取脚本规则仓库 x-scripts-rules git clone https://github.com/lzwme/x-scripts-rules
在目录下新建一个名称为 w2.x-scripts.config.js
的配置文件,内容参考如下:
/** @type {import('@lzwme/whistle.x-scripts').W2XScriptsConfig} */ const config = { // 日志级别,默认为 info logType: 'log', // 青龙面板相关的配置 ql: { // 青龙面板的访问地址 host: 'http://127.0.0.1:5700', // 访问青龙面板的 ID。获取方式:青龙面板 - 系统设置 - 应用设置 - 创建应用,权限选择“环境变量”和“定时任务” clientId: 'qQk-EHQwwxxxx', // 访问青龙面板 ID 的密钥:获取方式同 clientId clientSecret: 'EnEEqh_o1Dk-Aj3lv0l5xxxx', }, /** 指定自定义脚本规则存放的位置。您可以在该目录下放自己编写的脚本规则文件 */ ruleDirs: ['./local-scripts-rules'], /** 自定义的脚本规则 */ rules: [], }; module.exports = config;
注意参考其中关于青龙面板的配置部分说明,修改为您实际的取值。创建并获取 clientId
与 clientSecret
的方法可参考下图:
最后在 cmd 命令提示符中执行如下命令启动代理软件:
# 后台启动方式,执行后关闭 cmd 也不会停止 w2 start -M capture # 也可以用监听模式启动,此模式下,关闭 cmd 后代理软件也会跟着停止 w2 run -M capture
经过以上操作,就完成了基本的安装与配置操作。
通过访问地址 http://本机IP:8899
,可以打开代理软件的管理页面,可以在这里看到所有配置走该代理服务的网络请求。该代理服务的地址为 本地IP
,端口号为 8899
。
2.2 通过电脑访问目标网站或小程序获取 CK 的方法
若您按照上面的步骤在当前电脑上进行了安装配置,则可以继续做如下操作。
首先执行如下命令以配置电脑的全局代理:
# 安装 whistle 证书到系统,以便可以抓取并解析 https 包 w2 ca # 设置本机上 whistle 启动的代理地址为本机全局代理 w2 proxy
最后,在电脑上正常访问如京东 PC 版、已支持 CK 抓取的微信小程序等,即可自动同步 CK 到青龙面板的“环境变量”中。
注意:当不再需要时记得关闭全局代理的设置,否则若代理停止时就上不了网了。
关闭本机 whistle
代理的命令为:
w2 proxy off
2.3 基于青龙面板脚本快速安装与配置的方法
我写了一个青龙脚本任务,用来在青龙面板上快速安装与配置 whistle
和 @lzwme/whistle.x-scripts
,并拉取脚本规则仓库 x-scripts-rules
。
如果觉得通过 PC 安装和配置的流程较为繁琐,可以参考以下步骤订阅该脚本。
首先,通过青龙面板的“订阅管理”,添加订阅该仓库(不支持单个脚本的订阅,若不需要其他脚本任务可自行禁用):
ql repo https://github.com/lzwme/ql-scripts.git "ql_|ql-" "backup|todo|deprecated" "utils" "" "js ts"
然后到“任务管理”里找到名称为 whistle.x-scripts 插件安装与更新
的任务,执行它即可。若一切顺利,将会在青龙面板完成全部的安装和配置。
该脚本任务会创建默认的配置文件:
/ql/data/scripts/whistle/w2.x-scripts.config.js
若是 docker 安装,可到对应映射的目录中找到它。如果你的青龙面板是采用默认配置安装的,原则上不需要做特别的配置改动,否则请参考其中有关青龙面板配置的注释说明,按实际情况进行修改。该文件在修改发生变化时会自动更新加载。
此外需注意,如果是基于 docker 安装的青龙面板,记得给该容器增加 8899:8899
的端口映射配置参数。
最后,通过访问地址 http://青龙面板IP:8899
,可以打开代理软件的管理页面。该代理服务的地址为 青龙面板IP
,端口号为 8899
。
2.4 手机设置代理,同步手机访问 CK 到青龙面板
whistle
启动的代理地址为启动服务的机器 IP
,默认端口为 8899
。手机设置代理的方法因不同系统而有所差异,可参考官方文档进行设置:
基本步骤为:
- 打开手机自带的浏览器,访问
http://开代理的机器IP:8899
下载证书
:点击顶部的“HTTPS -> Download RootCA”安装证书
:根据自己的手机型号,自行查找安装自定义证书的方法配置代理
:根据自己的手机型号,自行查找配置代理的方法
在设置代理成功后,通过手机访问如京东、微信小程序等,访问过程中若抓取到 CK 即会同步到青龙面板环境变量中。
需注意的是,当前一些 APP 对代理设置做了检测,当设置了代理并启用自定义证书拦截 https 请求时,则可能会无法正常使用。一般来说在 iOS 系统里对代理设置相对较为友好;Android 系统上绝大多数 APP 都会有检测代理自定义证书的行为,而且 Android 系统自带浏览器和应用也基本都默认不信任安装的自定义证书,抓包难度要大上许多(京东 APP 仍可在设置代理时访问,但多开应用会报错 )。
2.5 自行编写提取 CK 脚本规则的方法
通过以上配置,会拉取 x-scripts-rules
规则脚本库,其中维护了部分流行脚本的 CK 提取规则。
若你有其他自定义提取需求,可以参考相关文档和示例编写私有的脚本规则文件,放到与配置文件同目录下的 local-scripts-rules
目录下,即可被插件扫描和加载,而且发生变更时也会即时更新。
3 其他注意事项及说明
- 当代理关闭时,记得同时取消电脑和手机等设备上的代理设置,否则就上不了网了。
- 开启代理时会拦截网络请求进行处理,所以可能会出现网络变慢、卡顿等现象。若不需要时可以关闭代理配置。
- 小技巧:当前家庭路由器大都支持同时设置 2.4G 和 5G 两个 Wi-Fi,可以将它们设置为不同的名称分别连接,仅在连 2.4G 的 Wi-Fi 时设置代理。这样就可以在通过切换手机连接 Wi-Fi 的方式,快速切换手机网络是否走代理模式了。
- 实践经验:青龙面板上配置的代理服务稳定性不如 PC,当出现走代理时出现网络无法访问的情况,可先关闭代理设置或更换网络,在青龙面板上手动执行一下
whistle.x-scripts 插件安装与更新
任务以达到重启服务的目的。
4 免责说明
- 本文介绍的内容仅适用于基于技术的研究学习交流目的,请勿用于商业用途、任何恶意目的,否则后果自负。
- 请自行评估本文中提及的软件、仓库和源码的安全性和合法性。您应当在下载研究学习完毕后立即删除它们。本人对使用它们引发的任何问题概不负责,包括但不限于由脚本错误引起的任何损失或损害。
https无法开启,报错[403] Forbidden.
https开启不了了,如图,报错
终于搞定了,兄弟感谢!我来总结一下过程避免其他人踩坑:
1、无论docker模式还是电脑等,如想手机走代理自动截获ck,手机必须安装whistle的证书,注意,是必须,否则https流量无法截取。另外,手机装证书,也有可能系统不认(例如MIUI),看上去装了实际没效果,这时候就需要root的系统装magisk后装MoveCertificate模块,它会自动把用户安装证书变成系统根证书。
2、作者提供的教材和github上有些出入,例如日志变量名、脚本路径、脚本文件名等,需要自己有一定的代码识别能力,否则只能等作者自己修啦。
3、从github拉包一定要完整,如不完整自己手动拉也行,放入脚本目录,注意目录名。
4、如果是用的群晖内的docker,且跑在青龙内,一定不能改代理的8899端口,否则无法正常代理,都不能访问。
PS:
非常感谢作者,提供如此方便的工具,省了大力气了!
另外,为了安全,手机上装的证书用完就卸载了,也不知道whistle的证书是否安全,毕竟开源,还是担心啊。。。。有无更好的方式?例如做成magisk模块,用的时候启用,不用的时候关闭即可?
Android安装证书拦截HTTPS流量是比较复杂一些。whistle的证书是首次使用时生成的,每台设备都不一样,可以去查阅一下其代码逻辑了解。另外它也支持启动时指定自定义证书,具体可以去看一下其官方文档
明白,但不妨碍做成magisk的模块来使用,方便些,已经提建议给官方了。另外,美团v3自动截获有问题,截获的内容是错的。
奇怪了,拦截规则就是不工作啊,日志内也没看到什么提示,显示最后一行[2024-08-31 18:00:12.519][X-SCRIPTS][info] @lzwme/whistle.x-scripts 插件已加载,就没其他内容了
请教一下啊,环境跑起来了,也用手机能正常走代理,且代理内也能看到流量再跑。可是,为何没有自动截获CK呢?就比如京东,青龙的变量内的京东CK更新日期也没变化。
是否没有拉取规则库,或者没有正确加载到。可以看一下whistle目录下的logs中的日志,是否有加载规则的日志信息
日志内提示发现了规则,也提示加载了多少规则之类,可就是不见截获CK等的信息呀
是不是环境变量要提前预设好,哪怕是错的?
还有,走了代理以后就无法上网了,这样如何截获信息并正常访问呢?
报这个错误
[2024-08-31 09:41:19.030][X-SCRIPTS][error] [ruleHandler]err rule-test {}
不需要,如果没有是会新增的,看下有没有拉取青龙变量列表的日志。配置文件中将logLevel设置为log,可以有更多详细日志
没有loglevel,只有 debug: false, logType: ‘log’,哥们好多变量和修改和github上的对不上啊
另外,部署在青龙上,青龙在docker模式下,8899这个端口号不能修改映射么?
docker外的访问端口你可以随意改。是否是你写了测试规则,拦截了所有请求了。rule-test关键字搜一下看看
没写任何规则,拉取的你的库,没做其他任何改动。另外,现在流量跑代理了,明显看得到,需要关闭https第一个,但目前是没有任何CK拦截
提示openssl error是个什么情况呢
可以到github上建issue,上传截图进一步探讨
牛逼啊哥们,顶你!!!
如果我只是用青龙跑的话,是不是只从”2.3 基于青龙面板脚本快速安装与配置的方法”这里开始弄就可以的了吗?
是的,这里介绍的比较全,如果有经常用 PC 电脑来结合一起深度的使用,可以详细看全文
如果只是想简单的配置到青龙面板,则只参考 2.3 章节这一小部分即可
昨天试过好像正常,后来弄着弄着又用不了,显示显示file not found,到今天直接就网页打不开8899端口,也重新运行过”whistle.x-scripts 插件安装与更新”的了,还是不行,请问知道哪里出问题了吗?谢谢
作者大大好啊,为什么我订阅了仓库之后,没有在“任务管理”里找到名称为 whistle.x-scripts 插件安装与更新 的任务的?