PAC 文件修改后无法运行

PAC 文件修改后无法运行

我在 PAC 文件中遇到了这种奇怪的行为。我有一个现有的 PAC 文件,它运行良好。由于最近的迁移,我不得不开始修改 PAC 文件,并从代理中排除一些 IP 和 URL,主要是针对 MS Teams。

测试修改后,我发现浏览时延迟非常大。在处理 PAC 文件时,我对其进行了调整,以减少网络请求并一次性解析域名,然后检查 IP 地址。然而,这导致所有需要使用代理的网站都无法正常工作。

以下是我更新的 PAC 文件,删除了其中的一些细节:

function FindProxyForURL(url, host) {

    if(!isResolvable(host))
        return "DIRECT";
    var resolved_IP = dnsResolve(host);
    
    if ((shExpMatch(url, "ctldl.windowsupdate.com")) || 
    (shExpMatch(url, "download.windowsupdate.com")) || 
    (shExpMatch(url, "windowsupdate.microsoft.com")) || 
    (shExpMatch(url, "update.microsoft.com")) || 
    //check for local IP addresses
    (isInNet(resolved_IP, "127.0.0.1", "255.0.0.0")) || 
    (shExpMatch(url, "*.internaldomain1.com")) || 
    (shExpMatch(url, "*.internaldomain2.com")) || 
    (shExpMatch(url, "*.internaldomain3.com")) || 
    (shExpMatch(url, "internaldomain4.com")) ||
    /* Skype for Business and MS Teams */
    (isInNet(resolved_IP, "52.112.0.0", "255.252.0.0")) || 
    (isInNet(resolved_IP, "52.120.0.0", "255.252.0.0")))
        return "DIRECT"; 
    else
        if (url.substring(0, 5) == 'http:' ||
        url.substring(0, 6) == 'https:' ||
        url.substring(0, 4) == 'ftp:')
        return "PROXY <Primary Proxy IP>:8080; PROXY <Secondary Proxy IP>:8080";
    return 'DIRECT';
}

我不确定我在这里遗漏了什么导致请求被拒绝。

我还在 Firefox 上启用了开发者工具,并看到了被阻止的请求(但不是每次都有)

=============================

更新:

修改前的 PAC 文件

function FindProxyForURL(url, host) {

    if (shExpMatch(url, "ctldl.windowsupdate.com")) { return "DIRECT"; }
    if (shExpMatch(url, "download.windowsupdate.com")) { return "DIRECT"; }
    if (shExpMatch(url, "windowsupdate.microsoft.com")) { return "DIRECT"; }
    if (shExpMatch(url, "update.microsoft.com")) { return "DIRECT"; }


     //check for local IP addresses
    if ((shExpMatch(host, "127.0.0.1"))

                 || (shExpMatch(host, "*.domain1.com"))
                 || (shExpMatch(host, "*.domain2.com"))
                 || (shExpMatch(host, "*.domain3.com"))
                 || (shExpMatch(host, "domain3.com"))


         ) { return "DIRECT"; }


if (url.substring(0, 5) == 'http:' ||
url.substring(0, 6) == 'https:' ||
url.substring(0, 4) == 'ftp:')
{
return "PROXY <Proxy1>:8080; PROXY <Proxy2>:8080";
}
return 'DIRECT';
}

答案1

首先,这是非法的 -shExpMatch(url, "*.internaldomain1.com"因为它并不总是正则表达式。这是合法的:

shExpMatch(url, "*.internaldomain1.com/*")

或者

shExpMatch(host, "*.internaldomain1.com")

您有主机匹配,但新 PAC 有 URL 匹配。不确定它是否与代理站点问题有关。为此,我们必须知道拒绝意味着什么 - 访问哪个站点时出现什么错误。

相关内容