macOS可通过脚本+launchd轮询实现连接特定Wi-Fi自动切换代理:先用airport获取SSID,匹配后调用networksetup设置HTTP/HTTPS代理,并需授予终端完全磁盘访问权限。

macOS 本身不提供“连接某 Wi-Fi 就自动开代理”的图形化开关,但可以通过脚本 + 系统命令 + 定时监听组合实现真正可用的自动切换。关键不在功能多炫,而在稳定、少弹窗、重启不失效。
确认当前网络服务名
代理设置必须绑定到具体服务(如 Wi-Fi、以太网),不能笼统写“系统”。终端运行:
networksetup -listallnetworkservices
输出中没带星号(*)的才是启用状态的服务。日常用 Wi-Fi 就记下 Wi-Fi;接网线可能显示 Ethernet;iPhone USB 共享可能是 iPhone USB。后续所有脚本都得用这个准确名称。
编写自动切换脚本
新建一个脚本文件,例如 ~/bin/auto-proxy.sh,内容如下(以匹配 SSID “Office-WiFi” 为例):
#!/bin/zsh
SSID=$(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I 2>/dev/null | grep ' SSID:' | sed 's/^[[:space:]]*SSID:[[:space:]]*//')
if [[ "$SSID" == "Office-WiFi" ]]; then
sudo networksetup -setwebproxy "Wi-Fi" 127.0.0.1 8080
sudo networksetup -setsecurewebproxy "Wi-Fi" 127.0.0.1 8080
sudo networksetup -setwebproxystate "Wi-Fi" on
sudo networksetup -setsecurewebproxystate "Wi-Fi" on
else
sudo networksetup -setwebproxystate "Wi-Fi" off
sudo networksetup -setsecurewebproxystate "Wi-Fi" off
fi
注意替换:SSID 名称、“Wi-Fi”服务名、代理地址和端口。保存后执行:chmod +x ~/bin/auto-proxy.sh
用 launchd 实现后台轮询
macOS 没有实时 SSID 变更通知,但 launchd 可靠轮询。新建配置文件:~/Library/LaunchAgents/local.auto-proxy.plist,内容为:
把“你的用户名”替换成实际账户名。加载任务:launchctl load ~/Library/LaunchAgents/local.auto-proxy.plist
权限与调试要点
首次运行可能提示“拒绝访问”,需在系统设置 → 隐私与安全性 → 完全磁盘访问权限中添加终端(或你用的其他终端应用)。
验证是否生效:终端运行 networksetup -getwebproxy "Wi-Fi",看输出是否含 Enabled: Yes。
若不生效,检查脚本路径是否写错、launchd 是否报错(console.app 中搜 auto-proxy)、以及是否漏掉 sudo 权限。


















