在 .NET 下,Fiddler 不再抓取 Web Service 流量问题

问题现象

原来的一个应用中,需要访问 SOAP 服务。在原来的 .NET Framework 版本中,使用 Fiddler 是可以抓取到访问这个 Web Service 的 SOAP 流量的。在迁移到 .NET 之后, Fiddler 就不能再抓取到 SOAP 流量了。

问题分析

Fiddler 通过将自己设置为 WinINET 网络的代理。

在 .NET 环境下,使用了 WCF dotnet-svcutil tool for .NET Core 来生成 Web 服务的客户端代理。

WCF 本身使用 WinHTTP 的网络,而不是 WinINET

WinHTTP 主要被设计用于基于服务器的场景,这些服务器应用使用 HTTP 通讯。

而 WinINet 主要被设计用于桌面应用作为 HTTP 的客户端的场景。WinINet 提供一些用于用户凭据接口的操作,例如收集用户的凭据。在一些场景下,它可以显式网络的错误信息,或者弹出连接网络的窗口。如果你在后台服务上使用它,或者在无人值守的应用上使用它,但是不能处理这些弹出的交互窗口,它就会阻塞你的应用。这就是为什么服务器端不应该使用 WinINet 的原因,除非你确认用户会坐在计算机前面进行交互,可以处理类似 "Setup connection" 之类的对话或者错误信息。

所以,需要将 WinHTTP 网络的代理配置为 Fiddler 所支持的代理。

解决方案

Fiddler 默认已经将代理设置到系统的 WinINet 上,这个代理就是浏览器中使用的代理。所以,我们既可以直接将浏览器的代理同步到 WinHTTP 网络上,也可以手工配置它的代理。

对所有应用使用 IE 的代理配置

在 Windows 上,浏览器的代理被称为 ie 的代理。可以使用下面的方式将它同步到 WinHTTP 上。

使用 netsh winhttp import proxy source=ie 可以将 IE 的代理配置应用到 WinHTTP 网络上。

C:\windows\system32>netsh winhttp import proxy source =ie

Current WinHTTP proxy settings:

    Proxy Server(s) :  http=127.0.0.1:8888;https=127.0.0.1:8888
Bypass List : <-loopback>

检查 WinHTTP 网络代理设置

使用 netsh winhttp show proxy 来检查当前的代理配置。

> netsh winhttp show proxy

Current WinHTTP proxy settings:

    Direct access (no proxy server).

在有代理存在的时候,可以看到当前的代理配置。

> netsh winhttp show proxy

Current WinHTTP proxy settings:

    Proxy Server(s) :  127.0.0.1:8888
Bypass List : (none)

配置 WinHTTP 网络代理

可以手工设置 WinHTTP 使用的代理,使用 netsh winhttp set proxy 配置网络代理。

>netsh winhttp set proxy 127.0.0.1:8888

Current WinHTTP proxy settings:

    Proxy Server(s) :  127.0.0.1:8888
Bypass List : (none

重置 WinHTTP 代理

使用 netsh winhttp reset proxy 命令重置 WinHTTP 网络的代理。

>netsh winhttp reset proxy

Current WinHTTP proxy settings:

    Direct access (no proxy server).

抓取的数据示例

正确配置 WinHTTP 网络的代理之后,就可以使用 Fiddler 抓取到 SOAP 访问的流量。下面是访问 SSRS 服务的一个简单实例。

请求示例

POST http://sample.com/ReportServer/ReportService2010.asmx HTTP/1.1
Host: sample.com
Cache-Control: no-cache, max-age=0
SOAPAction: "http://schemas.microsoft.com/sqlserver/reporting/2010/03/01/ReportServer/FindItems"
Expect: 100-continue
Accept-Encoding: gzip, deflate
Content-Type: text/xml; charset=utf-8
Content-Length: 551 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FindItems xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/03/01/ReportServer">
<Folder>/Sample</Folder>
<BooleanOperator>And</BooleanOperator>
<SearchOptions/>
<SearchConditions>
<SearchCondition>
<Condition>Equals</Condition>
<Values>
<Value>SampleReport</Value></Values>
<Name>Name</Name>
</SearchCondition>
</SearchConditions>
</FindItems>
</s:Body>
</s:Envelope>

响应

HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Length: 1684
Content-Type: text/xml; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
X-AspNet-Version: 4.0.30319
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Date: Mon, 22 Jul 2024 02:54:55 GMT <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
<ServerInfoHeader xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/03/01/ReportServer">
<ReportServerVersionNumber>2018.160.1115.96</ReportServerVersionNumber>
<ReportServerEdition>Standard</ReportServerEdition>
<ReportServerVersion>Microsoft SQL Server Reporting Services Version 16.0.1115.96</ReportServerVersion>
<ReportServerDateTime>2024-07-22T10:54:55</ReportServerDateTime>
<ReportServerTimeZoneInfo>
<Bias>-480</Bias>
<StandardBias>0</StandardBias>
<StandardDate>
<year>0</year>
<month>0</month>
<dayOfWeek>0</dayOfWeek>
<day>0</day>
<hour>0</hour>
<minute>0</minute>
<second>0</second>
<milliseconds>0</milliseconds>
</StandardDate>
<DaylightBias>-60</DaylightBias>
<DaylightDate>
<year>0</year>
<month>0</month>
<dayOfWeek>0</dayOfWeek>
<day>0</day>
<hour>0</hour>
<minute>0</minute>
<second>0</second>
<milliseconds>0</milliseconds>
</DaylightDate>
</ReportServerTimeZoneInfo>
</ServerInfoHeader>
</soap:Header>
<soap:Body>
<FindItemsResponse xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/03/01/ReportServer">
<Items>
<CatalogItem>
<ID>de678150-93d4-4270-ac77-df1d8098f170</ID>
<Name>SampleReport</Name>
<Path>/SampleReport</Path>
<TypeName>Report</TypeName>
<Size>1381492</Size>
<CreationDate>2024-06-24T15:24:53.877</CreationDate>
<ModifiedDate>2024-06-24T15:24:53.877</ModifiedDate>
<CreatedBy>XXXXX</CreatedBy>
<ModifiedBy>XXXXXX</ModifiedBy>
<ItemMetadata />
</CatalogItem>
</Items>
</FindItemsResponse>
</soap:Body>
</soap:Envelope>

参考

在 .NET 下,Fiddler 不再抓取 Web Service 流量问题的更多相关文章

  1. Fiddler无法抓取web项目中的http请求解决方案

    问题:webform项目中对接API使用Fiddler无法获取该API的请求,该webform比较老的一个项目, 同一个API写在控制台可以抓取到请求,用web项目放在本地IIS却不行,使用IIS E ...

  2. fiddler如何抓取https接口

    1.Fiddler工作原理:    Fiddler 是以代理 web 服务器的形式工作的,它使用代理地址:127.0.0.1端口:8888. 当 Fiddler 退出的时候它会自动注销,这样就不会影响 ...

  3. 《吐血整理》高级系列教程-吃透Fiddler抓包教程(34)-Fiddler如何抓取微信小程序的包-上篇

    1.简介 有些小伙伴或者是童鞋们说小程序抓不到包,该怎么办了???其实苹果手机如果按照宏哥前边的抓取APP包的设置方式设置好了,应该可以轻松就抓到包了.那么安卓手机小程序就比较困难,不是那么友好了.所 ...

  4. 如何让Fiddler可以抓取https的请求

    转自:https://jingyan.baidu.com/article/00a07f38bb4f4682d028dcd2.html Fiddler通过在本机开启了一个http的代理服务器来进行htt ...

  5. fiddler无法抓取chrome解决方法

    前端开发中,不可避免的要和服务器端进行联调,少了fiddler这个利器可不行. 由于无线开发需要配置UA,我使用chrome进行访问,但是今儿一早过来,发现fiddler无法抓取chrome的请求了. ...

  6. [Fiddler]如何让Fiddler可以抓取https的请求

    Fiddler通过在本机开启了一个http的代理服务器来进行http请求和响应转发,默认情况下,并不能抓取https的请求.下面小编就来介绍下,如何用fiddler来抓取https的请求. 1.打开F ...

  7. 《吐血整理》高级系列教程-吃透Fiddler抓包教程(35)-Fiddler如何抓取微信小程序的包-下篇

    1.简介 通过前边和宏哥的学习,我们了解到Android 7.0 之后增加了对第三方证书的限制,抓包工具(charles.fiddler等)提供的证书都无法通过校验,也就无法抓取HTTPS请求了,对测 ...

  8. Fiddler捕获抓取 App端数据包

    最近项目设计到App抓包,所以采用Fiddler工具来采集获取APP数据包,但是fiddler对有些app是无法捕获到数据包的,以下是我的处理方法: 1. 我默认代理端口使用的是自定义的端口而不是默认 ...

  9. 在python3下使用OpenCV 抓取摄像头图像并实时显示3色直方图

    以下代码为在Python3环境下利用OpenCV 抓取摄像头的实时图像, 通过OpenCV的 calHist函数计算直方图, 并显示在3个不同窗口中. import cv2 import numpy ...

  10. fiddler如何抓取夜神模拟器上的包

    一.设置Fiddler代理 1.点击Tools-Fiddler Options进入Fiddler Options页面 2.点击Connections,将Fiddler listens on port设 ...

随机推荐

  1. 小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM

    小米 13T Pro 是一款性能卓越.设计精美的旗舰机型,具备多项领先配置,且在与前一代产品及友商机型的对比中优势明显,值得深入探讨. 性能提升 小米 13T Pro 搭载了最新的 天玑 9200+ ...

  2. 墨天轮访谈 | SelectDB 衣国垒:Apache Doris(incubating)1.0版本特性解析与未来规划

    分享嘉宾:衣国垒 Apache Doris Committer.SelectDB 联合创始人&CTO 整理:墨天轮社区 导读 大家好,我是来自Apache Doris社区的衣国垒,也是Sele ...

  3. 墨天轮访谈 | OceanBase 白超:海量数据管理,为什么选择OceanBase?

    分享嘉宾:白超(大窑) OceanBase解决方案架构师.前蚂蚁集团数据库团队DBA专家 整理:墨天轮社区 导 读 大家好,我是白超(花名:大窑),在过去的几年中,作为蚂蚁集团数据库SRE团队成员,经 ...

  4. Docker高阶篇(一)

    本篇章主要为工作实践过程中对高端应用的处理和把控 1.Docker复杂安装 mysql的主从复制 https://www.bilibili.com/video/BV1gr4y1U7CY?p=41&am ...

  5. 斜率优化DP简单总结&&“土地购买”题解

    今天刚刷完了斜率优化DP,简单从头回顾一下. \[首先,能写出DP方程应该是最重要的,毕竟斜率只是用来优化的 \] 那么一个DP方程能用斜率优化,具备一种形式: \[f[i]+s1[i]+A[i]*B ...

  6. 1553B总线测试仪

    1553B总线测试仪-天津光达航电科技有限公司在测试模拟1553B总线的标准化测试仪器,该仪器是通过简单直观的管理工具实现复杂的MIL-STD-1553的测试及模拟功能,主要包括对MIL-STD-15 ...

  7. KubeSphere 助力提升研发效能的应用实践分享

    作者:卢运强,主要从事 Java.Python 和 Golang 相关的开发工作.热爱学习和使用新技术:有着十分强烈的代码洁癖:喜欢重构代码,善于分析和解决问题.原文链接. 我司从 2022 年 6 ...

  8. springboot-实现excle文件导出的单元格相同内容合并

    导出excle文件中的单元格有些需要合并如何操作 例如:左边的表格想合并单元格成右边的表格更加便于观看           一.依赖文件 <!-- excle操作--> <depen ...

  9. ABC372 (D,E)

    ABC372 (D,E) D 一道比较简单的二分查找题目. 观察到每个数能成为 \(j\) 的条件是独立的,因此想到统计每个数能成为它前面哪些数的 \(j\). 对于每个\(ed​\), 二分 \(1 ...

  10. 2024/9/16 CSP-S模拟赛试题

    A 这题是很有意思的一个题,思路就是你考虑kt的位置只可能在四个角,因为这种情况下,他的距离才会最远对吧,所以你就暴力找另一个人fengwu的点的位置,然后计算他们之间的距离然后你求一个\(\max\ ...