因为公司的扯淡网络,想访问外网就必须设置 http 和 https 代理,每次都需要到“设置-网络-高级-代理”中设置,而如果回家用过 ShdowSocks 之后所有代理都会被清空,同时第二天还得自己重新设置并开启代理,非常麻烦,想问下有没有什么方便快捷的方式切换 Mac 下的代理(HTTP 和 HPPTS )呢?
1
XerWandeRer 2015-09-02 10:04:45 +08:00 via Android
AppleScript or Shell Script. 配合 Keyboard Maestro 或者 Alfred 。我就是这么做的。
|
2
boywang004 2015-09-02 10:06:04 +08:00
Network 里面有一个 Location ,添加之后,可以专门干这个事情,切换只要从左上角苹果 Apple Icon 就能搞定。缺点是切换时会断网。
|
3
loveis0 2015-09-02 10:09:09 +08:00
直接在公司开着 SS 不行吗?
|
4
crayhuang 2015-09-02 10:10:58 +08:00
我是切换浏览器, 2333 ,公司用 Chrome ,家里用 Safari
|
5
sakeven 2015-09-02 10:25:42 +08:00
mac 可以设置位置。。然后切换位置就可以了。
|
8
akring OP @loveis0 哦,这样啊,我现在 http 代理是公司提供的一个地址+端口,然后 ss 用的是购买的账号,这两者可以同时开启吗?
|
9
williamx 2015-09-02 10:42:27 +08:00
location !
|
11
honeycomb 2015-09-02 10:54:34 +08:00
@akring
可能不行 公司提供的 HTTP/HTTPS proxy 无法承载 ss 协议的数据 而 ss 在里,公司 proxy 在外,所以更不能用 ss 承载公司 proxy 包装过的数据 还有一种可能性,公司的防火墙没有关掉 ss 协议(无论是端口,还是深度包检测) 这种情况相当于绕过了"想访问外网就必须设置 http 和 https 代理"的策略 |
13
IgniteWhite 2015-09-02 11:44:40 +08:00 1
我看了楼主上面追问的问题,主要是不会使用 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 系统都是一个思路啊。 |
14
cattyhouse 2015-09-02 11:59:02 +08:00 via iPhone
networksetup 命令。
|
15
FrankFang128 2015-09-02 12:00:55 +08:00 via Android
只用 Chrome 插件。
|
16
paradoxs 2015-09-02 12:03:36 +08:00
有木有人知道 SS 之后会在哪里更新
|
17
jeffma 2015-09-02 12:08:15 +08:00 3
|
18
IgniteWhite 2015-09-02 12:10:11 +08:00
@jeffma 楼主,牛人在此!
|
19
cattyhouse 2015-09-02 12:14:29 +08:00 via iPhone 1
给楼主一个思路, 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 段,我可以把这个给你完善下。 |
20
cattyhouse 2015-09-02 12:17:24 +08:00 via iPhone
接上,我有个项目是实现 chnroute 全自动加载,虽然跟你这个无关,但是其中“监控网络变化来执行命令”可以用在你的这个需求上:
https://github.com/cattyhouse/chnroute-automation-mac |
21
jsfaint 2015-09-02 12:38:05 +08:00
|
22
zander 2015-09-02 12:51:40 +08:00
location
|
23
OscarUsingChen 2015-09-02 14:00:11 +08:00
有个软件, ControlPlane ,能根据条件判断,自动设置情景。针对不同的情景,能修改系统位置,执行脚本,运行程序。基本能够解决楼主问题。
|
24
cattyhouse 2015-09-02 14:00:18 +08:00
@jeffma 你这个真心搞复杂了,不需要用 location 的,你的只有两种情况 1 , 在公司 2 ,在其他地方。可以通过判断 ssid 来修改代理参数,比如你的公司的 Wi-Fi ssid 为 “ office ”,可以用下面的 shell 来做:
if [ "$(networksetup -getairportnetwork en0 | awk '{print $4}')" = "office" ]; then #在公司 # 先关闭 Wi-Fi 的所有代理设置 networksetup -setwebproxystate Wi-Fi off networksetup -setsocksfirewallproxystate Wi-Fi off networksetup -setautoproxystate Wi-Fi off #打开代理的 autoproxy ,设置为公司的 pac networksetup -setautoproxystate Wi-Fi on networksetup -setautoproxyurl Wi-Fi http://公司 pac 地址 else # 不在公司 # 先关闭 Wi-Fi 的所有代理设置 networksetup -setwebproxystate Wi-Fi off networksetup -setsocksfirewallproxystate Wi-Fi off networksetup -setautoproxystate Wi-Fi off #打开代理的 autoproxy ,设置为电脑本地的 pac networksetup -setautoproxystate Wi-Fi on networksetup -setautoproxyurl Wi-Fi http://你本地的 pac 地址 fi 就搞定了,效果一样, shadowsocks app 不需要动它,让它一直在后台运行。 |
25
cattyhouse 2015-09-02 14:14:12 +08:00
获取 ssid 这样似乎更准确 ( awk 语法变化一下)
networksetup -getairportnetwork en0 | awk -F": " '{print $2}' |
26
jeffma 2015-09-02 15:22:22 +08:00
@cattyhouse 感谢,回去按照这个思路改进下
|
27
ptyfork 2015-09-02 17:51:56 +08:00
mac 下代理相关的设置居然不是和 ios 一样跟 ssid 相关的, 不知道咋想的。
|
28
cattyhouse 2015-09-02 18:07:55 +08:00
@ptyfork 其实各有利弊, SSID 跟 Proxy 设置区分开来还是很方便的。
|
29
megabits 2015-09-02 19:01:02 +08:00
@XerWandeRer 我也是+ 1
|
30
scola 2015-09-02 20:45:05 +08:00 via Android
foxproxy
|
31
paicha 2015-09-02 21:18:05 +08:00
我是直接改 shadowsocks 的 pac 脚本
|
32
hzlzh 2015-09-02 22:12:50 +08:00
|
33
Hodor 2015-09-03 02:30:17 +08:00
Location
|
34
ichou 2015-09-03 15:49:27 +08:00
Alfred + AppleScript
|
35
longquanwo 2015-09-03 23:33:51 +08:00 via iPhone
弄那么复杂干嘛。一个软件全搞定: shimo
|
36
Layne 2015-09-04 00:11:36 +08:00
我在 GitHub 上找到了一个小工具,可以根据 WiFi 的名称切换到对应的 Location ,然后自己给不同的 Location 设置不同的代理方式。
https://github.com/rimar/wifi-location-changer |
37
leohxj 2015-09-06 10:37:46 +08:00
proxifier
|
38
zhuziyi 2016-05-07 11:36:46 +08:00
|
39
dawnc 2016-12-01 23:30:35 +08:00
我感觉你们都复杂了。
Automator 里,新建个 APP ,使用 AppleScript : tell application "Finder" set dialog to display dialog "切换代理. 请选择:" buttons {"Home", "Office", "Cancel"} default button "Home" with title "切换代理" set interface to button returned of dialog end tell if interface is "Cancel" then return end if if interface is "Home" then do shell script "sudo -S networksetup -setsocksfirewallproxystate Wi-Fi on" do shell script "echo '1234'|sudo -S networksetup -setsocksfirewallproxy Wi-Fi 127.0.0.1 7070" end if if interface is "Office" then do shell script "sudo -S networksetup -setsocksfirewallproxystate Wi-Fi on" do shell script "sudo -S networksetup -setsocksfirewallproxy Wi-Fi 10.10.10.10 7070" end if |