如何在 Windows 8.1(IE11 和现代 UI)上调试 PAC(代理自动配置)?

如何在 Windows 8.1(IE11 和现代 UI)上调试 PAC(代理自动配置)?

在 Windows 7 + IE10 等较旧的系统上,调用 PAC 文件中的“alert()”会导致显示对话框。但是,在 Windows 8.1 上,即使 IE11 似乎正在使用 PAC,也不会显示任何对话框。

我目前的情况是 IE11 可以正常使用 (SOCKS) 代理(由 PAC 返回),但 Modern UI 应用完全与互联网断开连接。IE11 和 Modern UI 似乎对 PAC 设置的处理方式不同,但我找不到调试它的方法。

总而言之,我的问题是

  1. 我该如何使用IE11在 Windows 8.1 上?
  2. 我该如何使用现代用户界面在 Windows 8.1 上?

答案1

IE11 PAC 文件更改

微软对 IE11 处理本地 PAC 文件的方式进行了更改。您可以阅读有关它们的信息这里或参阅下文了解一些快速信息。

另请注意,alert()语句不再工作从 Windows 8 开始。


使用 IE11 时,除非添加以下注册表项,否则无法再通过文件协议使用 PAC 文件:

[HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings]
(DWORD)"EnableLegacyAutoProxyFeatures"=1

PAC 文件通过文件协议示例

笔记:使用 Windows 8 或更高版本时将不再出现警报语句!


使用 AUTOPROX 调试 PAC 文件下载链接

有时,您只需要测试您的 PAC 文件,看看是否返回了预期的路由,尽管您无法访问相关网站。对于此类测试,您可以使用 Pierre-Louis Coll 创建的(随附)命令行实用程序工具 autoprox.exe。

当以无附加参数的方式启动它时,CMD将显示用法:

C:\temp>autoprox
Version : 2.1.0.0
Written by [email protected]
Usage : AUTOPROX -s  (calling DetectAutoProxyUrl and saving wpad.dat file in temporary file)
Usage : AUTOPROX  [-h] url [Path to autoproxy file]
       -h: calls InternetInitializeAutoProxyDll with helper functions implemented in AUTOPROX
AUTOPROX url: calling DetectAutoProxyUrl and using WPAD.DAT logic to find the proxy for the url
AUTOPROX url path: using the autoproxy file from the path to find proxy for the url
Example: autoprox -s
Example: autoprox http://www.microsoft.com
Example: autoprox -h http://www.microsoft.com c:\inetpub\wwwroot\wpad.dat
Example: autoprox http://www.microsoft.com http://proxy/wpad.dat

以下是我们的示例的输出:

C:\temp>autoprox http://us.msn.com c:\temp\sample.pac
The Winsock 2.2 dll was found okay
url: http://us.msn.com
autoproxy file path is : c:\temp\sample.pac
Calling InternetInitializeAutoProxyDll with c:\temp\sample.pac
        Calling InternetGetProxyInfo with url http://us.msn.com and host us.msn.com
        Proxy returned for url http://us.msn.com is:
PROXY myproxy:80;

当你想查看调用了哪些 DNS 相关函数时,可以另外使用参数“-h”:这里是使用此选项时的输出:

C:\temp>autoprox -h http://us.msn.com c:\temp\sample.pac
The Winsock 2.2 dll was found okay
Will call InternetInitializeAutoProxyDll with helper functions
url: http://us.msn.com
autoproxy file path is : c:\temp\sample.pac
Calling InternetInitializeAutoProxyDll with c:\temp\sample.pac
        Calling InternetGetProxyInfo with url http://us.msn.com and host us.msn.com
ResolveHostByName called with lpszHostName: us.msn.com
ResolveHostByName returning lpszIPAddress: 65.55.206.229
        Proxy returned for url http://us.msn.com is:
PROXY myproxy:80;

autoprox.exe 中的错误处理:

  1. 当您指定一个不存在的 PAC 文件(例如命令行中的拼写错误)时,autoprox.exe 的结果将是:

    ERROR: InternetInitializeAutoProxyDll failed with error number 0x6 6.

  2. 当 Pac 文件包含语法错误时,您通常会收到以下消息:

    ERROR: InternetGetProxyInfo failed with error number 0x3eb 1003.

完成本地测试后,应将 PAC 文件复制到 Web 服务器,然后通过 http 协议进行访问。

答案2

有一个工具pactester解析器,@oviava 在评论中提到过,它适用于 Windows 和基于 Unix 的系统,包括 Linux(例如sudo apt install libpacparser1)和 MacOS(例如brew install pacparser)。这可用于测试 PAC 文件 - 它将显示该 URL 的预期行为或报告 PAC 文件中的任何错误。例如

pactester -p your_pac_file.pac -u http://www.test_site.com 

相关内容