Quantumult X 高级玩法:脚本与规则系统详解
如果你已经用 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。通常做法:
- 用
script-request-header捕获登录后的 Authorization header - 存到
$prefs里 - 定时任务读取 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是什么?
文章版权归作者所有,未经允许请勿转载。
热门博客
最新博客
- Quantumult X 高级玩法:脚本与规则系统详解
- V2ray 如何规避流量分析系统检测
- V2ray 端口被占用错误排查与修复指南
- 安卓 V2ray 客户端与 Clash 节点兼容性与功能优化全流程
- iOS V2ray 客户端节点优化实现与 Clash 兼容性与性能提升
- V2ray 在 Linux 服务器中的科学上网部署方法
- Quantumult X 自动策略组使用与优化方法
- V2ray 在 iOS 设备科学上网的配置方法详解
- V2ray 中“规则代理”术语详解:按条件分流机制说明
- V2ray 在抗封锁中的随机化技术解析
- V2ray 的通信安全模型是什么?防护机制解析
- Linux 系统 V2ray 节点优化提升科学上网可靠性教程
- V2ray mKCP 协议不稳定问题优化方法
- V2ray 与 Clash 在配置文件复杂度上的差异解析
- V2ray 在云服务集成中的未来发展方向
- V2rayN 多订阅链接管理方法详解
- V2ray 服务端配置文件详解:从零理解 config.json 结构
- V2ray XTLS 性能优化技巧与最佳实践
- V2ray 的自适应网络功能是什么?动态调整机制解析
- V2ray 与 OpenVPN 在企业部署上的区别