Подтвердить что ты не робот

Использование Fiddler для обнюхивания запросов Visual Studio 2013 (прокси-брандмауэр)

У меня возникают проблемы с Visual Studio 2013 и нашим корпоративным прокси (подпись не работает, обновления не работают, визуальная галерея студии не работает, 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>

Update

Эрик, я принял ваше предложение и просто добавил его в файл 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 не отправляет строку user-agent. Он знает о # 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>
4b9b3361

Ответ 1

Если вы хотите посмотреть трафик с помощью Fiddler, вы, вероятно, захотите пойти по пути изменения файла machine.config, чтобы все приложения .NET отправляли трафик через Fiddler. Это помогает обеспечить захват данных из процессов, запущенных в службах, и т.д.

Откройте machine.config в папке C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config. Обратите внимание, что если вы отлаживаете 64-битную услугу (например, ASP.NET), вам нужно искать в папке Framework64 вместо папки Framework. Аналогично, если вы используете версию .NET до 4.0, вам нужно будет отрегулировать часть версии пути.

Добавьте следующий 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>

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

Примечание. Вы можете использовать Fiddler для вставки заголовка User-Agent в исходящие запросы, если хотите. Кроме того, в последней версии Fiddler вы можете File > Import > Packet Capture собирать HTTP-трафик из файлов .cap, захваченных с помощью Microsoft NetMon или Microsoft Message Analyzer.

Ответ 2

Мой босс предложил еще один простой способ решить эту проблему. Вы можете просто добавить "скрипач" в uri. Например: http://localhost:52101/http://localhost.fiddler:52101/

Ответ 3

В качестве альтернативы вы можете использовать легкий способ, например:

if (Debugger.IsAttached)             {                 request.Proxy = новый WebProxy ( "http://localhost:8888/", true);             }