QuantumultX 重要操作和配置记录
前言
本文记录了通过 QuantumultX 配置代理,书写分流规则,抓包分析并重写规则,启用定时任务等简易操作流程,另外还记录了其他一些相关操作。
配置代理
可以导入自己搭建的节点,也可以通过引用导入 QuantumultX 格式的订阅链接,步骤比较简单略过,记录一个点,如果相关机场不支持 QuantumultX 格式的订阅,可以通过解析器完成转换,在配置中引用转换脚本即可:
1[general]
2resource_parser_url=https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/resource-parser.js
resource-parser.js
是 github 上的一个资源解析转换脚本,主要功能是将其它格式的订阅解析成 QuantumultX 格式的订阅,以及可以对引用的重写/分流规则进行转换和筛选。
书写分流规则
分流规则可以简单理解,就是对某一类地址进行分流,通过一定的分流策略来处理这些地址的相关请求,这里以一个例子引入:
我需要在访问 *.dmm.co.jp
这类日本网址时使用日本节点,那么可以首先创建一个分流策略,名为 Japan,类型可以选择 avaiable(可用性) 或者 static(静态指定),也可以视情况选择如负载均衡之类的其他策略,匹配的节点标签可以根据自己的日本节点名称来填写,比如“日本”。
接着可以书写分流规则,host 需要填写一个正则式,这里就填 *.dmm.co.jp
,类型即是 HOST-WILDCARD
(通配符类型),策略即指定为 Japan。
以上操作同样都可通过直接编辑配置文件完成:
1[filter_local]
2host-wildcard, *.dmm.co.jp, Japan
3
4[policy]
5available=Japan, server-tag-regex=日本, img-url=🇯🇵
抓包分析并重写规则
由于很多请求是 https 的,为了抓包和重写 https 请求,需要安装并信任证书。
首先在设置界面开启重写和 MitM(中间人攻击),然后点击生成、配置证书。
接着,对于 IOS,需要在设置界面信任证书。对于 MacOS,点击生成证书会在 Safari 完成生成,然后双击证书在 Keychain Access 应用进行信任操作,如提示不可安装,则手动从 finder 将证书拖到 Keychain Access 的 login 列表中。
完成以上步骤后,即可开启 Http 抓取功能进行抓包和重写规则了,注意对于每个 https 请求,需要在 mitm 处添加对应的域名才能进行抓包和重写,而 http 请求则不用。
下面以屏蔽知乎的开屏广告为例子来进行一次规则重写。
开启抓包,如果是通过 http 加载的广告则很方便,直接开始抓包,但一些广告的加载可能是通过 https 加载,所以可以先通过 Activity 观察一下一些可能的 https 广告网址,然后在 mitm 处配置域名。
打开知乎加载开屏广告,抓包发现加载开屏广告图片的请求为:
1http://images.pinduoduo.com/marketing_api/2023-11-09/ce00e978-7d7f-11ee-81f3-0a580a4a3166.png?filtered=pread&filtered=pread
这是一个 http 请求,我们就可以通过一个正则式来 reject 这类请求,添加重写规则,类型可以指定为 reject,匹配的 url 为以下正则式:
1^https?:\/\/images\.pinduoduo\.com
考虑到同网址可能有 https 相关的广告,可以在 mitm 处再添加 images.pinduoduo.com
。
接着重新打开知乎,发现开屏广告已经不出现了。注意这只是一个简陋的例子,很多广告是通过 https 加载的,广告地址可能动态变化且繁多,需要更多更复杂的匹配,建议直接引用社区维护的规则:AdvertisingLite,但是不保证一直可用,关键还需自己抓包分析。
同样以上操作对应到配置文件如下:
1[rewrite_local]
2^https?:\/\/images\.pinduoduo\.com url reject
3
4[mitm]
5hostname = images.pinduoduo.com
设置定时任务
QuantumultX 支持以 crontab 格式设置定时任务,任务脚本为 js 脚本,可以实现定时签到等操作,具体可以自行抓包分析并书写自动化脚本。
下面以书写一个简单的定时汇率播报脚本为例:
1// currency.js
2const from_cur = "USD"
3const to_cur = "CNY"
4const amount = 1
5const token = "your_exchangerate-api_token"
6const url = `https://v6.exchangerate-api.com/v6/${token}/pair/${from_cur}/${to_cur}/${amount}`;
7const method = "GET";
8const headers = {};
9const data = {};
10
11const myRequest = {
12 url: url,
13 method: method,
14 headers: headers,
15 body: JSON.stringify(data)
16};
17
18$task.fetch(myRequest).then(response => {
19 let m = JSON.parse(response.body).conversion_result;
20 $notify("今日汇率 -- 美元兑人民币", "", `${m}`); // 中间那个是副标题
21 $done();
22}, reason => {
23 $notify("今日汇率 -- 美元兑人民币", "", reason.error); // Error!
24 $done();
25});
其中注意这几个 QuantumultX 提供的 API:
$task.fetch
可以触发定时任务发送 http 请求$notify
可以方便地调用系统通知$done
标志一个任务的完成
接着把脚本放到 Quantumult X/Scripts/
这个文件夹下,然后编写配置,在早上 10 点定时播报汇率情况:
1[task_local]
20 10 * * * currency.js, tag=今日汇率, enabled=true
另外,QuantumultX 还支持引用社区的脚本,但是感觉不太安全,建议阅读完代码确认没问题再引用。
配置 GeoIP 数据库源
目前市面上绝大多数的代理工具都依赖于 GeoIP2 数据库判断地址所属地,QuantumultX 也不例外。GeoIP2 数据库是来自于 MaxMind 的 GeoLite2 免费数据库,据官方说法,这个数据库目前存在一下几个问题:获取不便,数据量大,准确度低。
GeoIP2-CN 是一个小巧精悍、准确、实用 GeoIP2 数据库,而支持 QuantumultX,在设置页的 GeoLite2 项设置来源为如下链接,即可引用 GeoIP2-CN:
1https://github.com/Hackl0us/GeoIP2-CN/raw/release/Country.mmdb
IOS 与 MacOS 配置双向同步
首先在每个端的设置-资源开启 icloud,然后在一个端的关联配置下点击 icloud 新增 profile,然后其他端都 link profile,之后即可实现双向同步,默认有更新延迟,可以点击立即更新强制更新。