爱可诗 – 前端团队博客

哈喽大家好我是站长,美区火箭apple ID 土耳其apple ID 其他apple ID 账号资源,可加微信:yuke36 咨询 公众号:云创磊哥Ai

使用 Surge for Mac 已经两周了,今天把我一路走来的心得写下来,给后来的朋友做个铺垫。如果想看 Surge for iOS 的教程请继续 Google,iOS 我觉得用小火箭就够了。需要强调的是,Surge 只是一个支持多种网络协议的网络工具,但是不提供出墙功能,需要自己去办一个 ss 账号,可以直接找 ss 提供商购买,也可以买个 VPS 自己搭建一个 ss 服务。

先用大招:

【前端工程师】这可能是用Mac Surge最划算的职业了!

为什么?

因为前端工程师:懂编程、懂正则表达式、需要抓包、爱鼓捣、需要科学上网!

早就听说过 Surge,但一直因为价格昂贵而排斥。直到看到池大大的这篇文章:Surge for Mac 快如风,我动心了。于是第二天就在公司众筹买了一个 Mega License。那天比较忙,周末就在家里捣鼓了一下。

我Google了一晚上,找到的文章大多讲的是 Surge for iOS 或者 Surge for mac 1.x,不太懂,有些提供了配置文件模板,但大部分都不太清楚。

那天晚上我就迷迷糊糊地睡着了,果然验证了一篇文章说的,使用Surge确实是有门槛的。

第二天我又继续研究,把看过的文章全部复习一遍,结合我现在的 Surge 版本功能,终于搞定了一个可以让我科学上网的 ss 配置。然后我就停不下来了,哇,这真是一个神奇的工具!

言归正传,官网说 Surge 是一个网络调试工具,但大部分人都把它当成梯子用,这两种说法都没错。

接下来我们来逐一解决。

梯子

这是一个刚性需求。

首次打开 Surge 时,会要求你选择一个配置文件存放位置,我们建议选择“Store in User Documents”。Surge 会在 Documents 目录下创建一个 Surge 目录,里面有示例配置。选择存储在 iCloud Drive 似乎是更好的解决方案,但是 Surge 并没有成功创建文件目录,不知道是不是软件 bug(引用自上面的文章,我在这里卡了一段时间)。点击状态栏上的 Surge 菜单,选择“设置为系统代理”,顾名思义,Surge 就变成了系统代理,几乎所有的 http(s) 请求都会被拦截,但是 shell 网络请求不会被拦截(下面会讲如何让 shell 出墙)

经过一番寻找,最终选择了AbcLite的这个配置作为定制的基础,已经上传到github。

将其内容复制并保存到~/Documents/Sur​​ge目录下,例如my-surge.conf。重点来了,请看:

1
2
3
4
5
6
7
8
9

[Proxy]
HK = custom,${ss-server host},${ss-server port},${ss encrypt type},${ss-password},https://github.com/stoneChen/Surge-config/raw/master/SSEncrypt.module
SG = custom,${ss-server host},${ss-server port},${ss encrypt type},${ss-password},https://github.com/stoneChen/Surge-config/raw/master/SSEncrypt.module
JP = custom,${ss-server host},${ss-server port},${ss encrypt type},${ss-password},https://github.com/stoneChen/Surge-config/raw/master/SSEncrypt.module
US = custom,${ss-server host},${ss-server port},${ss encrypt type},${ss-password},https://github.com/stoneChen/Surge-config/raw/master/SSEncrypt.module
KR = custom,${ss-server host},${ss-server port},${ss encrypt type},${ss-password},https://github.com/stoneChen/Surge-config/raw/master/SSEncrypt.module
[Proxy Group]
Proxy = select, HK, SG, JP, US, KR

【Proxy】是具体的代理配置,它下面是5个ss服务器节点,这里只是举了5个国家的例子,具体看你有多少个ss账号,如果你有几个账号,就留几个对应国旗配置就行。表面上看就是5个键值对(key可以自定义),在key中添加国旗可以直观区分不同国家的ss节点。values里的变量代表的是:

Custom 是不能改的,是约定好的类型(ss协议)。最后一项是ss模块下载地址,这个不用改。当选择当前配置所在的配置文件时,Surge 会下载ss模块,并会出现弹窗。

[Proxy Group] 为组策略配置,其中某一项配置可以参考[Proxy]中的配置,也可以参考其他组策略配置。可选的策略有三种:select、url-test、ssid。具体请阅读example-chinese.conf中的注释。

简单的说:

ss 配置完成后,保存。然后点击状态栏的 Surge,选择“切换配置”,右侧会出现 ~/Documents/Sur​​ge 下的配置文件列表,选择 my-surge.conf。

上一张图片:

接下来就是见证奇迹的时刻了~

打开浏览器:Fat Car~

外面的世界很精彩~

使用 Surge 仪表板

图片[1]-爱可诗 – 前端团队博客-网络副业创业项目大全资源整合

左上角有四个选项卡:

图片[2]-爱可诗 – 前端团队博客-网络副业创业项目大全资源整合

左侧的Local Clients是发出请求的应用程序列表,点击对应的应用程序,右侧会过滤掉其他应用程序发出的请求,点击表格区域中的某条请求记录,底部会展示该请求的详细信息。

右上角是偏好设置、保存、关键字过滤。

这就体现了Surge的网络调试功能。

网络规则设置

匹配规则共有5条:

匹配规则后,对匹配的请求可以进行三种处理:

例如:

广告拦截

这是Surge的一个特点,只要符合规则,就可以直接拒绝网络请求,从而屏蔽广告。

基于上面的例子,我们继续扩展:

1
2
3
4

DOMAIN-KEYWORD, advertise,REJECT
DOMAIN-SUFFIX,stat.tudou.com,REJECT
DOMAIN-SUFFIX,stat.youku.com,REJECT
DOMAIN-SUFFIX,strip.taobaocdn.com,REJECT

你懂了吗?我告诉你一个秘密:视频广告也能屏蔽(我在优酷土豆上测试过)

以后你上网的时候如果遇到“漏网”的广告,打开你的 Surge 配置文件,添加相应的配置,就可以把它干掉了。世界会安静很多。

允许外壳出墙

默认情况下,shell 不会被代理,我们需要设置 shell 环境变量,将代理服务指向 Surge 端口。

将以下代码复制到~/.zshrc底部

1
2
3
4

proxy=http://127.0.0.1:6152
export http_proxy=$proxy
export https_proxy=$proxy
export ftp_proxy=$proxy

什么?你还没用过 oh-my-zsh?我受够你了。

代理转发网络请求

该功能是基于URL Rewrite配置实现的,简单来说就是写正则表达式,例如:

1
2

[URL Rewrite]
^http://a.net/m/(.*) http://b.net:9999/m/$1

这意味着所有以 开头的 URL 都代理到 :9999/m/(请注意中间的空格)。

代码解释为:

1
2

let regStr = new RegExp('^http://a.net/m/(.*)')
let proxyUrl = url.replace(regStr, 'http://b.net:9999/m/$1')

当请求与该规则匹配时,将会被代理转发,并且在 Surge Dashboard 上可以看到代理记录。

可以设置多条规则。

这样默认是header模式,客户端不会感知到当前请求被代理了,相当于上面的配置是:

图片[3]-爱可诗 – 前端团队博客-网络副业创业项目大全资源整合

1

^http://a.net/m/(.*) http://b.net:9999/m/$1 header

还有一种模式叫302重定向,是客户端可感知的,302模式写法如下:

1

^http://aaa.com http://bbb.cn 302

这被重定向至。

这样一来,只要玩法正确,就可以随心所欲地翻转各种代理转发~

有时候,通过域名规则过滤广告太过暴力,有时候你只是想屏蔽指定域名下的个别请求,那么 URL Rewrite 就可以实现这一点。对于你不想看到的东西,你可以创建一个正则表达式,将它们转发到一个没有响应的地址(比如 loclahost)。

连接到移动设备代理转发请求

用过Charles的朋友都知道,它也是一个网络调试工具,最常用的工具就是静态资源的代理。

其实网络调试用Charles就够了。不过自从有了Surge,科学上网和网络调试就可以结合起来了~

一开始我并不确定 Surge 是否支持这样的功能,但是理论上应该是支持的,于是我就按照自己的想法像 Charles 一样使用了 Surge:

我打开手机设置,将代理指向Surge默认端口6152,然后用微信随便打开一个网页,发现加载时间好长,我愣了一下……

Surge,作为所谓的神奇装置,连这点小功能都不支持吗?!

不甘心放弃,就去知乎提了一个问题咨询 Surge 作者,没想到作者当天下午就回复我了,详情可以看 Surge for MAC 不支持类似 Charles 的 http 代理吗?

答案原来这么简单,我都不好意思去想我该想到的了。然后我兴奋地把监控IP设置为0.0.0.0,把手机连上代理,打开网页,就搞定了!我又看了看Dashboard,有记录了!

现在,连接上 Surge 代理后,你就可以在手机上查看请求和响应数据包了!那么如何实现 URL 代理转发呢?其实就是上一节中的 URL Rewrite。这些规则配置适用于所有被 Surge 接管的请求。

这样一来,Surge 也具备了 Charles 最常用的功能,一般情况下调试移动端开发都不需要打开 Charles 了,完美!

主机设置

这个配置不仅包含了本地/etc/hosts功能,还提供了泛解析和别名支持,非常实用。

例如:

1
2
3
4
5
6

[Host]
# 这个是泛解析,a.test.com b.test.com 等通通指向 192.168.1.100
*.test.com = 192.168.1.100
# 这个是别名设置,c.me d.me 等通通指向localhost
*.me = localhost

与 1password 冲突

最近有朋友发现开启 Surge 后 1password 无法正常使用,向我咨询我的情况。我当天一切正常,但第二天又遇到了同样的问题,网页上的填充快捷键没反应,点击 chrome 插件时出现这样的情况:

图片[4]-爱可诗 – 前端团队博客-网络副业创业项目大全资源整合

朋友费了好大劲,最后找到了解决办法,就是在配置文件中的skip-proxy中添加127.0.0.1这条记录,上面的配置文件已经解决了这个问题。

概括

Surge 无疑是非常强大的,称其为“法宝”也不为过。它的价格让很多人望而却步,但从长远来看,我认为它还是值得购买的。目前我只发现了这么多用途,并没有充分利用。其实 Surge for mac 就是由 Surge for iOS 开发而来,但毕竟我平时都是在 mac 上办公,手机上微信的时间也比较多,对我个人而言,在 mac 上使用更有意义。所以我在手机上选择了 Shadowrocket 这个后起之秀,只要 6RMB,性价比高很多,而且 Surge 的配置文件可以重复使用。

注意:规则配置过多会导致响应速度变慢,请自定义最适合您的配置。

PS:我还没彻底抛弃这台小灰机,它的“屏幕扫二维码”功能给了我一点小惊喜——

哈喽大家好我是站长,美区火箭apple ID 土耳其apple ID 其他apple ID 账号资源,可加微信:yuke36 咨询 可扫码下方关注公众号获取账号教程资源

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容