Surge CLI 开始测试

surge-cli 是一个类似于 redis-cli 的工具,采用 C/S 的通信方式,用于通过命令行控制本地或者远程设备的 Surge。

支持 CLI 的版本获取方式

OSX: https://surge.run/mac/Surge-1.4.0-145.zip
iOS: From TF Build 569 (1.3.0)

OSX 的选项中已经加入 Include Beta Builds 选项,选中后将可以自动更新 Beta 版本。

  1. 准备可执行文件

surge-cli 的可执行文件存在于 OSX 版本的应用包中,使用以下命令建立符号连接后就可以随意使用了。

ln -s /Applications/Surge.app/Contents/Resources/surge-cli /usr/local/bin/surge-cli

之后会将这个过程放入 Preferences 面板中。

2. 准备配置文件

需要在配置文件中加入以下配置

[General]
external-controller-access = apasswordhere@0.0.0.0:6155

为了安全性考虑,请设置一个较为复杂的密码。

3. surge-cli 连接

surge-cli 默认会根据 ~/.surge.conf 中的配置,自动连接本机的 Surge。如果你想控制另一台设备上的 Surge (包括 iOS),请使用 -h 选项。

surge-cli -h apasswordhere@192.168.1.10:6155 COMMAND

4. surge-cli 命令

surge-cli 的交互模式(interactive mode)还在开发,目前只能以将命令直接以启动参数传入的方式运行。如

surge-cli dump request

命令不区分大小写,目前支持的命令如下:

  • watch request:执行该命令后 surge-cli 将不会退出,持续输出最新收到的请求。
  • test-rule :测试某个 hostname 会被哪个 rule 捕获 (test-rule example.com)
  • dump dns:显示目前的 DNS 缓存和 DNS 条目
  • dump policy:显示所有可用的策略名称
  • dump active:显示目前活动的连接
  • dump request:显示最近的请求
  • dump rule:显示目前所有生效的规则
  • set-policy:设置针对某个 hostname 的策略(set-policy yach.me DIRECT),相当于在 0 位置插入了条 DOMAIN 或者 IP 规则。
  • insert-rule:在特定 index 插入一条规则,index 和 dump rule 的结果一致(insert-rule DOMAIN-SUFFIX,yach.me,Proxy 10)
  • reload:重新加载配置(仅限 OSX)
  • flush dns:强制清除本地 DNS 缓存
  • flush rule:强制清除规则匹配缓存。

另外,可以使用 -r( — raw)参数,让 cli 直接输出原始的 JSON 数据。

底层的通讯协议使用了非常简单的规范,之后我整理后会放出,同时会放出 Objective-C 版本的开源 SDK。方便各位为 Surge 开发各类工具:)

#TODO

  • 更多命令的支持
  • — help 和 — version 选项
  • interactive mode
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.