【问题标题】:Using Fiddler to sniff Visual Studio 2013 requests (proxy firewall)使用 Fiddler 嗅探 Visual Studio 2013 请求(代理防火墙)
【发布时间】:2014-01-10 16:49:55
【问题描述】:

我在使用 Visual Studio 2013 和我们的公司代理时遇到问题(登录不起作用、更新不起作用、visual studio 库不起作用、nuget 和 git 失败)。所有这些都在做 http 或 https 请求。 (例如http://visualstudiogallery.msdn.microsoft.com/)。在 VS2013 中,我只会看到旋转的进度条或关于没有网络连接的消息。

浏览器(chrome、IE、firefox)没有问题,因为它们都理解代理(407 拒绝,然后用凭据响应)。

所以我想弄清楚为什么VS2013不起作用。但是当我告诉 fiddler2 观察 DEVENV.EXE 进程(或所有进程)时,我看不到任何流量。

顺便说一句,我已经尝试对 web.config (devenv.exe.config) 文件进行一些更改,以确保它进入代理(我在堆栈生成器中看到了这个),但它对我不起作用。请参阅以下部分的补充内容:

    <system.net>
                <defaultProxy useDefaultCredentials="true" enabled="true">
                 <proxy proxyaddress="http://gw6.OURSITE.com:3128" />
                </defaultProxy>
      <settings>
        <ipv6 enabled="true"/>
        <servicePointManager expect100Continue="false" />
       </settings>
    </system.net>

更新

Eric,我采纳了您的建议,并将其放入 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe.config 文件中。

我输入的是:

  <system.net>
    <defaultProxy useDefaultCredentials="true" enabled="true">
      <proxy autoDetect="false" bypassonlocal="false" proxyaddress="http://127.0.0.1:8888" usesystemdefault="false" />
    </defaultProxy>
  </system.net>

我发现 VS2013 没有发送用户代理字符串。它确实知道 #407 naks 并使用凭据进行回复,但网关仍然需要用户代理:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Proxy-Connection: close
Connection: close
Content-Length: 1341

<html>
    <head>
        <title>Access Policy Denied: No User-Agent Specified</title>
        <meta name="description" content="Web Access Policy">
    </head>
    <body>

【问题讨论】:

  • 但我的问题不在于使用 Visual Studio 作为 VS2014 的(DEBUG 等)运行的程序。我在我的帐户下运行 VS2014(不是由 VS 启动的工作)。问题出在 VisualStudio 本身(它需要执行 GIT、NUGET、登录等)都去微软网站。但是这里看不到哪些被屏蔽了。
  • 听起来很有道理。我查看了 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config 并发现 部分和 尚不存在。但是我上面确实提到的是,更改 VS2013 本身的 web.config (devenv.exe.config) 应该迫使 VS 去提琴手。我很惊讶它没有。我将测试两者并报告(但我要去度假,所以可能需要等待)。
  • 您能否将您的答案写成单独的帖子,以便我为它加注星标并感谢您解决此问题?

标签: visual-studio proxy wcf-security fiddler ntlm


【解决方案1】:

如果您想使用 Fiddler 查看流量,您可能需要更改machine.config 文件的路径,以便所有 .NET 应用程序都将通过 Fiddler 发送流量。这有助于确保您从服务等运行的进程中捕获数据。

在文件夹C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config 中打开machine.config。 请注意,如果您正在调试 64 位服务(如 ASP.NET),您需要查看 Framework64 文件夹而不是 Framework 文件夹。同样,如果您使用的是 4.0 之前的 .NET 版本,则需要调整路径的版本部分。

将以下 XML 块添加为现有 system.net 元素的对等点,替换任何现有的 defaultProxy 元素(如果存在):

<!-- The following section is to force use of Fiddler for all applications, including those running in service accounts -->
 <system.net>
 <defaultProxy
                 enabled = "true"
                 useDefaultCredentials = "true">
 <proxy autoDetect="false" bypassonlocal="false" proxyaddress="http://127.0.0.1:8888" usesystemdefault="false" />
 </defaultProxy>
 </system.net>

参考http://fiddler2.com/blog/blog/2013/01/08/capturing-traffic-from-.net-services-with-fiddler

注意:如果您愿意,可以使用 Fiddler 在出站请求中注入 User-Agent 标头。此外,在最新版本的 Fiddler 中,您可以通过文件 > 导入 > 数据包捕获从使用 Microsoft NetMon 或 Microsoft 消息分析器捕获的 .cap 文件中收集 HTTP 流量。

【讨论】:

  • 超级有帮助,谢谢埃里克。我可以确认这也适用于 Charles 代理。
  • 我想补充一下,我在使用 Visual Studio + Resharper 时遇到了问题,并且许可无法正常工作。进行此更改时要小心,然后在 Fiddler 中更改端口。您将面临 Resharper 许可证服务器(在此示例中)无法解决的问题。显然这是由于代理信息不匹配造成的,但这只是人们需要注意的事情。我忘了我做了这个改变,它烧了我 2 周!
  • 我的 machine.config 文件没有 &lt;system.net&gt; 的单个实例。会不会是框架的更新版本有架构更新? (我确实web.config 中看到该节点,该节点与 machine.config 文件位于同一目录中)。我错过了什么吗?
  • @EricLaw 我们应该在哪里添加&lt;system.net&gt; machine.config?它应该是&lt;configuration&gt; 的孩子吗?
  • 当您不再需要 Fiddler 时,不要忘记删除该元素。没有它,VS 可能真的有问题(试图连接到不存在的代理)。
【解决方案2】:

我的老板提出了另一种简单的方法来解决这个问题。您可以在 uri 中添加“fiddler”。例如:http://localhost:52101/ --> http://localhost.fiddler:52101/

【讨论】:

  • 这是个好主意,但它对我不起作用:在 IE 凭据弹出对话框中输入凭据后,我收到 HTTP 错误 401.1 - 未经授权。刷新站点后,我收到“[Fiddler] The connection to 'localhost' failed. Error: ConnectionRefused (0x274d). System.Net.Sockets.SocketException No connection could be made because the target machine positively denied it 127.0.0.1: 4453”。直接通过 Visual Studio 运行网站时,不会出现凭据弹出窗口。你能帮忙吗?
  • 为我工作。谢谢!
  • 我也可以添加“为我工作”。不错且快速的解决方案。
【解决方案3】:

或者你可以使用轻量级的方式,比如;

if (Debugger.IsAttached) { request.Proxy = new WebProxy("http://localhost:8888/", true); }

【讨论】:

  • 什么是 WebProxy ?它是 dotnet 中的任何课程吗?我尝试在使用 VS2013 时找到这个类,但没有运气。
猜你喜欢
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多