IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    PAC(Proxy Auto-Config)

    Jayden\'s site发表于 2024-05-23 15:54:03
    love 0
    该渲染由 marked 生成,可能存在排版问题,最佳体验请前往:https://xxu.do/posts/geek/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

    看完了?说点什么呢



沪ICP备19023445号-2号
友情链接