资讯动态

Fiddler中文版抓包实战:HTTPS解密与断点修改全攻略

发布时间:2026/9/13 4:33:49 来源:尧图企业网站定制
简介这是一份Fiddler中文版本工具包面向Web开发、测试及网络调试人员解决HTTP(S)抓包分析、请求修改与性能排查等常见问题。压缩包约6.02MB虽未附带详细文件清单但作为本地化版本其价值在于提供全中文界面支持捕获并查看完整会话、实时修改请求与响应、设置断点调试、解密HTTPS流量还可通过JScript.NET扩展自定义脚本并可直接导出多种格式数据。借助时间线和会话过滤能快速定位性能瓶颈。目前已有1978人学习下载适合希望降低抓包工具使用门槛、提升接口调试与问题排查效率的初中级开发者。该版本保留了原版全部核心能力又消除了语言障碍可帮助更直观地掌握网络通信过程并优化Web应用表现。1. 当接口数据对不上时先让 Fiddler 中文版开口说话前后端联调最烦的不是报错而是两边各说各话前端明明看到请求发出去了后端却说没收到对应参数后端返回了正确的 JSON前端却解析出 undefined。这种时候靠浏览器 DevTools 往往不够尤其当涉及小程序、App、第三方回调甚至非浏览器客户端时你需要一个站在系统层面的会话记录器。Fiddler 中文版就是干这个的它以本地代理身份接管客户端与服务器的 HTTP(S) 流量把请求头、响应体、时序、状态码全部摊开。我手里的这份中文版 zip 包解压即用省去了官网安装包常见的下载慢、弹窗多麻烦特别适合临时开一台测试机或者给团队内网分发。以下内容按照一次完整抓包调试的工作流展开从代理与证书配置到断点改包再到过滤、弱网模拟与脚本自动化最后整理几个高频故障的排查方法。新手能照着步骤把包抓出来老手可以直接跳到第四章看 FiddlerScript 的写法。2. Fiddler 代理捕获与 HTTPS 证书解密2.1 从系统代理到中间人抓包到底抓了什么Fiddler 启动后默认把系统代理WinINET 所在的全局代理层指向127.0.0.1:8888。你打开任意浏览器请求会先到达 Fiddler 的监听端口再由 Fiddler 转发给真实服务器。响应原路返回时Fiddler 又做一次记录。这意味着它看到的不是网络层的 TCP 包而是应用层的 HTTP 会话所以你不用像 WireShark 那样关心 TCP 分片直接看 Method、URL、Headers、Body 就行。但 HTTPS 是加密通道Fiddler 如果只做一个普通隧道能看到的只是CONNECT host:443正文全是密文。要解密Fiddler 必须扮演中间人动态生成一张伪装证书替换掉服务器的证书客户端在这种情况下和 Fiddler 建立的是正常 TLS 连接而 Fiddler 和服务器之间另有一条完整 TLS 链路于是明文内容会经过 Fiddler 内存并呈现出来。这是 Fiddler 抓包的核心边界只有客户端信任了 Fiddler 的根证书中间人才能成立。所以文档里反复强调安装证书不是流程要求而是解密能力的必要条件。2.2 证书信任链与桌面端解密配置2.2.1 桌面端开启 HTTPS 解密打开 Fiddler 中文版后依次进入工具 - 选项 - HTTPS勾选捕获 HTTPS 连接和解密 HTTPS 流量。首次勾选会弹出证书安装确认选「是」并确认安装到受信任的根证书颁发机构。这一步完成后Fiddler 会在系统证书区写入自己的根证书「DO_NOT_TRUST_FiddlerRoot」之类的名称。验证是否安装成功可以同时按下Win R输入certmgr.msc打开证书管理器展开受信任的根证书颁发机构 - 证书找到 Fiddler 相关证书。如果系统时间异常、或被安全软件拦截证书可能安装失败抓包时会出现CertEnroll相关错误。2.2.2 手机抓包代理与证书一起配手机抓包的连接方式与桌面端略有不同。先保证手机和 PC 在同一局域网然后设置 Wi-Fi 代理为手动主机名填 PC 的局域网 IP端口填 8888。PC 上通过ipconfig查看当前 IP例如192.168.1.10。代理配置完成后用手机浏览器访问http://192.168.1.10:8888点击页面上的FiddlerRoot certificate下载并安装。Android 7.0 及以上系统默认不信任用户安装的 CA 证书所以常见做法是将证书重命名为{hash}.0并adb push到/system/etc/security/cacerts/但这需要 root没有 root 时可以改用仅信任用户证书的浏览器如老版 FireFox或者直接在 App 代码里添加网络安全配置否则会出现 HTTPS 明文没有抓到、只有Tunnel to的情况。2.3 解密失败的典型表现与排查下表是按出现频率整理的解密失败原因和对应动作现象可能原因排查动作会话列表里全是Tunnel to没有勾选解密 HTTPS设置 - HTTPS - 勾选解密响应体显示证书错误根证书未安装到受信任区重启 Fiddler 并重新安装证书手机访问 8888 端口打不开防火墙拦截或代理未生效关闭 Windows 防火墙或放行 8888抓到的请求显示证书过期系统时间不准确校准系统时间后重启 Fiddler打开 Fiddler 后浏览器无法上网代理未正常恢复退出 Fiddler或按第 5 章重置代理补充一个命令行检查方式。Windows 用户可以用netsh查看当前 WinHTTP 及 WinINET 代理状态判断是否被残留设置干扰# 查看当前系统代理设置 netsh winhttp show proxy # 手动恢复系统代理为空管理员权限 netsh winhttp reset proxy这段命令只是将恶化的代理环境恢复到初始状态。正常情况下 Fiddler 退出时会自动清理但如果之前用过其它代理工具意外退出就可能残留127.0.0.1:8888导致断网还原指令很实用。3. Fiddler 断点修改与请求响应篡改实战3.1 断点设置的两种方式菜单和方法除了被动观察Fiddler 的看家本领是「改包重发」。修改时机分成两种请求发送前和服务端响应后。你可以把请求断点理解为「客户端留给你的一个操作窗口」在这个窗口里改参数、改 Header、甚至替换整个请求体然后再放行给服务器。最直观的操作方式是菜单栏规则 - 自动断点下面有三个选项请求前、响应后、禁用。选择请求前所有 HTTP 请求到达 Fiddler 后会停在断点状态会话列表里对应的请求图标会出现竖线同时底部状态栏提示。此时在右侧 Inspector 里编辑请求内容点击工具栏的继续按钮即放行。如果只想听某个特定 URL不要用全局断点否则会打满会话列表。更快的方式是借助 QuickExec 命令行。QuickExec 位于 Fiddler 界面底部的黄色横条光标放上去直接输入命令。bpu example.com这表示只对包含example.com的 URL 断点。bpu是Breakpoint on URI的缩写后面可以跟完整 URL 或关键字。取消断点输入bpu不加参数即可。同理bps断指定状态码bpv断指定请求方法。3.2 用 Inspector 修改请求头与响应体断点命中后右侧检查器面板会出现请求和响应两个子标签。修改请求时可以直接编辑 Header 表格里的 key-value或在正文里改 JSON。这里有个容易被忽略的细节修改完请求体后上方的Content-Length不会自动重算如果增删了字符需要同步修改Content-Length否则服务器会因长度不匹配读不完整个 body。响应体修改同样在响应断点命中时改动 HTML、JSON 或图片字节后必须调整响应头里的Content-Length。很多入门教程没有提这一点我实际排错时遇到过改了 JSON 没改长度客户端一直报Unexpected end of JSON input。建议改完以后顺手在 Header 过滤框里搜Content-Length做一次核对。3.3 FiddlerScript 实现请求自动改写人肉断点适合偶发用例但自动化回归时就需要脚本。Fiddler 内置 FiddlerScript基于 JScript.NET在规则 - 自定义规则里打开脚本编辑器。常用入口是OnBeforeRequest每个请求发出去之前都会经过它。下面是一个改写用户令牌的示例static function OnBeforeRequest(oSession: Session) { // 只处理目标 API 的请求 if (oSession.uriContains(/api/v1/order)) { // 修改请求头追加一个临时代调参数 oSession.oRequest[X-Debug-Git] hotfix-20240512; // 如果当前请求带了 userToken替换成测试令牌 if (oSession.oRequest[userToken]) { oSession.oRequest[userToken] TEST_TOKEN_FAKE; } // 修改路径上的 query oSession.PathAndQuery oSession.PathAndQuery mock1; } }这段脚本的逻辑是过滤出包含/api/v1/order的请求为它附加一个调试用 HeaderX-Debug-Git然后把userToken替换成固定测试值最后在 query 后面追加mock1。注意PathAndQuery是 Fiddler 的 Session 属性修改它会直接影响真正发出的 URL。调试完必须把X-Debug-Git相关代码注释掉避免把测试 Header 带到生产环境。FiddlerScript 里修改响应则用OnBeforeResponse典型场景是拦截某些前端依赖的配置接口动态返回可控数据static function OnBeforeResponse(oSession: Session) { if (oSession.uriContains(getFeatureFlags)) { oSession.utilSetResponseBody({enable_new_ui: true}); oSession.oResponse.headers[Content-Type] application/json; charsetutf-8; } }这里utilSetResponseBody会直接覆盖响应体同时需要手动修正响应类型否则前端会按纯文本解析 JSON。实际项目中这种拦截方式很适合做前端埋点联调不用等待后端改配置开关。下表汇总了三个常用断点命令的快捷键和用途方便平时快速操作功能快捷键 / 命令说明全部请求前断点F11切换全局请求前中断全部响应后断点AltF11切换全局响应后中断指定 URL 断点bpu keyword仅匹配含 keyword 的请求放行单个断点点工具栏继续也可以按G放行全部断点ShiftF11只对全局断点生效4. Fiddler 过滤语法与弱网模拟4.1 会话过滤只看想看的那部分包抓包最头疼的是噪声太多。一个网页加载可能触发几十个 CDN、统计、日志请求找目标接口像大海捞针。Fiddler 的过滤器标签页位于左下角勾选Use Filters后即可启用。常用规则包括 Host 匹配、URL 匹配、HTTP 状态码筛选还可以按响应类型做限制。不过我更推荐用 QuickExec 做即时过滤因为它不需要切界面输入即生效。例如?callback // 只显示 URL 中含有 callback 的会话 baidu.com // 只显示与 baidu.com 及其子域名的会话 POST // 只显示 POST 方法会话 502 // 只显示返回 502 的会话这些命令的匹配规则是前缀区分功能?匹配 URL 文本匹配 host匹配方法或状态码。组合使用时在 QuickExec 里依次输入Fiddler 会对当前会话列表反复过滤。注意过滤不是删除数据只是隐藏不匹配的会话随时可以清空过滤条件恢复。过滤框的设计原则是「从大到小逐步收窄」。我一般先按 host 排除静态资源域名再按关键词搜接口路径最后根据状态码类别定位异常请求。如果一次会话需要反复使用建议在 Filters 标签页保存为配置文件通过Filters - Save导出下次抓包直接Load回来。4.2 弱网测试的延迟注入弱网模拟是移动端测试的刚需尤其是在海外 CDN 或低带宽场景下经常出现超时、重试、资源加载不全等问题。Fiddler 内置的规则 - 性能 - 模拟调制解调器速度会直接给所有请求加一个全局延迟但过于粗颗粒度真实弱网的丢包和抖动根本不是固定延时能模拟的。更可控的方案是用 FiddlerScript 按需加request-trickle-delay和response-trickle-delay。这两个 Session 属性分别控制请求上行和响应下行的延迟毫秒数。下面的例子模拟慢速上行和慢速下行static function OnBeforeRequest(oSession: Session) { // 只对图片与 JSON 资源做延迟模拟 if (oSession.uriContains(.json) || oSession.uriContains(.png)) { oSession[request-trickle-delay] 300; // 每 KB 上行延迟 300ms oSession[response-trickle-delay] 500; // 每 KB 下行延迟 500ms } }这里的单位不是固定延迟总量而是每发送/接收 1KB 数据的时间间隔。比如一个 5KB 的响应response-trickle-delay 500时总延迟大约是 5KB × 500ms 2500ms。这个机制更贴近真实带宽限制比简单Sleep平滑得多。想模拟弱网并存场景还可以组合oSession[request-trickle-delay]与oSession[response-trickle-delay]为不同值制造上行弱、下行强的典型移动网络特征。常见弱网档位的参考值如下网络类型上行 (request-trickle-delay)下行 (response-trickle-delay)适用场景4G 正常50ms100ms基线验证3G 典型150ms200ms接口超时边界2G 极端400ms600ms图片加载、断点续传调完脚本后进入统计标签页可以看到每个请求的总耗时、DNS 解析耗时和内容接收耗时。比对修改前后的TTFBTime To First Byte和完成时间基本就能定位到是请求阶段慢还是响应体太大导致。4.3 时间线与性能瓶颈定位Fiddler 右侧还有一个时间线标签页展示会话请求的时间顺序和重叠关系。浏览器一次加载多个静态资源时如果所有请求在时间轴上呈线性排列说明连接并发不足或代理在逐条转发此时可以检查工具 - 选项 - 连接 - 允许远程电脑连接旁边的「复用连接」相关设置。从性能分析角度看Fiddler 的统计页给出的请求开始到响应完成时间已经足够日常使用。更细粒度的耗时拆解需要看响应头中的Server-Timing或者索性导成 SAZ 文件用 Charles 打开对比。注意 Fiddler 显示的时间是代理视角不包含客户端渲染耗时因此只能定位网络链路层面瓶颈别拿它直接当页面性能基准。5. FiddlerScript 自动化与常见故障排查5.1 用脚本自动保存会话日常抓包经常要保留现场给后端同学发 SAZ 文件。手动文件 - 保存 - 全部会话也行但自动化场景下更希望抓到指定请求后自动落盘。FiddlerScript 里可以在OnBeforeUnload或者OnDone事件里写保存逻辑static function OnDone(oSession: Session) { if (oSession.uriContains(pay/notify)) { var sazPath D:\\saz_backup\\ oSession.id .saz; oSession.SaveSession(sazPath, true); } }代码中SaveSession(path, isSaz)会把当前会话保存为单独的 SAZ 文件。isSaz传true时保存为压缩包格式适合导入 Fiddler 二次查看传false时保存为纯文本 HTTP 原始格式方便直接 diff。注意保存路径需要提前创建否则 Fiddler 会静默失败最好在脚本里先System.IO.Directory.CreateDirectory()。这一招在做回调接口对账时特别有用pay/notify 这类请求早晚要来脚本盯着自动存一份事后再核对报文就不需要人一直守在电脑前了。5.2 关闭 Fiddler 后上不了网的排查「Fiddler 卸载后上不了网」是高频词条根因是代理设置没有还原。Fiddler 正常退出会清空系统代理但崩溃、杀毒软件强制结束进程、或者关闭时误选了「保持代理」都会让 WinINET 代理仍然指向 8888 端口此时没有 Fiddler 在监听所有浏览器请求自然全部失败。排查顺序为打开控制面板 - 网络和 Internet - Internet 选项 - 连接 - 局域网设置去掉「为 LAN 使用代理服务器」勾选点击确定。管理员权限打开 CMD执行netsh winhttp reset proxy重置 WinHTTP 层的代理。检查 Fiddler 进程是否残留tasklist | findstr Fiddler有则结束。如果服务无法恢复重新运行一次 Fiddler 再正常退出利用它的清理逻辑重置代理。存有残留环境的用户最好在重置后用curl http://example.com验证连通性确保代理层完全恢复。5.3 中文版 zip 包落地后的资源完整性验证这份 Fiddler 中文版 zip 包解压后建议先做三件事确认目录下的Fiddler.exe文件签名正常、验证语言包Languages文件夹存在、检查根证书是否内置了官方默认证书。有些压缩包内置了修改版证书若携带有私钥理论上可以解密任何信任它的客户端流量所以个人软件包务必从可信途径获取并校验 SHA-256。验证文件哈希的命令如下certutil -hashfile Fiddler中文版本.zip SHA256结合官方发布页提供的哈希值逐一比对。比对完成后将解压目录加入杀毒软件白名单Fiddler 监听系统代理、动态生成证书的行为极易被安全软件当作中间人攻击工具处理。若启动时出现「文件被占用」或「无法监听端口 8888」多半是杀毒拦截了驱动或证书安装步骤。最后用一条完整链路做收尾验证开启 HTTPS 解密浏览器访问https://www.baidu.com在 Fiddler 会话列表看到200和能看到响应体中的 HTML 明文则说明代理、证书、解压资源全部正常。此时再回到正文开头那个「接口数据对不上」的现场对着抓下来的请求逐字段对照多半几秒钟就能找到是谁少传了参数。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价