Mac 上如何自如的切换网络代理?

2015-09-02 10:02:10 +08:00
 akring

因为公司的扯淡网络,想访问外网就必须设置 http 和 https 代理,每次都需要到“设置-网络-高级-代理”中设置,而如果回家用过 ShdowSocks 之后所有代理都会被清空,同时第二天还得自己重新设置并开启代理,非常麻烦,想问下有没有什么方便快捷的方式切换 Mac 下的代理(HTTP 和 HPPTS )呢?

18943 次点击
所在节点    MacBook Pro
40 条回复
XerWandeRer
2015-09-02 10:04:45 +08:00
AppleScript or Shell Script. 配合 Keyboard Maestro 或者 Alfred 。我就是这么做的。
boywang004
2015-09-02 10:06:04 +08:00
Network 里面有一个 Location ,添加之后,可以专门干这个事情,切换只要从左上角苹果 Apple Icon 就能搞定。缺点是切换时会断网。
loveis0
2015-09-02 10:09:09 +08:00
直接在公司开着 SS 不行吗?
crayhuang
2015-09-02 10:10:58 +08:00
我是切换浏览器, 2333 ,公司用 Chrome ,家里用 Safari
sakeven
2015-09-02 10:25:42 +08:00
mac 可以设置位置。。然后切换位置就可以了。
akring
2015-09-02 10:33:47 +08:00
@loveis0 小白不太懂, SS 可以设置 http 代理吗?
loveis0
2015-09-02 10:37:24 +08:00
@akring 我挂着 SS 都是自动走 HTTPS 代理的
akring
2015-09-02 10:41:03 +08:00
@loveis0 哦,这样啊,我现在 http 代理是公司提供的一个地址+端口,然后 ss 用的是购买的账号,这两者可以同时开启吗?
williamx
2015-09-02 10:42:27 +08:00
location !
loveis0
2015-09-02 10:46:27 +08:00
@akring 试试不就知道了吗?
honeycomb
2015-09-02 10:54:34 +08:00
@akring
可能不行

公司提供的 HTTP/HTTPS proxy 无法承载 ss 协议的数据
而 ss 在里,公司 proxy 在外,所以更不能用 ss 承载公司 proxy 包装过的数据

还有一种可能性,公司的防火墙没有关掉 ss 协议(无论是端口,还是深度包检测)
这种情况相当于绕过了"想访问外网就必须设置 http 和 https 代理"的策略
akring
2015-09-02 11:30:02 +08:00
@honeycomb 好的,非常感谢大家的帮助!
IgniteWhite
2015-09-02 11:44:40 +08:00
我看了楼主上面追问的问题,主要是不会使用 location 。公司和家里分别设置 location ,比如我在大学里面寝室内网、寝室外网、图书馆代理和自习室 wifi 就要设置 4 个 location 。

图书馆代理的时候,我就不开 SS ,因为 SS 会加载自动的 profile 。我在寝室外网、自习室 wifi 这两个 location 使用 SS 。澄清一下你的说法,你在公司使用代理是 HTTP 或者 HTTPS 的话,使用 SS 之后并不会清空你的代理。你使用的是自动代理配置文件的话,才会“清空”你的代理,因为 SS 使用自己的 profile 了嘛。比如我们图书馆代理就提供自动配置文件和用户名密码( HTTP/HTTPS )两种,你不用自动配置文件就好了, SS 改过去之后进设置选项卡里面勾回 Web Proxy 就好了。

楼主又问“我现在 http 代理是公司提供的一个地址+端口,然后 ss 用的是购买的账号,这两者可以同时开启吗?”这个应该是不行的。你们公司代理可以过 SS 协议的话,为何不直接翻墙?一般来说除了少数搞外贸的公司之外,是不会允许翻墙协议的。阿里巴巴也得用“服上面管教”而且处于“外贸目的”的阿里云不是?

我具体控制使用 Alfred ,我用的是一个控制 GoAgentX 的 workflow ,开关 SS 。
输入 goa r ,开 SS ;输入 goa c ,关 SS 。

切换 network location 也有专门的 workflow 。
输入 nl ,切换 network location 。

牛人可以自己捣鼓一下 AppleScript 或者 Shell ,类 Unix 系统都是一个思路啊。
cattyhouse
2015-09-02 11:59:02 +08:00
networksetup 命令。
FrankFang128
2015-09-02 12:00:55 +08:00
只用 Chrome 插件。
paradoxs
2015-09-02 12:03:36 +08:00
有木有人知道 SS 之后会在哪里更新
jeffma
2015-09-02 12:08:15 +08:00
IgniteWhite
2015-09-02 12:10:11 +08:00
@jeffma 楼主,牛人在此!
cattyhouse
2015-09-02 12:14:29 +08:00
给楼主一个思路, bash 脚本:

If 检测到公司的网络; then
stop shadowsocks
networksetup -set 清空所有代理
networksetup -set 公司 http 代理
else
networksetup -set 清空所有代理
start shadowsocks
fi
至于“检测到公司网络” 这个怎么判断?如果你连的 Wi-Fi ,可以通过 ssid 判断。实在不行可以用公司网络的 ip 地址段判断,具体就是 netstat -nr |grep 公司网关地址。

其余的请 man networksetup

以后只需要在终端敲一次这个命令,就全自动化了。

另外如果你完全不想敲,还可以用 launchd 来监控网络变化执行这个脚本。

要是有你的一些基本信息,比如公司 Wi-Fi 的名字,比如公司获取的内网 ip 段,我可以把这个给你完善下。
cattyhouse
2015-09-02 12:17:24 +08:00
接上,我有个项目是实现 chnroute 全自动加载,虽然跟你这个无关,但是其中“监控网络变化来执行命令”可以用在你的这个需求上:

https://github.com/cattyhouse/chnroute-automation-mac

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/217766

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX