五款主流抓包工具横评:从HTTP调试到网络协议分析

发布时间:2026/9/14 14:41:16
五款主流抓包工具横评:从HTTP调试到网络协议分析
搞了这么多年客户端开发和接口调试我电脑上装过的抓包工具两只手数不过来从最早的Fiddler 2到后来的Charles再到转战macOS之后用的Proxyman最近团队里又有同事安利了TraceEagle加上一直没卸过的Wireshark——五个工具放在一起说真的各有各的脾气。很多人一上来就问哪个抓包工具最好用说实话这个问题本身就有问题。抓包工具没有绝对的最好只有跟你的使用场景最匹配的那一个。有人天天调App接口有人搞网络安全分析有人做弱网环境下的性能测试场景不一样工具的选择逻辑完全不一样。这篇文章我不打算做那种罗列特性的说明书式对比而是从实际工作流出发把这五个工具放在真实场景里掰开揉碎了讲顺便把那些年踩过的坑也一并说了。1. 五款工具的身世与定位先搞清楚它们各自想解决什么问题选工具之前得先明白每个工具诞生的背景和它最擅长的事。这就像找对象你得先知道对方是什么性格才能判断合不合适。1.1 Charles移动端调试的事实标准Charles是macOS和Windows双平台都能跑的Java应用名字里那个Charles其实是HTTP代理的谐音梗玩法。它的定位非常清晰面向应用开发者的HTTP/HTTPS调试代理工具。你几乎可以在任何一家互联网公司的客户端开发团队里看到它的身影尤其是iOS和Android开发同学的电脑上Charles基本是标配。Charles的核心设计思路是我就是一个代理服务器所有的HTTP流量从客户端出来之后先进Charles再由Charles转发给服务器响应也原路返回。这个设计让它天然适合做移动端抓包——只要把手机WiFi代理指向电脑手机上的所有HTTP流量都一览无余。它还支持映射Map Local和重写Rewrite可以在不改动服务器代码的情况下模拟各种接口返回这个能力在后端接口还没写好、或者想复现某个bug的时候堪称救命稻草。1.2 Wireshark网络协议分析的元老级选手Wireshark跟Charles完全不是一个物种。它抓的不是应用层的HTTP请求而是从网卡上直接捕获原始数据帧链路层、网络层、传输层的报文它全都能看到。它是目前世界上使用最广泛的开源网络协议分析器前身是1998年的Ethereal至今已经有二十多年历史。用Wireshark你能干嘛你能看到TCP三次握手的每一个包能分析TLS握手过程中客户端和服务端各自发的是什么扩展能通过过滤器筛选出特定IP、特定端口的全部流量还能把一个大文件传输过程的每一个分片都看得清清楚楚。Charles解决的是我的接口请求到底发了什么、响应是什么的问题Wireshark解决的是网络上到底发生了什么、这个协议是怎么一步步完成的的问题两者的思考维度完全不一样。如果你搞网络排障、协议分析、安全研究Wireshark是绕不开的。1.3 FiddlerWindows生态里的老黄牛Fiddler是Telerik公司出品的HTTP调试代理最初只有Windows版本后来出了基于.NET Core的Fiddler for macOS和Linux版本。但说实话Windows版的Fiddler Classic才是它的本体很多老玩家从2010年之前就在用。Fiddler最突出的特点是功能极其丰富而且免费。Composer可以直接构造请求AutoResponder可以做接口mock内置的FiddlerScript脚本引擎可以深度定制流量处理逻辑。这些功能在Charles里很多是要靠付费授权才能用的而Fiddler Classic作为免费软件一直保留着这些能力。代价就是界面比较老派菜单层级复杂第一次用的人往往不知道某个功能藏在哪个菜单下面。1.4 ProxymanmacOS/iOS生态的体验派新秀Proxyman是近几年在macOS开发者圈子里迅速蹿红的一款抓包工具2017年左右发布主打原生体验和现代化界面。它跟Charles走的是同一路线——HTTP调试代理但在界面交互、系统集成方面明显更懂macOS用户。Proxyman有个很讨喜的设计支持macOS系统代理的一键配置也支持通过WiFi代理给iPhone抓包。它对iOS Simulator的支持尤为顺滑一键就能在模拟器里启停抓包不需要手动设置代理。界面布局左右分栏请求列表、请求详情、响应预览、时间轴一目了然视觉上比Charles干净不少。如果你主力机器是Mac、主要调iOS或macOS App的接口Proxyman的上手体验比Charles要舒服一个档次。1.5 TraceEagle国产工具里的实用派TraceEagle是近两年出现在开发者视野里的国产抓包工具主打轻量、开箱即用集成了抓包、弱网模拟、断点调试等常见功能。它比较契合国内开发者的使用习惯界面全中文不用折腾汉化包下载安装也不需要复杂的证书配置官方还内置了一些国内应用市场的证书安装引导。TraceEagle的弱网模拟功能做得比较实用可以在抓包的同时直接设置丢包率、延迟时间、带宽限制不需要额外开一个Network Link Conditioner之类的工具。对于需要做弱网环境下App稳定性测试的团队来说一个工具搞定两件事确实能省不少事。它的断点调试功能也跟Charles的Breakpoints类似可以在请求发出前或者响应返回前拦截下来手动修改数据再放行方便测试各种边界情况。2. 从安装到证书信任不同平台上的第一道坎抓包工具装上容易真正跑起来难90%的新手都卡在HTTPS解密这关。咱们一个一个说。2.1 Charles的证书信任流程Charles抓HTTPS需要先装证书。桌面端是Help菜单里的SSL Proxying→Install Charles Root Certificate。装完之后不同系统还有额外的信任操作——macOS装完要去钥匙串访问里把这个证书设为始终信任Windows要导入到受信任的根证书颁发机构。这步漏了的话抓到的HTTPS流量全是乱码或者直接报错。然后是移动端。手机连上Charles代理后访问chls.pro/ssl下载证书iOS用户下载完还要去设置→通用→关于本机→证书信任设置里手动开启完全信任。Android用户稍微麻烦点Android 7.0以上默认不信任用户证书需要在App的networkSecurityConfig里显式配置或者把证书装进系统证书分区需要root。这也是很多人说Charles抓不了App的HTTPS包的根本原因。2.2 Wireshark的TLS解密几乎是另一个世界Wireshark本身不主动解密TLS流量但它可以借用浏览器的SSLKEYLOGFILE环境变量来解密。你需要在启动浏览器或者支持SSLKEYLOGFILE的客户端之前设置好这个环境变量让浏览器把TLS会话密钥写入一个日志文件然后在Wireshark里通过Preferences→Protocols→TLS配置这个日志文件的路径之后就能看到解密后的HTTP内容了。注意这个方法只对支持SSLKEYLOGFILE的客户端有效。Firefox和Chrome都支持LibreSSL部分的OpenSSL也支持curl和Python的某些库也可以但很多商业软件和系统组件不支持。所以Wireshark的TLS解密是有条件限制的别指望它能像Charles那样通吃所有应用的HTTPS流量。2.3 Fiddler的证书体系与兼容性Fiddler的证书机制跟Charles类似但细节略有不同。Fiddler在首次运行时会自动生成一个自签名根证书并安装到系统里你可以在Tools→Options→HTTPS里勾选Decrypt HTTPS traffic来启用解密。它支持为不同平台导出不同格式的证书——Windows导出CERAndroid导出CERiOS导出CER或通过代理访问http://ipv4.fiddler:8888下载。Fiddler有个比较头疼的问题是跟一些严格校验证书的App不兼容。比如某些银行类App做了SSL Pinning证书固定Fiddler抓包时App会直接拒绝连接甚至闪退。这不是Fiddler的问题而是SSL Pinning策略本身就阻止了中间人代理。遇到这种情况需要配合Frida这类Hook框架绕过校验那属于另一套玩法了。2.4 Proxyman的极简化证书方案Proxyman把证书安装做成了向导式的。打开软件后它会自动检测系统代理状态提示你安装和信任证书的点点了就完事。iOS设备连上代理后用Safari访问http://proxy.man/ssl就能下载描述文件形式的证书安装后在证书信任设置里打开开关即可。整个流程比Charles顺畅很多基本不需要看教程就能一次搞定。值得一提是Proxyman对macOS的Network Extension支持得很好可以不改系统代理就捕获特定进程的流量。通过系统代理抓包有个副作用——某些走系统代理的网络请求如果不走标准的SOCKS或HTTP代理协议就直接抓不到了。Proxyman的进程级抓包方案可以绕过这个限制。2.5 TraceEagle的汉化引导优势TraceEagle在证书引导这块做得很接地气。软件内置了详细的中文引导流程针对iOS和Android分别给出了傻瓜式步骤甚至贴心地提供了扫码下载证书的功能。你不需要去搜索引擎翻教程按着引导一步步走就行。很多国内工具的用户是团队里负责测试的同事不一定有很深的技术背景TraceEagle这种引导式设计确实能把上手成本降到最低。弱网模拟的配置界面同样是中文的下拉选个网络制式2G/3G/4G/5G或者自定义延迟丢包参数比Fiddler里那个北向的Latency设置面板直观太多。注意不管用哪个工具抓包结束后记得把手机或电脑的代理设置关掉。我见过好几个人Fiddler卸载之后电脑上不了网就是因为卸载时没还原系统代理设置。那就是下面要说的坑。3. 实战场景下的能力差异同一类操作五款工具分别怎么做对比工具不能只看参数表得放在具体任务里看谁顺手、谁能干谁不能干。3.1 HTTPS解密各自的支持范围这是抓包工具的看家本领。Charles和Fiddler都是通过自建根证书实现中间人解密Proxyman和TraceEagle也一样思路完全一致——安装根证书→信任根证书→按域名或通配符开启动态解密。差异在于Charles通过SSL Proxying Settings配置需要解密的域名可以填*表示所有域名缺点是配置错了就抓不到。Fiddler默认只解密来自浏览器的流量勾选Decrypt HTTPS traffic后会有个选项…from non-browser only需要手动取消勾选才能解密所有进程。Proxyman直接把域名解密开关做成了列表项可以针对具体域名开关也可以一键全开。TraceEagle的解密设置同样支持通配符界面中文勾勾选选就行。Wireshark的特殊性前面说过了它通过SSLKEYLOGFILE解密不是中间人方式。这里有个性能层面的差异提一嘴中间人解密是有CPU开销的。尤其是并发量高的时候一次请求要经历解密-查看-重新加密转发的完整链路处理不过来就会影响请求延迟。实测下来同样抓一个视频类App的首页瀑布流接口Charles在高并发下偶尔会出现响应变慢的情况Proxyman要好一些TraceEagle表现中规中矩。如果只是抓包测试问题不大但你要是想边抓包边流畅地刷抖音看视频就得留意这个性能差异了。3.2 移动端抓包从配置代理到WLAN代理手机抓包的共同原理都一样手机和电脑连同一个局域网手机上把代理IP设为电脑的局域网IP端口设为抓包工具的监听端口流量就走代理进入抓包工具了。Charles默认端口8888手机装证书访问chls.pro/ssl。iOS和Android都能抓但Android 7.0的用户证书信任问题会让很多App的HTTPS抓不到这个跟工具无关是系统机制。Fiddler默认端口8888手机装证书需要访问http://你的电脑IP:8888页面最底部有FiddlerRoot certificate下载链接。Proxyman默认端口9090iPhone扫码或访问proxy.man/ssl下载描述文件。它对iOS Simulator更友好一键开启即可。TraceEagle默认端口也是8888但它的引导页直接匹配了国内常见的网络环境支持在同一局域网和远程代理两种模式远程代理可以解决手机和电脑不在同一WiFi下的问题。Wireshark在手机上需要配合Android的tcpdump或者macOS的rvictl工具把手机流量镜像到电脑属于远程抓包玩法日常App调试不推荐。有个很多新手不知道的点iPhone上代理设置那儿如果你填了代理IP和端口但访问网络时某些App不走系统代理比如一些游戏、直播App它们用底层的socket直接连那抓包工具是看不到这些流量的。这种情况要么上Proxyman的进程级捕获要么用Wireshark镜像网卡流量再要么用路由器的端口镜像。3.3 Wireshark独有的过滤与协议分析能力这是Wireshark的绝对主场。它的显示过滤器支持几百个协议字段的条件组合比如tcp.port 443 ip.src 192.168.1.100可以精确筛选出特定IP发往443端口的TCP包。还可以看TCP流的完整会话右键Follow→TCP Stream就能看到一次HTTP请求从SYN到FIN的完整过程包括重传、乱序、窗口更新等传输层细节。这些信息在排查接口为什么偶尔超时、TCP连接为什么建立失败这类问题上价值极高Charles这类应用层工具看不到这些。再比如排查视频卡顿问题你可以用Wireshark看到视频分片的每一个UDP包是否按序到达有没有丢包重传服务器的发送窗口有没有打满。用Charles只能看到每个分片请求的耗时但看不到底层传输问题。这就是知道发生了什么和知道为什么会这样的区别。3.4 弱网模拟Charles、Fiddler与TraceEagle的三条路线弱网测试是移动端开发绕不开的一环。Charles的Throttle Settings可以开启限速支持设置带宽、往返延迟、丢包率还能按域名单独配置。功能不少就是入口藏得深很多人第一次找半天。Fiddler的弱网模拟靠的是FiddlerScript里面的OnBeforeRequest和OnBeforeResponse里塞延迟代码或者用SimulateModem选项一个预置脚本可以限速但不能精确模拟丢包率。TraceEagle的弱网模拟直接在界面上操作选网络类型或者自定义设置好后对全局或者指定域名生效。它还可以模拟DNS故障和连接中断这类极端情况用来做异常场景测试很方便。Proxyman没有内置弱网模拟需要配合macOS的Network Link Conditioner使用算是一个短板。Wireshark做不了弱网模拟它是分析工具不是代理工具。如果你所在团队经常做弱网专项测试TraceEagle这类内置弱网能力的工具会省很多事。我实际用下来TraceEagle模拟弱网状态下App的超时弹窗表现效果跟真机实网弱网接近至少比FiddlerScript改代码要省心多了。3.5 抓包数据的可视化与导出比对数据展示这块最能体现一个工具的品味。Charles的响应体有JSON、XML、JSON-Pretty等格式展示支持按关键字搜索请求还能保存会话Session给别人看支持导出为Har文件。Proxyman的UI做得最现代响应体高亮、注释、书签、差异对比功能一应俱全尤其那个Response Timeline能从时间维度看到所有并发请求的耗时分布。Fiddler的Inspectors可以分上下两部分分别看请求和响应支持Hex、ImageView等多种格式但界面比较旧。TraceEagle的请求详情也支持JSON视图和原始报文基本够用。Wireshark的Packet Bytes面板是十六进制字节流配合左下角的Packet Details树状结构看协议头字段不适合日常看接口返回。关于会话保存如果团队成员之间需要互相排查问题统一用Har格式导出最通用五个工具都支持Har导出。有些时候对方用的是另一个工具你把Har文件丢过去他直接拖进工具就能看省得截图来截图去。4. 日常使用中翻车最多的几个坑亲测踩遍后的修复记录工具用久了总会遇到各种奇葩问题这里挑几个典型的、每个都对应一大片搜索量的实际问题展开说。4.1 Fiddler卸载后电脑上不了网这个问题在热搜词里有一席之地因为它真的是个高频坑。原因很简单Fiddler运行时会修改Windows的WinINET代理设置把系统代理指向127.0.0.1:8888。如果你开着Fiddler的时候直接卸载或者程序崩溃退出系统代理没有被还原但Fiddler的服务已经没了代理指向一个不存在的端口所有走代理的网络请求自然全部失败。解决思路非常直接——手动把代理设置改回去。Windows设置里搜代理把使用代理服务器开关关掉就行。如果嫌麻烦命令行也可以netsh winhttp reset proxy reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings /v ProxyEnable /t REG_DWORD /d 0 /f第一条命令重置WinHTTP代理第二条把WinINET代理开关关掉。执行完再刷新一下网络就是正常的了。另外装高版本的Fiddler Classic一般会在退出时自动还原代理设置所以优先用正常退出别在运行的时候强杀进程。4.2 Charles证书信任配置后仍然显示Could not authenticateyou may need to configure your browser or application to trust the Charles Root Certificate——这个报错几乎每个用Charles的人都见过。多半是装了证书但没做信任操作。macOS上要打开钥匙串访问找到Charles Root Certificate双击后在信任栏里把使用此证书时改成始终信任。iOS上除了安装描述文件还必须去设置→通用→关于本机→证书信任设置里开启完全信任。很多人栽在最后一步。如果你确认信任已经设置好还是报错那就检查代理有没有生效以及目标域名是否在SSL Proxying的设置列表里。Charles默认是不解密任何域名的必须到Proxy→SSL Proxying Settings里添加域名或者设置成*通配符否则它直接放行流量不做解密。这个设计很多人不习惯但它其实是为了安全默认不干预流量。4.3 Wireshark只显示520字节怎么显示2090个字节的数据这是一个很经典的问题。很多人用Wireshark抓包发现一个问题明明数据内容挺长的但Packet Bytes面板里只显示了520个字节而且右下角黑黢黢一片特别短。原因跟Wireshark的一个显示限制有关。Wireshark的Packet Bytes面板默认最多显示一行数据的长度受限于Preferences→Appearance→Layout里的设置但更核心的原因通常是TCP的分段。以太网MTU一般是1500字节扣掉IP头和TCP头之后TCP单段最多携带1460字节数据。如果一个应用层数据是2090字节它会分成两个或更多的TCP段发送Wireshark里会看到两个包每个包各自带着一部分数据。如果你只盯着某一个包看自然只看到一部分字节。要完整看到2090字节的应用层数据正确做法是右键点击应用层协议报文比如HTTP选择Follow→TCP Stream在弹出的窗口里就能看到完整的数据流不受单个包的显示限制。这个操作会按流重组把你看到的多个TCP段拼成完整的HTTP请求或响应内容。如果还是只显示单包的内容可以在Preferences→Protocols→TCP里勾选Allow subdissector to reassemble TCP streams这个选项能让Wireshark自动重组跨多个TCP段的协议数据。顺带说一句tcpdump抓包时如果设置了-snap-length-s参数为特定值比如256或者520那抓到的包本身就被截断了不是显示问题是数据本身只有那么长。这种截断导致的数据不完整Wireshark怎么设置都无济于事只能重新抓包或者换大快照长度。4.4 TraceEagle断点调试时的改了不生效问题有些用TraceEagle的同仁反映断点拦截后修改了响应数据放行之后App里看到的还是原始数据。排查下来多半是修改了但没按提交或者放行按钮还有一部分原因是App对响应数据做了本地缓存你改了响应但App直接用了缓存。还有一个容易忽略的小细节断点修改响应的Content-Length。如果你把响应体从100字节改成200字节但请求头里的Content-Length没有同步更新客户端收到响应后解析就会错乱表现为报错或者根本显示不出来。手动改响应体的时候记得一并检查Content-Length。Charles和Fiddler的断点机制在部分场景下会自动修正Content-LengthTraceEagle有时候不会这也是国产工具在工程化细节上的一个差距写代码的时候自己补上就好了。4.5 Proxyman在iOS 16以上偶尔抓不到包iOS 16之后苹果对DNS解析和代理的处理有些变化Proxyman有时候会出现明明代理开了但App流量没进到工具的异常。我查过GitHub上的issue官方给出的建议是重启Proxyman的代理服务或者到Proxyman的Advanced里关闭IPv6只走IPv4。有些碰到这个问题的人说把手机WiFi忽略重新连接也能解决。归根结底这个问题的本质是iOS系统对网络栈的管理策略调整不是Proxyman自己能完全控制的。遇到这种玄学问题最有效的方法往往是重启大法加切换代理模式。Fiddler在Windows上偶尔也会遇到类似的情况一般重置一下WinINET代理就恢复了。4.6 Wireshark只能捕获到广播包或自己的回环包新用户最常问的另一类问题是Wireshark怎么抓不到其他电脑的包。这涉及到交换机的机制——在普通局域网里交换机会把每个端口的帧只转发给目标MAC对应的端口而不是广播所有帧。Wireshark装在电脑A上只能看到发往或来自A的帧看不到电脑B和C之间的通信。要抓其他设备的流量要么在交换机的上行口做端口镜像要么用AP的抓包功能要么在中间串一个Hub让所有流量都广播到各个端口现在基本买不到Hub了。如果再折腾一点可以用Linux做透明网桥把流量镜像到抓包机。这个在局域网点对点排障或者做协议分析的时候非常有用但普通Web开发基本用不到。5. 选型建议不同角色、不同场景下的标准答案说了这么多最后落到实际选型上。如果你明确了自己的角色和主要场景其实选型思路是很清晰的。5.1 从团队角色出发的需求拆分客户端开发iOS/Android主力工具推荐Charles或Proxyman。日常调接口、看参数、mock返回这两个工具的交互效率最高。iOS开发优先选Proxyman它跟模拟器的配合、系统的集成度做得最丝滑。Android开发Charles可能更通用因为很多老教程、同事的经验都是基于Charles遇到问题好查。前端开发特别是H5/小程序调试Charles和Fiddler都合适看你的操作系统。macOS就用CharlesWindows就用Fiddler。重点是用好Map Local功能做本地mock以及用代理转发到本地联调。后端/服务端开发Wireshark对网络排查和协议分析的价值无可替代但日常接口调试可以配合一个代理工具。服务端开发排查为什么这个请求超时了的时候Wireshark看TCP重传、看SYN包有没有回比任何应用层抓包工具都清晰。测试工程师TraceEagle优先其次是Fiddler。弱网模拟、断点、mock这些测试刚需功能不需要额外配置界面中文团队协作成本低。Fiddler适合做功能较重的测试脚本配合FiddlerScript能实现很多自动化测试逻辑。安全/逆向工程师Wireshark是底线工具配合Burp Suite或者自定义中间人代理来搞。Charles这类工具只是辅助很多时候要自己写脚本。5.2 端侧覆盖与系统偏好对照表工具macOSWindowsLinuxiOS模拟器Android模拟器弱网模拟TLS解密方式Charles支持支持支持手动代理手动代理支持中间人证书Fiddler Classic不支持支持不支持不支持手动代理脚本或SimulateModem中间人证书Fiddler Everywhere支持支持支持手动代理手动代理脚本中间人证书Proxyman原生支持支持(新版)不支持一键集成部分支持需插件中间人证书Wireshark支持支持支持rvictil远端tcpdump/AVD不支持SSLKEYLOGFILETraceEagle支持支持未验证手动代理手动代理内置完善中间人证书注意Fiddler Classic和Fiddler Everywhere是两款不同的产品前者是免费的老牌Windows工具后者是跨平台付费产品别搞混了。5.3 我的最终建议双工具组合思路我不太建议把所有希望寄托在一个工具上。长期实践下来比较顺手的组合方式是一个应用层代理调试工具 一个协议层分析工具前者解决业务调试后者解决疑难问题。我自己现在的搭配是Proxyman加Wireshark前者用来做日常的App接口调试、mock和重写后者在排查TCP/TLS层面的问题时兜底。如果团队里有Windows机器Fiddler依然是一个很称职的调试工具Charles则是跨平台协作时最不容易出错的最大公约数。说到跨平台协作有个小细节值得提一下同一个团队里用的抓包工具不一样导出的会话文件最好统一用Har格式。Charles、Fiddler、Proxyman、TraceEagle都支持导出HarWireshark也能导入Har通过相关插件或者转换工具这样排查问题的时候互相传文件就不会因为工具不同卡壳。5.4 TraceEagle值不值得用我的实测结论TraceEagle作为一个新晋国产工具我实际用了一周总体评价是定位精准细节有惊喜深度有待加强。它的优势在于全中文界面和弱网模拟的便捷性对测试团队特别友好不需要额外学习成本。不足的地方在于一些高级功能还不够细腻比如断点编辑后Content-Length不会自动修正脚本扩展能力也比较弱。如果只是做日常的调试、弱网测试、接口验证它是完全够用的。根据我对这个工具的观察它未来如果能补齐脚本扩展和更细致的流量分析功能完全有实力在轻量调试领域抢下不小市场份额。但目前阶段技术深度比较高的场景还是得靠Charles和Wireshark这对黄金搭档。说起来无论选哪个工具真正能让你工作效率倍增的从来不是工具本身而是你对HTTP协议的理解深度。工具只是把数据展示在你面前怎么从数据里发现问题、定位问题、解决问题靠的还是你对网络协议栈、对业务逻辑的把握。这也是为什么我建议新人不要只学某一个工具的操作而是要借抓包的过程去理解TCP/IP、理解HTTPS握手、理解DNS解析的全过程工具才会真正成为你的利器。