gpt4 book ai didi

c# - .NET 代理检测

转载 作者:可可西里 更新时间:2023-11-01 08:12:24 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com