使用Fiddler来嗅探Visual Studio 2013请求(代理防火墙)

47

我在使用Visual Studio 2013时遇到了与我们公司代理有关的问题(登录无法成功,更新无法进行,Visual Studio Gallery无法使用,nuget和git等都失败)。所有这些都需要进行http或https请求。(例如:http://visualstudiogallery.msdn.microsoft.com/)在VS2013中,我只能看到旋转进度条或者“无网络连接”的消息。

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

所以我想弄清楚为什么VS2013不能正常工作。但是当我要求Fiddler2监视DEVENV.EXE进程(或所有进程)时,我看不到任何流量。

顺便说一下,我已经尝试过对web.config(devenv.exe.config)文件进行一些更改,以确保它使用代理(我在Stack Builder中看到了这个方法),但对我来说并没有起作用。请参见下面关于 <system.net> 部分的添加内容:

    <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,会用凭据回复,但网关仍然需要一个用户代理。

我发现的是,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>

但我的问题不是关于在VS2014中运行程序(DEBUG等)的问题。我正在使用我的帐户在VS2014下运行它(而不是由VS启动的作业)。问题出现在VisualStudio本身上(它需要进行GIT、NUGET、Sign-IN等操作),所有这些操作都要连接到微软网站。但我无法确定哪些网站被阻止了。 - Dr.YSG
听起来很有道理。我查看了C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config,发现<system.web>部分和<system.net>还没有出现。但是我注意到上面提到的更改VS2013本身的web.config(devenv.exe.config)应该已经强制VS使用fiddler。我很惊讶它没有这样做。我会测试两种方法并回报结果(但我要去度假,可能要等一下)。 - Dr.YSG
你能把你的答案放在一个单独的帖子里吗?这样我就可以点赞并给你解决这个问题的功劳。 - Dr.YSG
3个回答

42

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

在文件夹 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config 中打开 machine.config。请注意,如果您正在调试一个64位服务(如ASP.NET),您将需要查看 Framework 文件夹而不是 Framework64 文件夹。同样,如果您使用的是 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中,您可以通过“File > Import > Packet Capture”从使用Microsoft NetMon或Microsoft Message Analyzer捕获的.cap文件中收集HTTP流量。


1
非常有帮助,谢谢Eric。我可以确认这也可以成功地与Charles代理一起使用。 - lux
1
我想补充一下,我在使用Visual Studio + Resharper时遇到了问题,许可证无法正常工作。如果您进行此更改,然后在Fiddler中更改端口,请小心。您将面临这样的问题,即Resharper许可证服务器(在此示例中)无法解析。显然,这是由于代理信息不匹配造成的,但这只是提醒大家要注意的事情。我忘记了我已经做出了这个更改,结果让我受苦了两周! - askrich
2
我的 machine.config 文件中没有一个 <system.net> 的实例。可能是因为更高版本的框架进行了模式更新吗?(我在与 machine.config 文件相同目录下的 web.config 中看到了该节点)。我有什么遗漏吗? - Sergey
1
@EricLaw 我们应该在 machine.config 中的哪里添加 <system.net>?它应该是 <configuration> 的子元素吗? - Josh Noe
1
不要忘记在不再需要Fidller时删除该元素。没有它,VS可能会非常有问题(试图连接到不存在的代理)。 - Gh61
显示剩余3条评论

13

1
这是个好主意,但对我没用:在IE凭据弹出窗口中输入凭据后,我遇到了HTTP错误401.1 - 未经授权的问题。刷新站点后,我得到了“[Fiddler]连接到'localhost'失败。错误:ConnectionRefused(0x274d)。System.Net.Sockets.SocketException无法建立连接,因为目标计算机积极拒绝了127.0.0.1:4453”。直接通过Visual Studio运行网站时,凭据弹出窗口不会出现。你能帮忙吗? - Matt
对我有用。谢谢! - Alireza
我也可以加上一个“对我有用”的评价。这是一个简单而快速的解决方案。 - Dan

9
或者你可以使用轻量级的方式,如下所示:

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


该代码段为C#代码,意思是当调试器处于附加状态时,使用本地代理服务器进行请求。

什么是WebProxy?它是dotnet中的任何类吗?我在使用VS2013时尝试查找此类,但没有运气。 - Mou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接