有一個事情困擾了我很久:
-
我是一個深度的 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