一、Statistics分析工具
在Fiddler中,Statistics(统计)功能是一个强大的分析工具,用于汇总和可视化网络流量的关键指标。
1.Statistics
统计总界面
以www.baidu.com. web页面搜索fiddler为例的。
2.单个HTTP请求的流量细节
-
Request Count: 1
-
含义:该会话中完成的HTTP请求总数
-
作用:反映页面加载或API调用触发的总请求数,帮助识别冗余请求
-
-
Bytes sent: 3,305 (headers: 3 , 305 : body: 0)
- 总发送量:3,305 Bytes
- Headers:3,305 Bytes(占100%)
- Body:0 Bytes
- **解读:**这是一个仅包含请求头,无请求体的请求(如GET请求获取数据,或POST请求但Body为空)
- 总发送量:3,305 Bytes
-
Bytes Received: 800 (headers:118: body: 682)
- 总接收量:800 Bytes
- Headers:118 Bytes(占14.75%)
- Body:682 Bytes(占85.25%)
- 解读:响应以Body内容为主(如JSON数据、小图片或HTML片段),Headers占比较小。
- 总接收量:800 Bytes
3.实际性能
指标 | 含义 | |
---|---|---|
ClientConnected | 客户端创建连接时间 | |
ClientBeginRequest | 客户端开始请求时间 | |
GotRequestHeaders | 获取请求头的时间 | |
ClientDoneRequest | 客户端完成请求时间 | |
Determine Gateway | 确定网关 | |
DNS Lookup | 域名解析耗时 | |
TCP/IP Connect | 建立TCP连接 | |
HTTPS Handshake | SSL/TLS 协商消耗 仅限HTTPS | |
ServerConnected | 服务器创建连接时间 | |
FiddlerBeginRequest | Fiddler代理服务器开始请求 | |
ServerGotRequest | 服务器获得请求时间 | |
ServerBeginResponse | 服务器开始响应时间 | |
GotResponseHeaders | 获取响应头时间 | |
ServerDoneResponse | 服务器完成响应时间 | |
ClientBeginResponse | 客户端开始响应时间 | |
ClientDoneResponse | 客户端完成响应时间 |
3.1 关键步骤解析
- 客户端阶段
ClientConnected
: 客户端与Fiddler建立连接。ClientBeginRequest
: Fiddler开始处理客户端请求。GotRequestHeaders
: Fiddler接收到完整的请求头。ClientToServerRequest
: Fiddler将请求转发给服务器。
- 网络与服务器端阶段
DNS Lookup
: 域名解析耗时(若未缓存)。TCP/IP Connect
: 建立TCP连接(含SSL握手前的TCP三次握手)。HTTPS Handshake
: SSL/TLS协商耗时(仅HTTPS)。ServerConnected
: Fiddler与服务器建立连接。FiddlerBeginRequest
: Fiddler开始发送请求到服务器。serverGotRequest
: 服务器接收到请求。serverBeginResponse
: 服务器开始处理并返回响应头。
- 响应阶段
GotResponseHeaders
: Fiddler接收到响应头。ServerDoneResponse
: 服务器完成响应发送。ClientBeginResponse
: Fiddler开始将响应转发给客户端。ClientToServerResponse
: 响应数据完全送达客户端。
3.2 调试技巧
- 使用Fiddler计时器
- 在会话列表中启用
Timing
列,查看各请求的全链路耗时。 - 通过
Statistics > Timeline
分析时间分布
- 在会话列表中启用
- 对比多次请求
- 检查首次请求(含DNS/TCP开销)与后续请求(可能命中缓存)的耗时差异。
- 结合浏览器开发者工具
- 对比Fiddler统计与浏览器
Network
面板的DOMContentLoaded
/Load
时间,定位前端渲染瓶颈
- 对比Fiddler统计与浏览器
4 响应字节
响应数据按内容类型分析
-
text/html
响应体:260,172 Bytes- 含义:表示所有HTML文档(如网页主体、iframe内容)的总大小。
-
响应头:1,229 Bytes
- 含义:表示所有
text/html
响应头的总大小(如Content-Type
、Cache-Control
等)。
- 含义:表示所有
5 世界范围内的评估
- 分为Modem与DSL两种传输介质评估,评估的内容为
- RTT (往返时延)
- ELapsed (运行时间)
二、Inspectors
工具
Fiddler的Inspectors功能时网络调试的核心工具,允许你以多种格式查看、编辑HTTP\HTTPS请求和响应的详细内容。
- 请求:
- 响应
1.相关视图界面
-
Headers
-
作用:查看和编辑请求/响应头
-
编辑操作:点击界面中的【Raw】进行编辑界面
-
TextView :文本视图
- 作用:以文本形式展示请求/响应体。
- 功能:存在搜索功能
-
SyntaxView:语法视图
- 作用:提供语法高亮和结构折叠的代码查看器,支持20+语言
- 支持格式:HTML、JavaScript、CSS、C#、Java、Python等。
- 典型场景:
- 调试网页时,检查HTML中的
<script>
标签是否正确闭合。 - 分析API返回的JSON/XML数据时,快速定位嵌套字段
- 调试网页时,检查HTML中的
-
ImageView(图片视图)
-
作用:直接预览响应中的图片内容,无需保存到本地。
-
支持格式:JPEG、PNG、GIF、BMP、WebP等。
-
典型场景
- 验证图片CDN是否返回正确尺寸的图片。
- 检查动态生成的验证码图片是否清晰。
-
-
HexView
- 作用:以十六进制查看原始数据。
- 典型场景
- 分析二进制协议(如WebSocket握手)。
- 检查加密内容(如HTTPS未解密时的TLS记录)。
-
WebView(网页视图)
-
作用:内置浏览器引擎,直接渲染HTML/CSS/JS响应。
-
核心功能
- DOM检查:右键元素 →
Inspect
(需启用Rules > Customize Rules > WebView
插件)。 JavaScript调试:通过Console
标签执行代码或查看错误日志。
- DOM检查:右键元素 →
-
典型场景
-
调试前端页面时,检查CSS样式是否生效。
-
模拟移动端User-Agent,预览响应式布局效果。
-
-
2.Auth :管理认证信息
- 作用:管理HTTP认证信息(如Basic Auth、NTLM)
- 核心字段:
- Authorization:存储认证头(如
Basic dXNlcjpwYXNz
)。 - Proxy-Authorization:代理服务器认证信息。
- WWW-Authenticate:服务器返回的认证类型(如
Basic realm="Secure Area"
)
- Authorization:存储认证头(如
- 典型场景
- 调试API认证:检查
Authorization
头是否包含正确的Token。 - 模拟登录:手动添加Basic Auth头(格式:
Basic {base64(username:password)}
)。 - 安全测试:验证未授权请求是否返回
401 Unauthorized
。
- 调试API认证:检查
3.Caching:缓存策略-(响应 )
-
作用:分析响应头的缓存控制策略
-
案例:百度搜索Fiddler
- HTTP/200响应:默许允许缓存,但可通过
Cache-Control: no-cache
或Pragma: no-cache
覆盖 Cache-Control: private
:响应可被用户浏览器缓存,但不可被代理服务器(如CDN)缓存,适用于个性化内容Vary: Accept-Encoding
:服务器根据客户端支持的压缩类型(如gzip)返回不同内容,缓存需验证请求头是否匹配。- 缺少ETag/Last-Modified的后果
- 无条件重新验证机制,浏览器可能频繁向服务器发送请求,增加负载且无法利用缓存优化。
- HTTP/200响应:默许允许缓存,但可通过
4.Cookies
-
作用:检查请求/响应中的Cookie数据
-
核心字段
-
Name/Value:Cookie名称和内容(如
sessionId=abc123
)。 -
Domain/Path:作用域(如
.example.com
表示子域名有效)。 -
Expires/Max-Age:过期时间。
-
Secure/HttpOnly:安全标志(防止XSS或中间人攻击)。
-
5.Raw :原始字节流分析
- 作用:查看请求/响应的完整二进制数据
- 核心功能
- 十六进制视图:分析二进制协议(如WebSocket握手)。
- ASCII解码:尝试将字节流转换为可读文本。
- 协议分析:检查TLS握手记录或加密数据。
6.XML/JSON
- 作用:结构化展示XML/JSON数据
7.Transfromer界面
-
Chunked Transfer-Encoding
- 作用:分块发送数据
- 使用场景:HTTP/1.1—用于在服务器不知道响应内容的总长度。
-
HTTP Compression界面
-
作用:选择不同的内容压缩方式
-
算法 压缩率 压缩速度 解压速度 兼容性 适用场景 GZIP 中 快 快 所有浏览器 通用场景(文本、CSS/JS) DEFLATE 中 快 快 所有浏览器 流式传输(如WebSocket) BZIP2 高 慢 慢 有限(需客户端支持) 高压缩率需求(如日志文件) Brotli 极高 中 快 现代浏览器 HTTPS内容、高压缩需求 Zopfli 极高 极慢 同GZIP 同GZIP 静态资源预压缩(如图片、CSS)
-
三、AutoResponder
工具
自动响应器,允许你拦截并自定义HTTP请求的响应,无需修改后端代码或网络配置。
- Enable rules :启动规则
- Unmatched requestspassthrough:不匹配请求穿透
- Enable Latency :启动延迟
1.核心功能
-
请求拦截:基于URL、状态码、响应头等规则匹配请求
-
自定义响应:
- 返回本地文件(预定义的JSON/XML)
- 直接编辑响应内容(如修改API返回字段)
- 模拟延迟(测试客户端超时逻辑)
- 返回错误的状态(如:500、404)
-
规则链:按优先级执行多个规则,支持复杂场景。(如先延迟后返回错误)
2.典型的使用场景
-
前端调试:
- 模拟API响应,避免依赖为未完成的后端接口
- 测试不同数据格式的客户端解析逻辑(Xml 、json)
-
性能测试
- 模拟慢速网络(通过延迟响应)
- 测试客户端对压缩内容的处理能力
-
安全测试
- 拦截敏感请求(支付回调),返回伪造响应验证客户端校验逻辑
- 模拟XSS攻击(返回恶意脚本)
-
依赖隔离
- 测试离线场景(如返回缓存数据)
3.高级技巧
- 动态响应:结合FiddlerScript(
OnBeforeResponse
函数)动态修改响应内容。 - 状态码覆盖:强制返回
200 OK
即使后端返回500
。 - 正则表达式匹配:拦截符合模式的URL(如
/api/v\d+/user
)。
4.调试建议
-
日志记录:在
FiddlerScript
中添加日志,跟踪规则执行过程 -
性能分析:结合
Statistics
面板,分析拦截前后的请求耗时。
四、Composer工具
Composer(请求构造器)是一个手动构建和发送HTTP/HTTPS请求的工具,用于调试API,测试端点、或重现特定网络问题。
1.parsed 界面
-
请求构建
-
自定义url:手动输入或粘贴目标地址
-
HTTP方法选择:支持get、post、put、delete等
-
请求头编辑:添加/修改
Content-Type
、Authorization
等头部 -
请求体构造:
- 表单数据(
application/x-www-form-urlencoded
)。 - JSON/XML(
application/json
或text/xml
)。 - 文件上传(
multipart/form-data
)。
- 表单数据(
-
2 Scratchpad 界面
- 作用:可以存储请求集合,如果发出请求,请点击该文本
3.options界面
五、Orchestra Beta 工具
注意:使用Orchestra Beta
需要以管理员运行Fiddler工具
Fiddler Orchestra Beta
是 Fiddler 调试工具的一个实验性插件,主要用于解决移动端 APP 流量抓取的难题。
1.核心功能
-
突破移动端流量抓取限制
- 传统Fiddler局限:常规Fiddler通过代理模式捕获流量,但许多APP会绕过系统代理(如直接调用底层网络接口)或使用
SSL Pinning
技术,导致无法捕获加密流量 - Orchestra Beta的创新:通过直接截获APP转发到网络层的数据包,并在正常转发流量的同时复制一份给Fiddler,实现流量捕获。 这一个过程无需APP信任本地证书,解决传统代理模式的痛点
- 传统Fiddler局限:常规Fiddler通过代理模式捕获流量,但许多APP会绕过系统代理(如直接调用底层网络接口)或使用
-
跨平台支持与远程调式
- 客户端兼容性:NET Core 客户端支持 Windows、macOS、Linux,而控制器(Controller)目前仅限 WinForms Fiddler(需 .NET 4.6.1+)
- Web UI 配置:提供基于浏览器的界面,支持 HTTP/HTTPS 代理设置、反向代理配置及 MITM(中间人)解密,但需提前安装根证书。
-
流量捕获与解密
-
协议支持:可捕获 HTTP 和 HTTPS 流量,后者需通过 Fiddler 的证书解密功能实现。
-
局限性:对 HTTPS 的解密仍依赖证书信任链,部分高安全性 APP 可能绕过抓包。
-
2.实现原理
-
数据包复制技术:Orchestra Beta并非通过代理连接流量,而是作为中间层截获APP发送的网络数据包,复制后转发给Fiddler分析,同时确保原始流量正常传输
-
代理与反向代理:支持通过WebUI配置代理端口、上游网关及反向代理规则,实现流量路由控制
2.1体系结构
Controller
:控制器从任意数量的Client手机数据并控制他们。Client
:想任意数量的Controller报告数据并从中接收命令
注意:只有Controller保持端口打开并接收来自Client端口的传入连接。所有客户端与控制器的通信都是加密的
3.部署与配置
- 环境要求
- 安装.NET2.0 和.NEt Framework 4.6.1+
- Xamarin.iOS 10.14
- Xamarin.Android 7.5
3.1 控制器配置
-
fiddler Orchestra控制器设置为接收连接
-
设置信息
- port端口
- 私钥:客户端必须设置相同的私钥才能连接控制器,当控制器停止时,才能重新生成私密
- 启动
-
连接的设备信息
- Device name:设备名称
- Connection status: 连接的状态
- Connected at
- Disconnected at :在什么位置断开
-
3.2 客户端配置
-
配置客户端(首次启动)
-
点击 `Get Fiddler Orchestra client for windows,Mac and linux 找到本地zip包,并进行解压
-
-
通过批处理脚本启动客户端
dotnet FiddlerOrchestra.Client.NetCore.dll
-
本地浏览器:访问http://localhost:8800,启动远程连接并配置代理
-
移动设备:确保设备与Fiddler统一局域网
-
3.3 问题
- 当我启动批处理文件的时候,运行shell命令
dotnet FiddlerOrchestra.Client.NetCore.dll
出现了以下问题!
-
问题解析:
-
FiddlerOrchestra.Client.NetCore.deps.json 依赖文件找不到。
-
package ‘Microsoft.ApplicationInsights.AspnetCore’ vsersion:2.1.1
-
-
解决:安装dotnet-sdk-2.1.202-win-x64.exe进行安装。
# 安装连接 https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/sdk-2.1.202-windows-x64-installer
六、FiddlerScript工具
1.基础知识
1.1脚本编辑与加载
- 入口:通过 Fiddler 菜单
Rules > Customize Rules
打开内置编辑器,支持语法高亮和智能提示。 - 文件路径:脚本保存为
CustomRules.js
,位于用户文档目录(如C:\Users\<用户>\Documents\Fiddler2\Scripts\
)。 - 自动加载:保存后 Fiddler 会实时编译脚本,成功则状态栏显示加载时间,失败则提示错误。
1.2核心方法与事件
- 请求处理
OnBeforeRequest(oSession: Session)
:发送请求前修改请求头、URL、Body(如添加认证信息、替换参数)。OnPeekAtRequestHeaders(oSession: Session)
:查看请求头但不修改内容。
- 响应处理
OnBeforeResponse(oSession: Session)
:接收响应前修改响应体、状态码(如解压GZip数据、注入JSON字段)。OnPeekAtResponseHeaders(oSession: Session)
:查看响应头但不修改内容。
- 自定义操作
OnExecAction(sParams: String[])
:处理Fiddler命令行操作(如通过QuickExec
触发脚本逻辑)。
- 初始化
Main()
:Fiddler启动时执行的全局初始化(如设置默认变量)。
1.3 UI集成与扩展
-
添加会话列
public static BindUIColumn("Method", 60) function FillMethodColumn(oS: Session) { return oS.RequestMethod; }
保存后会话列表新增
Method
列显示请求方法。 -
自定义菜单
QuickLinkMenu("&Links") QuickLinkItem("支付宝", "https://www.alipay.com") public static function DoLinksMenu(sText: String, sAction: String) { Utilities.LaunchHyperlink(sAction); }
保存后Fiddler顶部菜单新增
Links
选项。
2.实战技巧与代码示例
2.1 请求/响应修改
-
修改Cookie
static function OnBeforeRequest(oSession: Session) { if (oSession.HostnameIs("www.example.com")) { oSession.oRequest.headers.Remove("Cookie"); oSession.oRequest.headers.Add("Cookie", "username=test; session_id=123"); } }
-
解压GZip响应
static function OnBeforeResponse(oSession: Session) { if (oSession.oResponse.headers.Exists("Content-Encoding") && oSession.oResponse.headers["Content-Encoding"].Contains("gzip")) { var compressedBytes = oSession.responseBodyBytes; var decompressedBytes = Utilities.GzipExpand(compressedBytes); oSession.utilSetResponseBody(decompressedBytes); } }
2.2 自动化处理
-
自动添加Header
static function OnBeforeRequest(oSession: Session) { if (oSession.uriContains("/api/")) { oSession.oRequest.headers.Add("X-Custom-Header", "FiddlerScript"); } }
-
条件过滤与日志
static function OnBeforeResponse(oSession: Session) { if (oSession.host.Contains("tugele")) { FiddlerObject.log("Response from tugele: " + oSession.url); oSession.oResponse["Content-Type"] = "application/json"; } }
2.3 性能优化与弱网模拟
-
限速设置
if (m_SimulateModem) { oSession["request-trickle-delay"] = "300"; // 上传1KB延迟300ms oSession["response-trickle-delay"] = "550"; // 下载1KB延迟550ms }
-
显示响应时间
public static BindUIColumn("TimeTaken/ms", 120) function TimeTaken(oS: Session) { var t1 = oS.Timers.ClientBeginResponse.ToUniversalTime().Ticks; var t2 = oS.Timers.ClientDoneRequest.ToUniversalTime().Ticks; return ((t1 - t2) / 10000).ToString(); // 转换为毫秒 }
2.4 数据持久化与集成
-
保存请求到文件
var fso = new ActiveXObject("Scripting.FileSystemObject"); var file = fso.CreateTextFile("C:\\requests.log", true); file.WriteLine(oS.fullUrl + " | " + oS.GetResponseBodyAsString()); file.Close();
-
导出为自动化测试用例:
通过Fiddler的 API测试选项卡 将会话导出为Python/C#脚本,直接集成到测试框架。
3.典型应用场景
API测试与调试
- 验证接口行为:使用脚本自动检查响应状态码、JSON字段(如
oSession.GetResponseBodyAsString().Contains("\"status\":200")
)。 - 模拟错误场景:拦截特定请求并返回错误响应(如500状态码)。
安全测试
- 敏感信息检测:扫描响应体中的密码、Token明文传输。
- HTTPS中间人攻击测试:通过Fiddler解密HTTPS流量,验证证书配置。
性能分析
- 定位慢请求:通过自定义列显示耗时,优化大文件或未压缩资源。
- 弱网环境测试:模拟3G/4G网络延迟,测试应用兼容性。
跨平台/设备调试
- 移动端抓包:配置手机代理至PC的Fiddler,捕获App请求。
- 绕过CORS限制:修改请求头
Origin
或Referer
。
自动化与CI/CD集成
- 持续集成:将FiddlerScript生成的测试用例纳入Jenkins/GitLab流水线,验证接口兼容性。
- 回归测试:批量重放修改后的请求,确保功能稳定性。