c# - .NET 代理检测

标签 c# .net proxy

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

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

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

WebRequest.GetSystemWebProxy().GetProxy(目标);

GlobalProxySelection.Select.GetProxy(目的地);

WebRequest.DefaultWebProxy

以下是我的建议:

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

最佳答案

我找到了解决方案。

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

NET STOP WinHttpAutoProxySvc
NET START WinHttpAutoProxySvc

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

我是按照 James Kovacs 关于附加调试器的建议找到的。在我发布问题之前,我已经通过代码反射(reflect)并尝试附加调试器失败,但无法准确破译发生了什么。选项用完了,我再次尝试调试,几个小时后,我在 _AutoPWebProxyScriptEngine.cs 的第 76 行找到了以下注释,这让我有了这个发现

        // 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. 

关于c# - .NET 代理检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4434285/

相关文章:

c# - 如何使用 TreeViewDrawMode.OwnerDrawAll 更改 TreeView 中选定节点的背景颜色?

c# - 共享库 App.Config

带有代理的 Python 请求导致 SSLError WRONG_VERSION_NUMBER

c# - WPF-MVVM : How to Check/Uncheck all Items in a ListView

c# - Visual Studio 全新安装 - 图形问题

c# - NDesk.选项 : how to register required parameters correctly?

authentication - 在需要身份验证的代理后面使用 ELPA (Emacs)

docker - nginx proxy_pass 导致 404 Not Found 页面

c# - 将泛型方法中的类型转换为不同的类型以进行内部泛型方法调用

c# - 什么用于 System.Windows.Forms.Control.ControlCollection 中的键?