一种自动获取并同步CK至NAS青龙面板的方法

目录
[隐藏]

在前一篇文章中,我们介绍了在 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;

注意参考其中关于青龙面板的配置部分说明,修改为您实际的取值。创建并获取 clientIdclientSecret 的方法可参考下图:

最后在 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 免责说明

  • 本文介绍的内容仅适用于基于技术的研究学习交流目的,请勿用于商业用途、任何恶意目的,否则后果自负。
  • 请自行评估本文中提及的软件、仓库和源码的安全性和合法性。您应当在下载研究学习完毕后立即删除它们。本人对使用它们引发的任何问题概不负责,包括但不限于由脚本错误引起的任何损失或损害。

5 相关参考

点赞 (1)
  1. 说道:
    Microsoft Edge 128.0.0.0 Microsoft Edge 128.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

    https无法开启,报错[403] Forbidden.

  2. 枫影说道:
    Microsoft Edge 128.0.0.0 Microsoft Edge 128.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

    https开启不了了,如图,报错

  3. 说道:
    Microsoft Edge 128.0.0.0 Microsoft Edge 128.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

    终于搞定了,兄弟感谢!我来总结一下过程避免其他人踩坑:
    1、无论docker模式还是电脑等,如想手机走代理自动截获ck,手机必须安装whistle的证书,注意,是必须,否则https流量无法截取。另外,手机装证书,也有可能系统不认(例如MIUI),看上去装了实际没效果,这时候就需要root的系统装magisk后装MoveCertificate模块,它会自动把用户安装证书变成系统根证书。
    2、作者提供的教材和github上有些出入,例如日志变量名、脚本路径、脚本文件名等,需要自己有一定的代码识别能力,否则只能等作者自己修啦。
    3、从github拉包一定要完整,如不完整自己手动拉也行,放入脚本目录,注意目录名。
    4、如果是用的群晖内的docker,且跑在青龙内,一定不能改代理的8899端口,否则无法正常代理,都不能访问。
    PS:
    非常感谢作者,提供如此方便的工具,省了大力气了!
    另外,为了安全,手机上装的证书用完就卸载了,也不知道whistle的证书是否安全,毕竟开源,还是担心啊。。。。有无更好的方式?例如做成magisk模块,用的时候启用,不用的时候关闭即可?

    1. renxia说道:
      Safari 17.5 Safari 17.5 iPhone iOS 17.5.1 iPhone iOS 17.5.1

      Android安装证书拦截HTTPS流量是比较复杂一些。whistle的证书是首次使用时生成的,每台设备都不一样,可以去查阅一下其代码逻辑了解。另外它也支持启动时指定自定义证书,具体可以去看一下其官方文档

      1. 说道:
        Microsoft Edge 128.0.0.0 Microsoft Edge 128.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

        明白,但不妨碍做成magisk的模块来使用,方便些,已经提建议给官方了。另外,美团v3自动截获有问题,截获的内容是错的。

  4. 说道:
    Microsoft Edge 128.0.0.0 Microsoft Edge 128.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

    奇怪了,拦截规则就是不工作啊,日志内也没看到什么提示,显示最后一行[2024-08-31 18:00:12.519][X-SCRIPTS][info] @lzwme/whistle.x-scripts 插件已加载,就没其他内容了

  5. 说道:
    Microsoft Edge 128.0.0.0 Microsoft Edge 128.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

    请教一下啊,环境跑起来了,也用手机能正常走代理,且代理内也能看到流量再跑。可是,为何没有自动截获CK呢?就比如京东,青龙的变量内的京东CK更新日期也没变化。

    1. renxia说道:
      Safari 17.5 Safari 17.5 iPhone iOS 17.5.1 iPhone iOS 17.5.1

      是否没有拉取规则库,或者没有正确加载到。可以看一下whistle目录下的logs中的日志,是否有加载规则的日志信息

      1. 说道:
        Microsoft Edge 128.0.0.0 Microsoft Edge 128.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

        日志内提示发现了规则,也提示加载了多少规则之类,可就是不见截获CK等的信息呀

      2. 说道:
        Microsoft Edge 128.0.0.0 Microsoft Edge 128.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

        是不是环境变量要提前预设好,哪怕是错的?
        还有,走了代理以后就无法上网了,这样如何截获信息并正常访问呢?

      3. 说道:
        Microsoft Edge 128.0.0.0 Microsoft Edge 128.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

        报这个错误
        [2024-08-31 09:41:19.030][X-SCRIPTS][error] [ruleHandler]err rule-test {}

        1. renxia说道:
          Safari 17.5 Safari 17.5 iPhone iOS 17.5.1 iPhone iOS 17.5.1

          不需要,如果没有是会新增的,看下有没有拉取青龙变量列表的日志。配置文件中将logLevel设置为log,可以有更多详细日志

          1. 说道:
            Microsoft Edge 128.0.0.0 Microsoft Edge 128.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

            没有loglevel,只有 debug: false, logType: ‘log’,哥们好多变量和修改和github上的对不上啊

            1. 说道:
              Microsoft Edge 128.0.0.0 Microsoft Edge 128.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

              另外,部署在青龙上,青龙在docker模式下,8899这个端口号不能修改映射么?

              1. renxia说道:
                Safari 17.5 Safari 17.5 iPhone iOS 17.5.1 iPhone iOS 17.5.1

                docker外的访问端口你可以随意改。是否是你写了测试规则,拦截了所有请求了。rule-test关键字搜一下看看

                1. 说道:
                  Microsoft Edge 128.0.0.0 Microsoft Edge 128.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

                  没写任何规则,拉取的你的库,没做其他任何改动。另外,现在流量跑代理了,明显看得到,需要关闭https第一个,但目前是没有任何CK拦截

  6. ls说道:
    Microsoft Edge 128.0.0.0 Microsoft Edge 128.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

    提示openssl error是个什么情况呢

    1. renxia说道:
      Safari 17.5 Safari 17.5 iPhone iOS 17.5.1 iPhone iOS 17.5.1

      可以到github上建issue,上传截图进一步探讨

  7. 枫影说道:
    Microsoft Edge 128.0.0.0 Microsoft Edge 128.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

    牛逼啊哥们,顶你!!!

  8. cd说道:
    Google Chrome 122.0.6261.95 Google Chrome 122.0.6261.95 Windows 7 x64 Edition Windows 7 x64 Edition

    如果我只是用青龙跑的话,是不是只从”2.3 基于青龙面板脚本快速安装与配置的方法”这里开始弄就可以的了吗?

    1. 任侠说道:
      Microsoft Edge 127.0.0.0 Microsoft Edge 127.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition

      是的,这里介绍的比较全,如果有经常用 PC 电脑来结合一起深度的使用,可以详细看全文
      如果只是想简单的配置到青龙面板,则只参考 2.3 章节这一小部分即可

      1. cd说道:
        Google Chrome 122.0.6261.95 Google Chrome 122.0.6261.95 Windows 7 x64 Edition Windows 7 x64 Edition

        昨天试过好像正常,后来弄着弄着又用不了,显示显示file not found,到今天直接就网页打不开8899端口,也重新运行过”whistle.x-scripts 插件安装与更新”的了,还是不行,请问知道哪里出问题了吗?谢谢

  9. cd说道:
    Google Chrome 122.0.6261.95 Google Chrome 122.0.6261.95 Windows 7 x64 Edition Windows 7 x64 Edition

    作者大大好啊,为什么我订阅了仓库之后,没有在“任务管理”里找到名称为 whistle.x-scripts 插件安装与更新 的任务的?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code