Jayden

Jayden

PAC(Proxy Auto-Config)

有一个事情困扰了我很久:

  • 我是一个深度的 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


加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。