ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Fiddler抓包全攻略:从基础配置到高级调试技巧

Fiddler抓包全攻略:从基础配置到高级调试技巧 1. 先把 Fiddler 的定位搞清楚它不是黑客工具是调试神器很多人一听到“抓包工具”就觉得很神秘总觉得带着点灰色色彩。我最早接触 Fiddler 的时候也这么想过后来做了几年开发测试才明白抓包其实就是把客户端和服务器之间来回传输的数据“截下来看一眼”它和浏览器的 F12 控制台干的是一回事只是站在了更底层、更全局的位置。Fiddler 是一个运行在 Windows 上的 HTTP 调试代理它会在你的电脑上开一个代理端口默认 8888浏览器、App、小程序所有走 HTTP/HTTPS 协议的请求都会经过它。你可以在这里看到请求发给了谁、带了哪些参数、返回了什么数据还能手动改请求改响应、模拟弱网、批量断点。对前端来说它是排查接口问题的利器对后端来说它能看到最原始的请求格式和响应内容对测试来说弱网模拟、接口异常注入都离不开它对刚入行的开发者来说它能帮你理解 HTTP 协议到底长什么样——你发一个请求服务器返回什么中间经过了什么过程以前看书看不明白的抓一次包全清楚了。所以这篇不是教你“偷数据”而是想帮你把这把正经的调试工具用顺、用透少走一点我当年踩过的弯路。2. Classic 和 Everywhere 到底选哪个先看平台再看钱包2.1 Fiddler Classic免费但只认 Windows打开 Fiddler 官网你会发现现在有两个主要版本Classic 和 Everywhere。Classic 就是很多人记忆里的经典版免费、开源时代的老底子功能极其丰富几乎所有的 Fiddler 教程、汉化补丁、脚本扩展都是针对 Classic 的。但它有一个硬伤只支持 Windows。而且说实话Telerik 对 Classic 的更新已经放缓了界面还是老样子适配高 DPI 屏幕的体验也不太好但它稳定、生态大、资料多依然是很多公司的首选。如果你是在 Windows 上做开发测试我建议直接用 Classic免费够用。尤其是那些需要跑 FiddlerScript 做定制化需求的场景Classic 的可玩性是最高的几乎什么都能写。2.2 Fiddler Everywhere跨平台的现代化替代品Everywhere 则是 Telerik 后来推出的跨平台版本支持 Windows、macOS、Linux。界面现代化了不少操作逻辑也更直观配色清爽看着确实比 Classic 舒服。但它有两个劝退点一是收费虽然有免费版但请求数量、保存数量都有限制二是脚本能力和 Classic 相比要弱一些很多 Classic 里的 FiddlerScript 玩法在 Everywhere 里没法直接用。我的个人建议是刚开始学、或者主要做移动端调试、只需要简单的抓包和改包可以用 Everywhere 体验一把但如果你想深入学习、看各种扩展玩法或者你有一堆历史教程和脚本要复用Classic 会更顺手。如果你用的是 Mac那没办法Classic 装不了只能选 Everywhere 或者换个思路用 Charles。别的工具不是说不行但既然这篇聊的是 Fiddler那就把 Classic 作为主线来讲遇到和 Everywhere 的差异我会单独点出来。3. 安装、汉化、证书配置这一步别省后面全靠它3.1 下载安装的正确姿势Fiddler Classic 的下载页面在 Telerik 官网这一步没什么难度一路 Next 就行。但我要提醒两件事第一很多第三方下载站的 Fiddler 安装包会捆绑一堆乱七八糟的东西安装的时候一定要看清楚有没有勾选额外软件第二Classic 安装包默认用的是 .NET Framework如果你的 Windows 版本过旧可能需要先装对应的 .NET 运行库。装完之后第一次启动它会弹一个关于配置系统代理的提示直接确认即可。3.2 汉化补丁怎么打才算安全网上关于 Fiddler 汉化的需求一直很高但我必须泼一盆冷水Fiddler Classic 官方并没有中文语言包网上流传的汉化补丁属于第三方修改本质上是替换了 Fiddler 的程序资源文件。操作思路是下载对应版本的汉化文件覆盖安装目录下的同名文件。这听起来很简单但有两个坑版本必须严格对应。Fiddler 版本号一变汉化文件很可能不兼容强上一个不对应的补丁会导致软件打不开或者界面错乱。来路不明的汉化包可能被植入广告或后门。Fiddler 本身就是抓包工具在抓包工具里放后门等于你的一举一动都被人看着。我自己的做法是暂时不汉化直接用英文界面。Fiddler 的界面词汇就那么十几个什么 QuickExec、Inspectors、Filters看两天就熟了。而且网上 90% 的教程截图都是英文界面你拿着英文界面去对教程反而更容易看得懂。如果你实在不想看英文也请只在可信的仓库或社区获取补丁装之前先杀毒软件扫一遍覆盖之前备份好原文件。3.3 HTTPS 解密证书抓包的分水岭装好之后你直接抓包会发现 HTTP 流量都能看到但 HTTPS 请求显示的是一堆乱码或者直接标记为 CONNECT这就涉及 Fiddler 最核心的机制——中间人解密。HTTPS 的通信内容是加密的Fiddler 默认只能看到“你向哪个域名发了请求”看不到具体内容。要让 Fiddler 看到内容需要让它伪装成服务器和你通信这就需要安装它的根证书。操作路径是菜单 Tools Options HTTPS勾选 Decrypt HTTPS traffic弹出证书提示时选择 Yes。然后在 Actions 里选择 Trust Root Certificate把这个根证书安装到 Windows 的“受信任的根证书颁发机构”里。这一步做完电脑上的 HTTPS 流量就都能在 Fiddler 里看内容了。这里有个关键细节如果你只勾选了 Decrypt HTTPS traffic 但没有执行 Trust Root Certificate结果就是浏览器会疯狂报证书错误Fiddler 里看得到流量但内容还是灰色的。我第一次装的时候就漏了这一步排查了大半天。记住两个动作要配套完成。另外如果是做手机抓包手机端也要把 Fiddler 生成的证书下载安装并信任后面在手机抓包部分我会细说。4. 抓包界面和代理配置看懂布局效率翻倍4.1 主界面五大区域的职责Fiddler 打开后很多人第一眼是懵的左边一列列表右边一堆选项卡下方还有一个命令行。我用一张表把常用区域说清楚区域作用最常用的操作会话列表Web Sessions展示所有经过代理的请求每行包含状态码、协议、主机、URL、耗时、大小等点击选中某个请求双击或 Enter 查看详情Inspectors 选项卡进入选中请求的详情页分上下两部分上面查看请求Headers、TextView、JSON下面查看响应用 JSON 选项卡看 API 返回的 JSON 数据格式化后比在浏览器里砍得还直观QuickExec 命令行位于左下角的黑色输入框输入命令可快速过滤或操作会话输入?api回车只显示 URL 中含 api 的请求输入cls清空列表输入select text/html选中 HTML 响应Filters 选项卡左侧标签页之一按条件筛选会话按域名、进程、响应类型过滤具体用法见下文FiddlerScript菜单 Rules Customize Rules 打开可深度定制功能弱网参数、自定义规则都写在这个脚本里4.2 Filters 过滤器别让无关流量刷屏默认情况下只要系统代理开着所有浏览器的请求都会进 Fiddler来回刷新闻、看视频时会话列表滚得飞快看起来非常乱。所以抓包第一件事就是学会过滤。Filters 选项卡里有一个 Use Filters 复选框勾选之后就能启用过滤条件。常用过滤思路有三种按域名过滤只显示www.example.com的请求适合定位某个站点的所有资源。按进程过滤只显示 Chrome 的请求。在 Filters 里可以勾选 Show Only the Following Processes然后选择进程。这个特别适合你只想抓某一个浏览器的流量、不想把系统里其他软件的网络请求都卷进来的时候。按请求类型过滤比如只显示text/html、application/json把图片、CSS、JS 全部屏蔽掉。另外我特别推荐一个冷门技巧用 QuickExec 命令行过滤。直接在命令行输入?keyword会话列表立刻只显示 URL 里含 keyword 的请求。这个操作比去 Filters 里慢慢勾选要快得多且不用设置、不用清空输入什么就过滤什么适合临时找接口。4.3 电脑代理网关设置理解 Fiddler 凭什么能拦截流量很多人会奇怪为什么 Fiddler 一启动浏览器的流量就被它看到了因为 Fiddler 启动时会自动修改 Windows 的系统代理设置WinINET 代理把代理地址指向127.0.0.1:8888。浏览器默认是跟随系统代理的所以所有 HTTP/HTTPS 请求都会先到 Fiddler再由 Fiddler 转发到目标服务器。这个机制带来两个实操要点 第一如果你发现 Fiddler 开了但某个应用抓不到包先看看那个应用是不是没走系统代理。比如 Firefox 默认“使用系统代理设置”是关闭的你需要到 Firefox 的设置里手动配置代理为127.0.0.1:8888才行。而 Chrome、Edge 默认跟随系统代理一般不用额外配置。 第二Fiddler 异常退出时有可能会把系统代理留在错误状态导致浏览器上不了网。遇到这种情况打开 Windows 的“设置 网络和 Internet 代理”把“使用代理服务器”关掉或者重启 Fiddler 之后再正常退出它就会自动恢复。另外如果你需要让手机或局域网内的其他设备通过这台电脑抓包代理地址就不是 127.0.0.1 了而是这台电脑在局域网里的 IP。Fiddler 默认监听所有网卡所以手机只要在 WiFi 设置里把代理指向电脑IP:8888就行。具体操作我放在下一节细讲。5. 手机抓包与小程序抓包真机调试的关键流程5.1 手机和电脑连同一个网络手机抓包的前提是手机和电脑在同一个局域网内。操作顺序是先在电脑上用ipconfig查一下局域网 IP记下来一般是192.168.x.x这种然后打开手机 WiFi 设置找到当前连接的网络把代理模式从“无”改成“手动”主机名填电脑 IP端口填 8888。保存之后手机上所有 HTTP 流量就会经过 Fiddler 了。注意电脑的防火墙要放行 Fiddler否则手机连不上。我第一次做手机抓包时就是卡在防火墙这里懵了好久才发现流量根本没进来。5.2 手机安装并信任 HTTPS 证书HTTP 流量手机上能看到但 HTTPS 流量依然看不到内容需要在手机上安装并信任 Fiddler 的根证书。这一步分平台Android手机浏览器访问http://电脑IP:8888页面里有 FiddlerRootCertificate 的下载链接下载后通过系统设置安装。Android 7.0 以上对用户证书默认不信任需要在应用的网络安全配置里引用用户证书或者使用支持导入用户证书的调试包。iOS同样的方式访问下载页安装描述文件然后在“设置 通用 关于本机 证书信任设置”中找到 Fiddler 的证书并开启完全信任。漏了最后这一步SSL 握手照样失败我见过太多人栽在这个地方。还有一个细节Android 上抓 HTTPS 应用流量时很多 App 有 SSL Pinning证书锁定就算系统信任了 Fiddler 证书App 依然会拒绝连接。这种情况没有办法简单地绕过需要 Root 后再配合 Xposed 模块做绕过或者找开发要一个关闭证书校验的测试包。这不是 Fiddler 的问题而是 App 本身的安全机制。5.3 小程序抓包的一些现实问题“fiddler 抓小程序图片”、“fiddler 抓微信小程序”这类词在热搜里很常见说明很多人都在尝试。原理上微信小程序走的还是 HTTP/HTTPS 协议只要代理设置正确、证书信任到位理论上是可以看到的。但现实中有几个拦路虎微信在较新版本里对代理和证书校验做了很多限制部分请求走了底层网络框架不再遵循系统代理。小程序里的图片、素材可能是 CDN 的如果你只想抓图片可在 Fiddler 的过滤器里按域名或文件后缀过滤。如果就是看不到小程序流量建议换个思路用电脑端的微信开发者工具打开小程序进行调试开发者工具自带网络面板相当于天然的抓包器。这是目前我认为最省事的小程序抓包方式不用折腾手机的代理和证书。6. 弱网模拟给 App 一个“真实”的坏网络环境6.1 一键开启弱网模式弱网测试是移动端测试里绕不开的一环因为现实中的网络环境不会像办公室 WiFi 那么顺畅。Fiddler 模拟弱网非常简单菜单栏 Rules Performance Simulate Modem Speeds勾选它网络速度就会立刻变成模拟调制解调器的速率。这个功能原本是模拟上世纪拨号上网的速度对现在的 App 来说已经算是极端弱网了用来验证页面 loading 状态、超时提示、断网重连逻辑非常合适。很多教程到这里就结束了但我想说默认的“猫速”太极端真正的弱网测试需要更精细的速率设置比如模拟 2G、3G、4G 网络。Fiddler 当然支持自定义。6.2 自定义限速参数的计算方法打开菜单 Rules Customize Rules会打开 FiddlerScript 脚本文件C# 语法搜索m_SimulateModem你会看到类似这样的代码if (m_SimulateModem) { // Delay sends by 300ms per KB uploaded. oSession[request-trickle-delay] 300; // Delay receives by 150ms per KB downloaded. oSession[response-trickle-delay] 150; }这两个参数的单位是“每 KB 数据延迟的毫秒数”也就是网络传输 1KB 数据需要额外等多少毫秒。计算方式很简单如果要模拟下载速度为 100KB/s那么每 KB 需要1000ms / 100KB 10ms把response-trickle-delay设为10即可如果要模拟上传速度为 50KB/s就把request-trickle-delay设为1000 / 50 20。我整理了一份常用网络环境的参考值实测下来比较接近真实体验网络类型下载速率参考response-trickle-delay上传速率参考request-trickle-delay2G20 KB/s5010 KB/s1003G100 KB/s1050 KB/s204G1 MB/s1500 KB/s2弱 WiFi200 KB/s5100 KB/s10修改完保存脚本Fiddler 会立即生效。可以看到延迟明显App 端会表现为图片慢慢加载、请求转圈时间变长。做弱网测试时我建议同时开启日志记录把每个请求的耗时记下来方便后续对比。6.3 弱网测试的一个常见误区很多人以为限速就只是“变慢”其实弱网测试的核心不只是速度还有稳定性。Fiddler 的限速是均匀地给每个请求增加延迟但真实弱网环境经常是忽快忽慢、请求超时、连接被重置。所以 Fiddler 适合做“恒速弱网”和“超高延迟”但如果你想模拟丢包、乱序这种极端场景它就不够用了。我自己的习惯是先用 Fiddler 做快速验证确认 App 在慢速网络下的基本表现再配合一些专门做故障注入的工具去模拟丢包和超时。工具没有好坏关键是用对场景。7. 断点修改、正则匹配、AutoResponder进阶玩法的核心7.1 断点调试改请求、改响应当场看效果Fiddler 最强大的功能之一就是断点。所谓断点就是在请求发送前或者响应返回后拦一下让你动手修改数据再放行。这对于测试接口容错、模拟异常返回值来说特别好用。进入断点模式有几种方式在 Rules Automatic Breakpoints 里选择 Before Requests请求前暂停或 After Responses响应后暂停。在 QuickExec 命令行输入bpu加 URL 关键字只对该 URL 的请求启用断点输入bpafter加关键字只对该 URL 的响应启用断点。比如输入bpu https://example.com/api/login再刷新页面这个登录接口的请求就会被拦下来。被断点拦截的请求会高亮显示此时可以在 Inspectors 面板里编辑请求体比如改 JSON 数据里的用户名密码然后点击“Run to Completion”放行服务器就会收到被你修改后的数据。响应拦截同理可以在服务器返回之后、浏览器收到之前修改返回的 JSON用来模拟服务器异常情况比如把返回码改成 500看前端会不会弹出错误提示。这个技巧在联调和测试中几乎天天用。7.2 Filter 和 AutoResponder 里的正则匹配在热搜词里有一条“fiddler 的 rule editor 的匹配条件怎么配置正则”这其实就是 AutoResponder 或者 Filters 里的规则匹配问题。Fiddler 的规则匹配是支持正则的且用法不太一样。AutoResponder 的规则列表里可以直接写正则表达式也可以用REGEX:开头显式声明。比如场景匹配规则写法匹配所有包含api/user的请求.*api/user.*匹配某个域名下的 JSON 请求https?://example\.com/api/.*匹配 URL 中含有固定请求参数的请求.*\?.*id123.*精确匹配某个路径REGEX:.*example\.com/user/\d注意一个坑在正则里.表示任意字符所以如果要匹配字面上的点号需要写成\.。比如你想匹配example.com写成example.com其实也能匹配到因为它把点号当成了“任意字符”但是很容易误匹配到像exampleXcom这样的地址所以官方建议严格的时候写成example\.com。Filters 里也可以使用正则。你可以在 Filters 的 Hosts 区域输入REGEX:.*\.(jpg|png|css)$就能只显示图片和样式表请求输入REGEX:.*api.*就是只看 URL 里含 api 的请求。正则语法本身和大多数语言里的一致会了.*、\d、[]、|、$这几个基础符号大部分场景都够用。7.3 AutoResponder把请求直接“换血”返回AutoResponder 是 Fiddler 里另一个高频功能它允许你不发请求到服务器而是直接返回本地文件或指定响应。我常用的场景有两个前端开发时后端接口还没写好或者挂了我就在 AutoResponder 里把接口请求拖到规则列表然后指定返回一个本地 JSON 文件前端立刻就能跑起来不依赖后端环境。测试时把某个接口的响应改成异常数据观察前端的兜底逻辑。比如原接口返回一个正常的用户信息列表我在 AutoResponder 里把返回值改成空数组看前端会不会出现“暂无数据”的提示。AutoResponder 的匹配条件和前面的正则规则是同一套逻辑支持精确 URL 匹配、前缀匹配和正则匹配。如果勾选了 Unmatched requests passthrough未匹配的请求就不受干扰正常转发到服务器。8. 常见问题排查实录抓不到包、上不了网、证书失效8.1 怎么判断是“没抓到”还是“不该抓到”很多人一上来就问我为什么我打开 Fiddler 却一个请求都看不到先别急着怀疑软件坏了按这个顺序排查看状态栏左下角是否显示Capturing如果不是点击任意位置或按 F12 开启捕获。看浏览器是不是设置了“不使用代理”。Chrome 如果装了代理插件且插件生效是不走系统代理的流量自然进不来。看目标应用是不是局域网内其他设备发的请求。如果流量来自手机确认手机代理设置里填的是电脑 IP而不是 127.0.0.1。看 Filters 里是不是配置了过滤条件把目标流量屏蔽了。我在前面提过Filters 一开默认就会过滤掉很多内容新手很容易忽略。另外有个东西必须了解localhost 和 127.0.0.1 的请求默认不会走 Fiddler 代理因为 Windows 对这些地址默认不启用代理。如果你要抓本地开发的服务比如http://localhost:8080要么把访问地址改成http://电脑的局域网IP:8080要么想办法绕过这个限制。Fiddler 新版对回环地址有特殊处理但在配置不正确时也会抓不到需要留意。8.2 手机连上代理后彻底无法上网手机设置代理后无法上网这是最典型的场景。排查顺序先关掉手机代理确认手机本身能上网排除 WiFi 本身问题。在电脑上检查防火墙是否放行了 8888 端口。最简单的验证方法在电脑浏览器里访问http://127.0.0.1:8888能看到 Fiddler 的证书下载页面就说明代理服务正常手机浏览器访问http://电脑IP:8888能看到同样页面说明端口开放。确认 Fiddler 的 Connections 设置里勾选了 Allow remote computers to connect。菜单位置Tools Options Connections勾选这个选项后重启 Fiddler。不勾选的话远程设备是连不上这个代理的。如果仍然不行八成是电脑自带的安全软件拦截了入站连接去防火墙规则里手动放行 Fiddler。8.3 HTTPS 证书失效、APP 完全识别不出 Fiddler证书相关的问题可以单开一篇博客但最常见的就两类电脑端浏览器疯狂报证书错误通常是只勾了 Decrypt HTTPS traffic没有 Trust Root Certificate。再去 Actions 里点一下信任根证书即可。手机端安装了证书但 App 依然报错一是没到“证书信任设置”里开启完全信任iOS二是 App 内置 SSL Pinning 拒绝任何非官方证书。第二种情况不是配置能解决的需要开发配合。8.4 其他零碎问题速查表现象原因处理方式流量巨大卡顿严重默认是缓冲模式所有响应读完再返回给浏览器在状态栏把缓冲模式切换为流模式Streaming边下边展示抓包时系统代理被改乱Fiddler 非正常退出导致打开系统代理设置手动关闭代理服务只看到 CONNECT 隧道没有内容HTTPS 解密未开启或证书未信任检查 Tools Options HTTPS 的 Decrypt HTTPS traffic手机下载不了证书电脑防火墙拦截 8888 端口检查防火墙入站规则某些 App 的流量完全看不到App 走了非 HTTP 协议或绕过系统代理Fiddler 只能看 HTTP/HTTPS其他协议需换工具9. 最后分享几个我实际摸出来的技巧写到最后按惯例分享几个不一定写在官方文档里、但我日常用着非常顺手的小技巧。第一个是 QuickExec 命令行的妙用。除了前面说的?过滤和cls清空输入select text/html可以快速选中所有 HTML 响应输入status可以按状态码选中会话比如500选所有 500 响应输入!dns 域名能查看 DNS 解析结果。这些命令在排查问题时能省不少点击。第二个是配合 Fiddler 的 Inspectors 里的 JSON 格式化面板看接口。很多新手还在用抓包工具的原始报文一点点抠 JSON其实在 Inspectors 的 JSON 选项卡里Fiddler 已经把响应体格式化好了树形结构一目了然键值对、嵌套数组都看得清清楚楚。如果我需要快速验证接口返回的数据结构基本不会打开 Postman直接在 Fiddler 里选中请求看 JSON 就够了。第三个是关于保存会话的习惯。Fiddler 里每个请求的原始信息都可以一键导出文件格式包括 HAR、SAZ、TXT 等。排查线上问题时我通常会导出 HAR 文件发给后端后端可以直接用 HAR 里的信息复现请求。SAZ 格式则是 Fiddler 的私有存档保存后下次打开 Fiddler 可以完整回放所有请求非常适合留存现场。Fiddler 是一只很老但依然能打的工具网上的教程虽多但大多是命令式的“教你三步抓包”很少有人讲背后的原理和这些细节坑。希望这篇能帮你在遇到抓包问题时不再一头雾水能快速定位问题出在代理、证书还是过滤规则上。工具这种东西用熟了就是手上的兵器用不熟就是满屏乱码多抓几次包、多踩几次坑自然就顺了。
返回列表