Fiddler工具全揭秘:从Statistics到FiddlerScript的6大界面工具

一、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为空)
  • Bytes Received: 800 (headers:118: body: 682)

    • 总接收量:800 Bytes
      • Headers:118 Bytes(占14.75%)
      • Body:682 Bytes(占85.25%)
    • 解读:响应以Body内容为主(如JSON数据、小图片或HTML片段),Headers占比较小。

3.实际性能

请添加图片描述

指标含义
ClientConnected客户端创建连接时间
ClientBeginRequest客户端开始请求时间
GotRequestHeaders获取请求头的时间
ClientDoneRequest客户端完成请求时间
Determine Gateway确定网关
DNS Lookup域名解析耗时
TCP/IP Connect建立TCP连接
HTTPS HandshakeSSL/TLS 协商消耗 仅限HTTPS
ServerConnected服务器创建连接时间
FiddlerBeginRequestFiddler代理服务器开始请求
ServerGotRequest服务器获得请求时间
ServerBeginResponse服务器开始响应时间
GotResponseHeaders获取响应头时间
ServerDoneResponse服务器完成响应时间
ClientBeginResponse客户端开始响应时间
ClientDoneResponse客户端完成响应时间

3.1 关键步骤解析

  1. 客户端阶段
    • ClientConnected: 客户端与Fiddler建立连接。
    • ClientBeginRequest: Fiddler开始处理客户端请求。
    • GotRequestHeaders: Fiddler接收到完整的请求头。
    • ClientToServerRequest: Fiddler将请求转发给服务器。
  2. 网络与服务器端阶段
    • DNS Lookup: 域名解析耗时(若未缓存)。
    • TCP/IP Connect: 建立TCP连接(含SSL握手前的TCP三次握手)。
    • HTTPS Handshake: SSL/TLS协商耗时(仅HTTPS)。
    • ServerConnected: Fiddler与服务器建立连接。
    • FiddlerBeginRequest: Fiddler开始发送请求到服务器。
    • serverGotRequest: 服务器接收到请求。
    • serverBeginResponse: 服务器开始处理并返回响应头。
  3. 响应阶段
    • GotResponseHeaders: Fiddler接收到响应头。
    • ServerDoneResponse: 服务器完成响应发送。
    • ClientBeginResponse: Fiddler开始将响应转发给客户端。
    • ClientToServerResponse: 响应数据完全送达客户端。

3.2 调试技巧

  • 使用Fiddler计时器
    • 在会话列表中启用Timing列,查看各请求的全链路耗时。
    • 通过Statistics > Timeline分析时间分布
  • 对比多次请求
    • 检查首次请求(含DNS/TCP开销)与后续请求(可能命中缓存)的耗时差异。
  • 结合浏览器开发者工具
    • 对比Fiddler统计与浏览器Network面板的DOMContentLoaded/Load时间,定位前端渲染瓶颈

4 响应字节

​ 响应数据按内容类型分析

请添加图片描述

  • text/html响应体:260,172 Bytes

    • 含义:表示所有HTML文档(如网页主体、iframe内容)的总大小。
  • 响应头:1,229 Bytes

    • 含义:表示所有text/html响应头的总大小(如Content-TypeCache-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数据时,快速定位嵌套字段
  • ImageView(图片视图)

    • 作用:直接预览响应中的图片内容,无需保存到本地。

    • 支持格式:JPEG、PNG、GIF、BMP、WebP等。

    • 典型场景

      • 验证图片CDN是否返回正确尺寸的图片。
      • 检查动态生成的验证码图片是否清晰。
  • HexView

    • 作用:以十六进制查看原始数据。
    • 典型场景
      • 分析二进制协议(如WebSocket握手)。
      • 检查加密内容(如HTTPS未解密时的TLS记录)。
  • WebView(网页视图)

    • 作用:内置浏览器引擎,直接渲染HTML/CSS/JS响应。

    • 核心功能

      • DOM检查:右键元素 → Inspect(需启用Rules > Customize Rules > WebView插件)。
      • JavaScript调试:通过Console标签执行代码或查看错误日志。
    • 典型场景

      • 调试前端页面时,检查CSS样式是否生效。

      • 模拟移动端User-Agent,预览响应式布局效果。

2.Auth :管理认证信息

  • 作用:管理HTTP认证信息(如Basic Auth、NTLM)
  • 核心字段
    • Authorization:存储认证头(如Basic dXNlcjpwYXNz)。
    • Proxy-Authorization:代理服务器认证信息。
    • WWW-Authenticate:服务器返回的认证类型(如Basic realm="Secure Area"
  • 典型场景
    • 调试API认证:检查Authorization头是否包含正确的Token。
    • 模拟登录:手动添加Basic Auth头(格式:Basic {base64(username:password)})。
    • 安全测试:验证未授权请求是否返回401 Unauthorized

3.Caching:缓存策略-(响应

请添加图片描述

  • 作用:分析响应头的缓存控制策略

  • 案例:百度搜索Fiddler

    • HTTP/200响应默许允许缓存,但可通过Cache-Control: no-cachePragma: no-cache覆盖
    • Cache-Control: private:响应可被用户浏览器缓存,但不可被代理服务器(如CDN)缓存,适用于个性化内容
    • Vary: Accept-Encoding:服务器根据客户端支持的压缩类型(如gzip)返回不同内容,缓存需验证请求头是否匹配。
    • 缺少ETag/Last-Modified的后果
      • 无条件重新验证机制,浏览器可能频繁向服务器发送请求,增加负载且无法利用缓存优化。

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-TypeAuthorization等头部

    • 请求体构造

      • 表单数据(application/x-www-form-urlencoded)。
      • JSON/XML(application/jsontext/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信任本地证书,解决传统代理模式的痛点
  • 跨平台支持与远程调式

    • 客户端兼容性: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限制:修改请求头OriginReferer

自动化与CI/CD集成

  • 持续集成:将FiddlerScript生成的测试用例纳入Jenkins/GitLab流水线,验证接口兼容性。
  • 回归测试:批量重放修改后的请求,确保功能稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值