Quantumult X 高级玩法:脚本与规则系统详解

常用客户端使用 / 浏览:2
2026.09.28分享SSR、V2Ray、Clash免费节点,包含美国、韩国、德国、日本、新加坡,免费节点仅供学习研究,请勿非法使用。 【查看详情】

如果你已经用 Quantumult X 超过三个月,大概率经历过这样的阶段:一开始只把它当成一个“能分流的代理工具”,后来发现它居然能改请求、改响应、定时任务、甚至跑 JavaScript。再后来,你看到别人用 Quantumult X 自动抢空投、监控链上大额转账、甚至根据交易所 API 的延迟做三角套利,才意识到这玩意儿本质上是一个运行在 iOS 上的轻量级网络编程环境。

而 2024-2025 年的虚拟币市场,恰好给这种“网络编程环境”提供了最肥沃的土壤:CEX 和 DEX 的价差、链上 Gas 波动、MEME 币的狙击、交易所活动脚本、资金费率套利——所有这些都依赖一个核心能力:在正确的时间,向正确的端点,发送正确的请求,并根据响应做出判断。 Quantumult X 的脚本系统和规则系统,就是干这个的。

一、重新理解 Quantumult X 的规则系统:不只是分流

大多数人写规则是这样的:

host, api.binance.com, Proxy host, api.coinbase.com, Proxy host, *.etherscan.io, Proxy 

这没错,但只用了规则系统 10% 的能力。Quantumult X 的规则系统实际上是一个请求匹配与动作执行引擎。匹配条件包括 host、host-suffix、host-keyword、ip-cidr、geoip、url-regex,甚至 user-agent。动作包括:

  • Proxy / Direct / Reject
  • Reject 200 / Reject 404(返回伪造响应)
  • Script-request-header / Script-request-body / Script-response-header / Script-response-body
  • Script-analyze-echo-response

在虚拟币场景里,最被低估的是 url-regex 加上 script-response-body。举个例子:你希望所有对 api.binance.com/api/v3/ticker/price 的响应都自动记录到本地文件,同时如果 BTC 价格超过某个阈值就触发通知。传统做法是写个服务器轮询,但 Quantumult X 可以直接在响应阶段做。

1.1 用 url-regex 精准捕获交易所 API

[filter_local] url-regex, ^https?://api\.binance\.com/api/v3/ticker/price, script-response-body, Scripts/binance_price.js url-regex, ^https?://api\.okx\.com/api/v5/market/ticker, script-response-body, Scripts/okx_ticker.js 

注意:url-regex 的匹配发生在请求发出之前,但 script-response-body 是在收到响应后执行。这意味着你可以在脚本里读取原始响应,修改它,甚至根据响应内容发起新的请求(通过 $task.fetch)。

1.2 Reject 规则在虚拟币空投脚本里的妙用

很多空投任务会检测你是否安装了广告拦截器,或者会加载一些统计脚本。如果你直接用 Reject,页面可能报错。但用 Reject 200 返回一个空的 JSON 或一张 1x1 图片,任务脚本会认为加载成功,而你实际上屏蔽了追踪。例如:

url-regex, ^https?://tracking\.airdrop-project\.com/collect, reject-200 

更高级的玩法:某些交易所的活动页面会请求 /api/check_eligibility,你可以用 script-response-body 把 {"eligible":false} 改成 {"eligible":true}——当然,这只能骗前端,后端该验证还是会验证。但在一些链下签名任务里,前端校验绕过确实能让你提前看到任务状态。

二、脚本系统核心:从 MITM 到定时任务

Quantumult X 的脚本分为几类:

  • HTTP 请求/响应脚本:修改 header、body
  • 定时任务脚本:通过 [task_local] 定义 cron
  • 事件脚本:网络变化、SSID 变化等
  • DNS 脚本:自定义 DNS 解析

虚拟币热点下,最有价值的是定时任务 + 请求脚本的组合。

2.1 定时抓取交易所资金费率并自动套利提醒

假设你想监控 Binance、OKX、Bybit 的永续合约资金费率,当某个币种费率达到 0.1% 以上时发通知。你不需要服务器,Quantumult X 的 task 就能做。

[task_local] 0 */1 * * * Scripts/funding_rate_monitor.js, tag=资金费率监控, enabled=true 

脚本内部:

const exchanges = [   { name: 'Binance', url: 'https://fapi.binance.com/fapi/v1/premiumIndex' },   { name: 'OKX', url: 'https://www.okx.com/api/v5/public/funding-rate?instId=BTC-USD-SWAP' },   { name: 'Bybit', url: 'https://api.bybit.com/v5/market/funding/history?category=linear&symbol=BTCUSDT' } ];  for (const ex of exchanges) {   const resp = await $task.fetch({ url: ex.url });   const data = JSON.parse(resp.body);   // 解析逻辑...   if (rate > 0.001) {     $notify('资金费率机会', `${ex.name} 费率 ${rate}`, '');   } } $done(); 

这比在服务器上跑 cron 更隐蔽,也更省电——因为 Quantumult X 本身就在后台运行。但要注意:iOS 后台刷新限制可能导致任务延迟,建议把 cron 设成每 5 分钟一次,并配合 $prefs 存储上次执行时间。

2.2 用 script-response-body 篡改 DEX 报价

这不是让你去攻击 DEX,而是用于本地测试和套利模拟。比如你写了一个链上套利机器人,但不想每次都用真金白银测试。你可以让 Quantumult X 拦截 api.1inch.io/v5.0/1/quote 的响应,把价格改成你预设的值,然后观察你的机器人逻辑是否正确。

let body = JSON.parse($response.body); body.toTokenAmount = '100000000000000000000'; // 人为放大 $done({ body: JSON.stringify(body) }); 

更实战的用法:某些聚合器 API 会返回多个 DEX 的报价,你可以写脚本自动选择最优路径,然后通过 $task.fetch 直接调用合约。但 Quantumult X 不能直接发交易,只能发 HTTP 请求。所以通常的做法是:脚本发现价差 → 通知你 → 你手动或通过快捷指令触发交易。

三、MITM 与证书:虚拟币 App 抓包的前提

想修改交易所 App 的请求,必须开启 MITM 并安装证书。Quantumult X 的 MITM 配置里,hostname 要包含你要拦截的域名。很多交易所 App 会做证书固定(SSL Pinning),Quantumult X 无法直接绕过。但 Web 端和部分 API 端点没有固定,所以优先针对 Web 和公开 API。

[mitm] hostname = api.binance.com, api.okx.com, api.bybit.com, www.etherscan.io 

注意:不要一股脑把 * 加进去,否则所有 HTTPS 流量都走 MITM,耗电且容易出问题。只加你真正需要改的域名。

3.1 绕过交易所 App 的“地区限制”检测

很多交易所会通过请求 /api/v1/region 或类似端点判断你是否在受限地区。你可以用 script-response-body 把 {"region":"US"} 改成 {"region":"SG"}。但注意:后端仍然可能通过 IP 判断,所以这只能骗前端。真正要改地区,还是得用对应地区的代理节点。

3.2 自动签到脚本的通用模板

几乎每个交易所都有每日签到领积分。你可以用 Quantumult X 的定时任务 + 请求脚本自动完成。核心是拿到 cookie 或 token。通常做法:

  1. 用 script-request-header 捕获登录后的 Authorization header
  2. 存到 $prefs 里
  3. 定时任务读取 token,发送签到请求
// 捕获 token const token = $request.headers['Authorization']; if (token) $prefs.setValueForKey(token, 'binance_token'); $done({}); 

然后定时任务里:

const token = $prefs.valueForKey('binance_token'); const resp = await $task.fetch({   url: 'https://api.binance.com/sapi/v1/points/daily-check-in',   method: 'POST',   headers: { 'Authorization': token } }); $notify('签到结果', resp.body, ''); $done(); 

这套模板可以复用到几乎任何交易所。唯一的问题是 token 会过期,所以需要定期重新捕获。

四、规则与脚本的联动:构建链上监控系统

虚拟币热点里,链上数据比 CEX 数据更有 alpha。但 Etherscan 免费 API 有频率限制,BscScan 也是。你可以用 Quantumult X 做一层缓存和聚合。

4.1 拦截 Etherscan API 并缓存结果

[filter_local] url-regex, ^https?://api\.etherscan\.io/api\?module=account&action=txlist, script-response-body, Scripts/etherscan_cache.js 

脚本逻辑:检查本地是否已有 30 秒内的缓存,有则直接返回缓存,没有则放行并写入缓存。这样可以减少 API 调用次数,避免被限流。

const key = 'eth_cache_' + $request.url; const cached = $prefs.valueForKey(key); if (cached && Date.now() - JSON.parse(cached).time < 30000) {   $done({ body: JSON.parse(cached).body }); } else {   // 放行,但在响应时写入缓存   $done({}); } 

更完整的做法是用 script-request-header 和 script-response-body 配合,但 Quantumult X 的脚本上下文是分离的,所以通常只在响应阶段写缓存。

4.2 监控大额转账并触发通知

你可以写一个定时任务,每 2 分钟调用 Etherscan 的 tokentx 接口,检查是否有超过 100 万美元的 USDT 转账。如果有,就 $notify 推送。这比很多付费监控工具还快,因为你可以自定义阈值和代币。

const resp = await $task.fetch({   url: 'https://api.etherscan.io/api?module=account&action=tokentx&contractaddress=0xdac17f958d2ee523a2206206994597c13d831ec7&page=1&offset=10&sort=desc&apikey=YourKey' }); const txs = JSON.parse(resp.body).result; for (const tx of txs) {   const value = tx.value / 1e6;   if (value > 1000000) {     $notify('大额USDT转账', `${value} USDT from ${tx.from} to ${tx.to}`, '');   } } $done(); 

注意 Etherscan 免费 key 限制 5 次/秒,所以不要设太频繁。

五、进阶:用 Quantumult X 做简单的三角套利监控

三角套利需要同时监控三个交易对的价格。Quantumult X 可以并行请求多个 API,然后计算理论利润。虽然它不能直接下单,但可以作为信号源。

const [btcUsdt, ethBtc, ethUsdt] = await Promise.all([   $task.fetch({ url: 'https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT' }),   $task.fetch({ url: 'https://api.binance.com/api/v3/ticker/price?symbol=ETHBTC' }),   $task.fetch({ url: 'https://api.binance.com/api/v3/ticker/price?symbol=ETHUSDT' }) ]);  const p1 = JSON.parse(btcUsdt.body).price; const p2 = JSON.parse(ethBtc.body).price; const p3 = JSON.parse(ethUsdt.body).price;  const synthetic = p1 * p2; const spread = (p3 - synthetic) / synthetic; if (Math.abs(spread) > 0.002) {   $notify('三角套利机会', `ETHUSDT 价差 ${(spread*100).toFixed(3)}%`, ''); } $done(); 

这只是一个方向。你可以扩展到更多交易对和交易所。关键是 Quantumult X 支持 Promise.all,所以并发请求很快。

5.1 风险与限制

Quantumult X 的脚本运行在 JavaScriptCore 里,没有 Node.js 的完整 API。你不能用 require 加载 npm 包,也不能直接操作文件系统(除了 $prefs)。所以复杂的套利逻辑还是需要服务器。但作为轻量级监控和触发,它非常合适。

另外,iOS 后台运行时间有限。如果 Quantumult X 被系统杀死,定时任务不会执行。建议把关键任务同时部署在服务器上作为备份。

六、安全与合规提醒

修改交易所请求可能违反其服务条款。轻则封号,重则法律风险。尤其是涉及绕过 KYC、地区限制、自动化交易等。本文的技术讨论仅用于学习网络编程和自动化原理,请勿用于非法用途。

虚拟币市场本身波动极大,任何脚本都可能因为 API 变更、交易所风控、网络延迟而失效。不要用你输不起的钱去测试。

七、一个完整的实战配置示例

下面是一个可以复用的 Quantumult X 配置片段,用于监控 Binance 和 OKX 的 BTC 价格差,并在价差超过 0.5% 时通知。

[task_local] */2 * * * * Scripts/btc_spread.js, tag=BTC价差监控, enabled=true  [filter_local] url-regex, ^https?://api\.binance\.com/api/v3/ticker/price, script-response-body, Scripts/binance_price.js url-regex, ^https?://www\.okx\.com/api/v5/market/ticker, script-response-body, Scripts/okx_price.js 

脚本 btc_spread.js:

const binance = await $task.fetch({ url: 'https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT' }); const okx = await $task.fetch({ url: 'https://www.okx.com/api/v5/market/ticker?instId=BTC-USDT' }); const b = parseFloat(JSON.parse(binance.body).price); const o = parseFloat(JSON.parse(okx.body).data[0].last); const spread = (b - o) / o; if (Math.abs(spread) > 0.005) {   $notify('BTC价差', `Binance: ${b} OKX: ${o} 价差: ${(spread*100).toFixed(2)}%`, ''); } $done(); 

这个配置每 2 分钟跑一次,足够捕捉大部分短期价差。如果你有多个交易所账号,还可以加上 Bybit、Gate 等。

八、脚本调试技巧

Quantumult X 的脚本没有 console.log 输出到桌面。调试主要靠 $notify 和 $prefs。建议在开发阶段把关键变量写入 $prefs,然后用另一个脚本读取并通知。

$prefs.setValueForKey(JSON.stringify(debugObj), 'debug_key'); 

另外,Quantumult X 有“脚本日志”功能,在 App 的设置里可以开启。但日志只保留最近几条,不适合大量输出。

还有一个坑:$task.fetch 的超时默认是 10 秒。如果交易所 API 响应慢,会直接失败。你可以在参数里加 timeout: 5000 来调整。

九、规则系统的性能优化

规则越多,匹配越慢。建议把高频域名放在前面,用 host 而不是 url-regex。对于虚拟币相关,可以单独建一个 [filter_local] 分组,然后按需启用。

另外,script-response-body 会消耗 CPU。如果只是记录日志,可以用 script-analyze-echo-response,它不会修改响应,只是分析。

url-regex, ^https?://api\.binance\.com/api/v3/account, script-analyze-echo-response, Scripts/log_account.js 

这样对性能影响更小。

十、未来:当 Quantumult X 遇上 AI 交易信号

现在已经有开发者在 Quantumult X 里调用 OpenAI API 来分析链上数据,然后生成交易信号。虽然延迟和成本是问题,但作为一个实验,它展示了可能性:你的手机代理工具,可以变成一个边缘计算节点。

例如,定时任务抓取 Twitter 上某个 KOL 的推文,用 GPT 判断情绪,如果看涨就通知你。或者抓取链上巨鲸的转账,用模型判断是买入还是卖出。这些都不需要服务器,只需要 Quantumult X 的脚本能力加上一点想象力。

当然,AI 的响应时间通常在 1-3 秒,对于高频套利不够,但对于中低频的现货交易,已经足够。

虚拟币市场的热点每天都在变,但底层的数据流和请求逻辑不变。掌握 Quantumult X 的脚本与规则系统,你就拥有了一个随身携带的、可编程的网络中间件。它不能让你一夜暴富,但能让你在信息获取上领先一步——而在加密世界,领先一步往往就是全部。

版权申明:

作者: V2ray是什么?

链接: https://whatisv2ray.com/v2ray-client-guide/quantumultx-scripting.htm

来源: V2ray是什么?

文章版权归作者所有,未经允许请勿转载。

标签