Jayden

Jayden

PAC(代理自動設定)

有一個事情困擾了我很久:

  • 我是一個深度的 macOS 使用者,得易於 macOS 上優良的軟體,例如 surge for mac,我能夠很輕易的解決幾乎所有網路問題。

  • 但這個事情在 Windows 和 Linux 上就顯得比較複雜,但使用 Windows 或 Linux 依然是必要的。

  • 我不希望給每個系統都部署上一個軟體,都寫上一份配置檔案。

因此,最好的做法就是將 surge for mac 作為代理伺服器,對其他設備的網路進行接管。

我身處學校大內網,無法將 mac 的 ip 設置為靜態,因此我需要不斷更新 mac 的 ip 地址以維繫這個方案。

在 ChatGPT 的幫助下,寫了一段腳本,自動將獲取 mac 的 ip 地址並生成 PAC(Proxy Auto-Config) 配置檔案,上傳到我的網盤中,其他設備只需填寫好配置檔案的地址即可。


  1. 將下面這段程式碼保存為 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
    
  2. 設置一個定時任務:

    crontab -e
    

    然後將這行添加到結尾(每小時的半點運行一次,您可以根據自己的需要來填寫):

    30 * * * * /Users/jayden/proxy_pac/generate_pac.sh
    

此文由 Mix Space 同步更新至 xLog
原始連結為 https://xxu.do/posts/geek/PAC


載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。