有一个事情困扰了我很久:
-
我是一个深度的 macOS 用户,得易于 macOS 上优良的软件,例如 surge for mac,我能够很轻易的解决几乎所有网络问题。
-
但这个事情在 Windows 和 Linux 上就显得比较复杂,但使用 Windows 或 Linux 依然是必要的。
-
我不希望给每个系统都部署上一个软件,都写上一份配置文件。
因此,最好的做法就是将 surge for mac 作为代理服务器,对其他设备的网络进行接管。
我身处学校大内网,无法将 mac 的 ip 设置为静态,因此我需要不断更新 mac 的 ip 地址以维系这个方案。
在 ChatGPT 的帮助下,写了一段脚本,自动将获取 mac 的 ip 地址并生成 PAC(Proxy Auto-Config) 配置文件,上传到我的网盘中,其他设备只需填写好配置文件的地址即可。
-
将下面这段代码保存为
generate_pac.sh
,这个脚本会在同一目录下生成proxy.pac
文件,并利用 alist 的 webdav 特性上传至云盘当中。#!/bin/zsh cd /Users/jayden/proxy_pac # 保证环境变量的一致以成功获取到 ip 地址。 PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin rm -f proxy.pac # Get the local IP address from interface en0 (commonly used for Wi-Fi) LOCAL_IP=$(ipconfig getifaddr en0) # Proxy ports HTTP_PROXY_PORT=6152 SOCKS_PROXY_PORT=6153 # PAC file path PAC_FILE="proxy.pac" # Generate the PAC file cat <<EOL > $PAC_FILE function FindProxyForURL(url, host) { var http_proxy = "PROXY $LOCAL_IP:$HTTP_PROXY_PORT"; var socks_proxy = "SOCKS5 $LOCAL_IP:$SOCKS_PROXY_PORT"; // Add your proxy rules here if (shExpMatch(host, "*.example.com")) { return "DIRECT"; // Direct connection } // Default to using HTTP proxy return http_proxy + "; " + socks_proxy; } EOL echo "PAC file generated at $PAC_FILE" >> proxy_pac.log # Upload the PAC file to Alist via WebDAV curl -X DELETE https://pan.xxu.do/dav/path/to/proxy.pac -u username:password curl -T $PAC_FILE https://pan.xxu.do/dav/path/to/proxy.pac -u username:password echo "PAC file generated and uploaded to Alist" >> proxy_pac.log date >> proxy_pac.log
-
设置一个定时任务:
crontab -e
然后将这行添加到结尾(每小时的半点运行一次,您可以根据自己的需要来填写):
30 * * * * /Users/jayden/proxy_pac/generate_pac.sh
此文由 Mix Space 同步更新至 xLog
原始链接为 https://xxu.do/posts/geek/PAC