【问题标题】:.NET proxy detection.NET 代理检测
【发布时间】:2011-05-24 23:21:01
【问题描述】:

我在 .NET 检测通过 Internet Explorer 配置的代理设置时遇到问题。

我正在编写一个支持代理的客户端应用程序,为了进行测试,我设置了一个由 9 个 squid 服务器组成的数组,以支持 HTTP 和 HTTPs 的各种身份验证方法。我有一个脚本,可以将 IE 更新为我选择的任何配置(代理、通过“自动”检测、PAC 或硬代码)。

我尝试了以下 3 种方法来通过 .NET 检测 IE 配置。有时我注意到 .NET 选择了错误的代理服务器集。 IE 有正确的设置,如果我用 IE 浏览网页,我可以看到我通过 wireshark 访问了正确的服务器。

WebRequest.GetSystemWebProxy().GetProxy(destination);

GlobalProxySelection.Select.GetProxy(destination);

WebRequest.DefaultWebProxy

以下是我的建议:

  • 我的脚本在网络服务器上设置一个 PAC 文件,并更新 IE 中的配置,然后清除 IE 的缓存
  • .NET 似乎在某个代理配置上“卡住”了,我必须为 .NET 设置另一个配置才能意识到发生了变化。有时它似乎会选择一些随机的服务器集(我确信它们不是随机的,只是我使用过的一组服务器,并且在一些缓存的 PAC 文件或其他东西中)。如,我将检查目标“https://www.secure.com”的代理,我可能已经配置了 IE,因此期望得到“http://squidserver:18”,而不是返回“http ://squidserver:28"(端口 18 运行 NTLM,28 运行无需身份验证)。所有 squid 服务器都可以正常工作。
  • 这似乎不是 XP 上的问题,只有 Vista、2003 和 windows 7。
  • 在 IE 中硬编码代理服务器总是有效的
  • 时间总能解决问题 - 如果我离开计算机大约 20 或 30 分钟然后回来,.NET 会选择正确的代理设置,就像缓存的 PAC 脚本过期一样。

【问题讨论】:

  • 你不能使用 UseDefaultProy 吗?
  • 使用默认代理?在网上找不到任何东西。
  • 不知道为什么我对此一无所知 - 同样的问题。问题更新了
  • 为什么不检查 .NET Framework 源代码,看看它实际上在做什么?您可以在此处从 Microsoft 下载它:referencesource.microsoft.com/Default.aspx 您还可以通过 Visual Studio 中的代理代码进行调试,以查看它在做什么以及从何处获取其代理值。

标签: c# .net proxy


【解决方案1】:

我遇到了同样的问题,我成功地在注册表中获取/设置代理设置:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]   
"ProxyServer"="<your proxy IP address>:8080"
"ProxyEnable"=dword:00000001
"ProxyOverride"="<local>"

【讨论】:

  • 感谢您的提示,拉杜。不幸的是,我只想检测代理设置,而不是设置它们,如果 IE 设置为自动检测代理,则围绕此键的 reg 设置无济于事。而且我宁愿不编写自己的自动代理检测器。
【解决方案2】:

我找到了解决办法。

.NET 使用“WinHttp Web 代理自动发现服务”来执行 PAC 脚本执行,并且可能会缓存结果。只需停止并重新启动此服务即可。以下命令行为我执行此操作。

NET STOP WinHttpAutoProxySvc
NET START WinHttpAutoProxySvc

http://wiki.blackviper.com/wiki/WinHTTP_Web_Proxy_Auto-Discovery_Service

我是按照 James Kovacs 的附加调试器的建议发现的。在我发布问题之前,我已经通过代码进行了反映,并尝试附加调试器失败,但无法准确解读发生了什么。用完了选项,我再次尝试调试,几个小时后,在第 76 行的 _AutoPWebProxyScriptEngine.cs 中发现了以下注释,导致我发现了这一点

        // In Win2003 winhttp added a Windows Service handling the auto-proxy discovery. In XP using winhttp
        // APIs will load, compile and execute the wpad file in-process. This will also load COM, since 
        // WinHttp requires COM to compile the file. For these reasons, we don't use WinHttp on XP, but
        // only on newer OS versions where the "WinHTTP Web Proxy Auto-Discovery Service" exists. 

【讨论】:

  • 链接已失效。我发现这个链接看起来像相同的信息,但我不会编辑这个问题,因为我不能 100% 确定这是否真的是同一件事。 blackviper.com/windows-services/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多