ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

抓包工具怎么选?Charles、Fiddler、Proxyman、Wireshark原理对比与实战避坑指南

抓包工具怎么选?Charles、Fiddler、Proxyman、Wireshark原理对比与实战避坑指南 开头前两天帮一个做iOS开发的朋友排查接口问题他手机上装了三款抓包工具结果一个显示无法连接、一个全是一堆看不懂的TCP包、还有一个干脆抓不到任何HTTPS请求。他问我到底该用哪个我反手就问了一句你先想想这几款工具的原理压根就不是一回事。很多人一上来就问哪个抓包工具最好这个问题本身就问错了。抓包工具不是越贵越好、也不是功能越全越好而是取决于你面前这台电脑、你要调试的设备、以及你要看的流量在哪一层。市面上的主流抓包工具——Charles、Fiddler、Proxyman、TraceEagle、Wireshark——看起来都是抓包实际上工作原理、适用场景、上手难度差了十万八千里。这篇文章就围绕这五款工具从原理、实操、踩坑、选型四个维度做一次完整对比帮你在具体场景下做出正确的选择。先说结论如果你是做Web前端、移动端接口联调、需要mock数据、看HTTPS明文内容优先考虑Charles、Proxyman、Fiddler这类基于HTTP代理的工具如果你要分析TCP三次握手、DNS解析、TCP重传、甚至某个私有协议的报文那就必须上Wireshark。至于TraceEagle这类相对轻量的工具适合一些特定场景下的快速排查。下面我逐个拆解。1. 抓包工具的两大流派代理转发与网卡嗅探很多人有个误解认为抓包就是装一个软件然后所有网络请求都会自动被它拦截下来。实际上完全不是这样。所有抓包工具按照底层原理可以分成两大流派理解了这一点后面所有工具的取舍就都不需要死记硬背了。1.1 代理型抓包工具流量在你这里拐了个弯Charles、Fiddler、Proxyman、TraceEagle都属于代理型工具。原理非常简单它们会在你电脑上开一个HTTP代理端口通常是8888或者8888附近的端口然后你把手机或者浏览器的网络代理指向这台电脑的这个端口。这样一来原本App或者浏览器要发往服务器的请求会先被转发到抓包工具上抓包工具再把请求转发给真正的服务器。响应返回时也是先经过抓包工具再回到App。这种机制有个额外的好处抓包工具可以在请求和响应的必经之路上做手脚——比如把请求重定向到其他服务器、修改响应内容、模拟弱网、拦截请求后再手动修改重发。这就是Charles的Map功能、Fiddler的AutoResponder功能能实现的底层原因。代理型工具抓HTTPS的时候依赖的是一套中间人证书机制。工具会生成一个自己的根证书你把根证书安装并信任到手机或电脑上然后它就能解密HTTPS流量看到明文内容。如果你不装证书那么抓到的HTTPS请求就是一堆密文看不到任何有用信息。1.2 网卡嗅探型工具在数据通路上旁听Wireshark走的是完全不同的路子。它不需要你把代理指向它而是直接把网卡设置成混杂模式相当于在你家网络出口的交换机上接了一个分光器所有流经这块网卡的数据包都会被复制一份交给Wireshark分析。这种方式的优势是它不需要你的设备配合不需要装证书不需要配代理而且能抓到的协议类型几乎是无限的——TCP握手包、DNS查询、ARP广播、TLS握手、ICMP、DHCP等等都可以看到。不过代价也很明显因为是在底层抓原始数据包Wireshark默认情况下看到的HTTPS流量是密文想看明文需要额外导入SSLKEYLOGFILE文件。而且它不能直接修改请求、重放请求它是分析工具不是调试工具。1.3 从原理差异推导出的选型第一原则用生活化的比喻来解释代理型抓包工具是收发室模式——所有信件都经过收发室收发室帮你拆开、复印、改内容、再发出去网卡嗅探型工具是监控摄像头模式——摄像头看着门口过往的所有车辆和包裹但它管不着包裹里面是什么也不能把包裹拦下来改一改再放行。所以选型的第一原则就很清晰了你要看、改、造HTTP/HTTPS请求——选代理型Charles、Fiddler、Proxyman、TraceEagle你要观察、定位、分析底层网络问题——选Wireshark你要两者兼顾——那就两个都装各管各的事这个原则决定了我后面所有工具介绍的展开方向。2. 逐款拆解Charles、Fiddler、Proxyman与TraceEagle的定位和特长代理型工具确实共享着中间人代理这套底层机制但它们在界面设计、平台适配、功能侧重、使用体验上差异非常明显。2.1 Charles跨平台老牌工具移动端调试体验最成熟Charles是我用了七八年的主力抓包工具也是目前国内前端和移动端开发圈子里使用率最高的一款。它是一个Java写的桌面应用Windows、macOS、Linux都能跑这一点非常关键——很多团队是混合办公环境有人用Mac有人用WindowsCharles在两边体验比较一致。Charles的核心优势有三点。第一移动端抓包体验极其成熟它支持手机通过Wi-Fi把代理指向电脑而且提供了一键设置、SSL代理的界面配合iOS和Android安装根证书后抓HTTPS的明文请求非常顺畅。第二mock数据能力强Map Local功能可以把某个接口的响应直接映射到本地文件Map Remote可以把请求重定向到别的服务器这对前后端分离开发和联调极其重要。第三断点功能可以在请求发出去之前断住手动修改请求头、请求体再放行响应回来之前也可以断住修改响应内容再返回给App。这在模拟各种边界场景时简直是神器。不过Charles也不是没有痛点。首先它是收费软件虽然网上有不少注册码我个人不推荐用盗版稳定性无法保证正版授权的费用对个人开发者来说不算便宜。其次界面虽然清晰但稍显老气和高分辨率屏幕的适配偶尔会出小问题。另外Charles的汉化版存在一定的版本滞后问题如果你用中文版建议注意版本号别和最新版差太多导致协议或证书机制不一致。2.2 FiddlerWindows生态的免费主力Fiddler Classic与Everywhere分道扬镳Fiddler是微软生态下的老牌抓包工具分两个分支Classic经典版和Everywhere新版。Classic是免费的运行在.NET Framework上Windows下体验极佳Everywhere是收费的跨平台新版但口碑一直不如Classic所以很多老用户到现在还是守着Classic。Fiddler Classic最大的优势是免费且功能完整AutoResponder自动响应器可以模拟返回指定内容Composer可以手动构造请求Filters可以做流量过滤而且它内置了FiddlerScript脚本引擎你几乎可以脚本化一切操作。如果你在Windows环境做接口调试、第三方服务联调Fiddler Classic露一手就够用。它另外一个突出场景是弱网测试。Fiddler的菜单里直接有Simulate Modem Speeds这种一键模拟2G/3G网速的选项配合自定义脚本还可以模拟丢包和延迟这一点对移动端测试工程师特别友好。不过它也有明显短板一端是C#写的启动和响应速度略慢对HTTPS的解密配置相对繁琐新用户容易卡在证书信任这一步界面UI明显偏向工具而不是产品第一次打开的人可能会觉得有点粗糙。2.3 ProxymanmacOS/iOS生态的新代界面和性能双赢Proxyman是我最近两年用得越来越多的工具尤其在做iOS真机调试的时候体验比Charles还要顺滑。它原生支持macOS界面现代化程度、响应速度都远超Java系的Charles。Proxyman几个特性值得单独拎出来说。一是对Apple设备的友好程度它可以在一次点击内配置iOS模拟器的代理并且自动帮你装根证书配合Apple Silicon芯片的Mac抓包时的吞吐性能相当好大流量下界面不卡。二是脚本和规则它支持JavaScript脚本处理请求和响应也可以像Charles一样做Rewrite和Map定位清晰。三是它提供了系统代理的开关——有时候我们只是临时看一个网站的请求不想影响整个系统的网络代理这个开关就很方便。Proxyman的不足也很明显它目前只有macOS版本Windows和Linux用户直接用不了另外它同样是收费软件虽然有免费额度但用得深了就得付费。如果你的团队是清一色的Apple生态Proxyman值得优先考虑。2.4 TraceEagle轻量级选手适合快速排查和跨端查看TraceEagle在知名度上不如前几位但在特定的场景下它有自己的价值。它主打的是轻量化抓包与查看安装包小、启动快界面做了大量简化学习成本非常低。你可能在接手一个老项目、想快速看一下某个App的HTTP流量或者你在现场演示、需要快速给同事展示请求日志——这种时候开一个Charles有点重开TraceEagle这种轻量工具反而顺手。TraceEagle的特点是把查看和分享做得轻巧。抓包记录可以很方便地导出成文本或JSON发出去适合在协作文档里带上具体抓包信息。不过它也有相对明显的局限高级功能比如断点调试、脚本扩展、深入的协议解析都不如Charles、Fiddler、Proxyman完整。它更偏流量快照工具而不是深度调试平台。上手快、体积小、查看分享方便是它的定位日常深度的联调和数据模拟我还是建议用前三者。2.5 五款工具核心参数对比表为了让你一眼看清他们的差异我列一张对比表。维度CharlesFiddler ClassicProxymanTraceEagleWireshark底层原理HTTP代理HTTP代理HTTP代理HTTP代理网卡嗅探平台支持Win/macOS/LinuxWindows为主macOSWin/macOS跨平台Win/macOS/Linux免费/收费收费支持试用免费Classic收费有免费档免费/轻量付费完全开源免费HTTPS明文解密支持装根证书支持装根证书支持装根证书支持装根证书支持需SSLKEYLOGFILE请求修改/重放支持断点/Map支持AutoResponder/Composer支持脚本/重写基础支持不支持只能分析弱网模拟支持限速支持一键限速脚本支持网络调节弱不支持可通过丢包工具配合核心适用场景移动端Web联调Windows接口调试iOS/macOS生态快速流量查看底层协议分析上手难度中中中低对Apple用户低高这张表建议大家截图留存选型困难的时候拿出来对照一下就明白了。3. Wireshark的使用边界什么时候必须用它什么时候别用它接下来单独聊聊Wireshark。因为它是五款工具里唯一的网卡嗅探型工具也是唯一不做代理、不装证书的工具。它在整个工具链里的角色和代理型工具完全不同。3.1 Wireshark能看到的是代理工具永远看不到的代理型工具本质上是干HTTP(S)应用层活的所以当问题出在更底层它往往无能为力。举例来说排查App偶发请求超时你需要看TCP的三次握手是否完整、有没有大量TCP重传、SYN包有没有被丢弃排查DNS解析慢你需要看本地发出的DNS查询包、DNS服务器的响应时序排查这个App是不是在背后偷偷上报数据你要看除了HTTP之外它有没有连自定义端口、有没有发私有协议的包排查Wi-Fi环境下丢包率网卡带宽被什么流量占满Wireshark的统计和流量分析功能直接量化展示这些场景下Wireshark是唯一能胜任的。它不依赖任何代理不管你的App怎么封包、用什么协议只要数据包经过这块网卡它就一定能抓到。3.2 Wireshark过滤器从抓一堆包到抓关键包Wireshark刚上手的人最容易崩溃的点是打开之后满屏滚动包根本看不懂。问题的核心在于你没配置过滤规则。Wireshark的过滤器分两层。抓包过滤器Capture Filter在开始抓包前就得设置好它决定哪些包被录进来。比如只抓80和443端口的流量可以写tcp port 80 or tcp port 443抓某个IP的流量host 192.168.1.100显示过滤器Display Filter抓完之后的筛选它决定已抓到的包里当前显示哪些。比如只看HTTP请求http只看特定IP的TCP重传tcp.analysis.retransmission ip.addr 192.168.1.100只看DNS请求dns只看TLS握手的前几个包tls.handshake.type 1我自己的习惯是抓包时用尽量宽泛的抓包过滤器甚至不设抓完再用显示过滤器慢慢筛。因为你永远不知道后面会不会需要分析当时没注意到的某种包抓的时候限制太死后面想找就找不回来了。3.3 Wireshark解密HTTPS使用SSLKEYLOGFILE的完整路径前面提到Wireshark默认看不到HTTPS明文。但它有办法解密让浏览器或App在TLS握手时把会话密钥导出来Wireshark拿到密钥后就可以解出明文。具体做法以Chrome浏览器为例设置环境变量指定密钥日志文件的位置export SSLKEYLOGFILE~/sslkeylog.logWindows上在系统属性-环境变量里添加同名变量也可以。用这个环境变量启动Chrome然后正常访问HTTPS网站。重启一个终端用同样的环境变量启动Wireshark进入Preferences → Protocols → TLS在(Pre)-Master-Secret log filename里填入刚才的密钥文件路径即可。这样就可以在Wireshark里看到TLS解密后的HTTP头部和数据内容了。需要提醒的是这个方案只在你自己控制的浏览器或运行环境里有效对装了SSL Pinning的App无效因为那种场景App根本不会导出密钥。3.4 Wireshark的三类典型使用场景移动端真机弱网问题用Wireshark抓Wi-Fi网卡的包配合Charles或Fiddler做限速观察TCP重传和连接建立耗时判断是网络抖动还是App重试逻辑有问题。接口偶发超时同时抓App电脑端的包和服务器的包通过比较两端抓到的时间戳判断延迟到底发生在哪一段链路。分析非HTTP协议游戏、IM、IoT设备很多走自定义二进制协议Wireshark的协议解析器覆盖面极广加上TLS解密能力几乎可以处理所有你能遇到的网络报文格式。4. 选型参考前端、iOS、Windows、测试各自怎么选说了这么多原理和工具特性下面我把选型建议按角色和场景直接列出来方便你抄作业。4.1 Web前端/接口联调工程师首选Charles。理由很简单它跨平台、mock能力强、断点功能完善Web前端最常见的需求就是后端接口还没写好先用Map Local模拟数据和后端返回的字段不对用断点改一下响应看看前端展示效果Charles这两件事做得最顺手。如果你在Windows上又不想付费Fiddler Classic也能覆盖90%的需求且AutoResponder用起来也不赖。4.2 iOS/macOS开发者Proxyman是体验最优解。它对iOS模拟器的代理配置、证书安装、真机调试流程都做了深度优化整个抓包体验很顺滑。如果你已经习惯了Charles或者项目里有其他平台的同事也要看同一个包那就继续用Charles问题也不大。要记住的是不管Proxyman还是CharlesiOS 14之后的本机网络权限、允许不受信任的HTTPS证书开关都要在设置里打开否则抓包会出各种奇怪问题。4.3 Windows生态开发/测试Fiddler Classic是性价比最高的选择。免费、功能全、微软生态兼容好还能一键模拟弱网。如果你觉得它界面太老气或者启动偏慢也可以考虑Charles——不过Charles没有免费版试用期过了需要购买授权。4.4 测试工程师/需要弱网测试的团队弱网测试恰恰是Fiddler的强项它内置模拟调制解调器速度的选项一键就能限速到很低的带宽。Charles和Proxyman同样支持手动设置带宽和延迟但需要你在菜单里逐项配置不如Fiddler来得直接。所以如果团队里测试机以Windows为主Fiddler Classic当弱网测试工具完全够用。4.5 网络工程师/后端性能排查这个场景没得选Wireshark必须装。你需要看TCP握手、连接重置、重传率、响应时间、DNS解析流程只有Wireshark能给你完整且精准的数据。建议搭配tcpdump使用在服务器上抓包产出的pcap文件再用Wireshark打开分析这是网络排查的标准工作流。4.6 快速查看流量的协作场景如果你只是临时看看某个App的请求日志、需要把抓到的记录导出给同事或者贴到工单里TraceEagle这类轻量工具就派上用场了。它打开快、操作简单、导出方便几十秒就能完成一次流量查看可以作为主力工具之外的轻骑兵。5. 新手高频踩坑从抓不到包到卸载后断网无论是Charles、Fiddler、Proxyman还是Wireshark新手上路时遇到的绝大多数问题都不是操作本身而是对代理和证书这两个概念的理解偏差。我根据搜索热词和平时答疑经验把出现频率最高的几类坑做一个完整排查。5.1 Charles抓不到代理手机的包四点排查链路这是问得最多的问题没有之一。手机代理已经设置好了Charles也开着但App里的请求就是不出现——排查链路长这样。第一确认手机和电脑在同一个局域网。很多人办公室开了访客Wi-Fi两个设备虽然都连着同一个Wi-Fi名称但AP隔离把设备之间隔开了代理流量根本到不了电脑。这个可以通过手机Ping电脑IP来验证。第二确认代理端口没有冲突。Charles默认8888端口如果你电脑上已经有一个程序占了8888Charles会提示端口被占用。可以换一个端口比如8899同时手机上代理端口也要对应改成新的。第三确认Charles的SSL Proxying设置。Charles默认开启SSL代理的开关在菜单Proxy → SSL Proxying Settings里如果你要抓HTTPS的域名没被包含进include列表那HTTPS流量即使经过Charles也会显示为密文一堆加密数据。建议在调试阶段直接填*表示抓所有域名。第四也就是最常被忽略的手机有没有安装并信任Charles的根证书。很多人只装了证书忘记在设置→通用→关于本机→证书信任设置里打开信任开关尤其是iOS设备不信任证书等于没装。Android这边还要注意7.0以上的App默认不信任用户级证书如果你调试的App是release版本且有网络安全配置限制那抓包工具确实无能为力。此时需要考虑root设备或者配合Frida这类hook工具解除SSL Pinning。5.2 Fiddler卸载后上不了网八成是系统代理没恢复这个问题也是高频搜索原因其实特别简单。Fiddler在启动时会自动把系统代理指到它自己监听的端口通常是8888退出时按理说应该把系统代理恢复原状。但如果进程被强制杀掉比如任务管理器结束任务、或者卸载时软件没有机会执行退出清理逻辑系统代理就一直留在指向8888端口的状态。Fiddler这个程序都没了8888端口上自然没有服务于是你发现浏览器报无法连接到代理服务器。解决办法分两步。第一步打开控制面板 → Internet选项 → 连接 → 局域网设置把为LAN使用代理服务器或者使用自动配置脚本这一类的勾选全部取消。第二步检查环境变量里的HTTP_PROXY、HTTPS_PROXY是否被Fiddler改过有的话删掉或改回原值。Windows上这两步做完网络基本就恢复了。这个坑提醒我们用代理工具千万不要硬杀进程尽量走正常的退出菜单。5.3 Wireshark安装后什么都抓不到这个问题两个原因最常见。一是没以管理员身份运行——Wireshark要打开网卡混杂模式必须要有管理员权限Windows上如果你没用以管理员身份运行启动打开网卡抓包时会提示权限不足要么完全抓不到包要么抓到的包只有你自己的那一点。二是选错了抓包网卡比如你明明在用Wi-Fi上网却在Wireshark里选了以太网那张物理网卡自然抓不到任何数据。进入Wireshark首页观察哪张网卡有实时波形图跳动选那张就对了。还有一点Windows系统上Wireshark安装时依赖Npcap或WinPcap驱动如果你之前卸载不干净或者驱动没装上也会出现No interfaces found的提示。重新安装Npcap并勾选WinPcap API兼容模式基本能解决问题。5.4 代理工具之间别混着开还有一个很多新手会踩的坑Charles、Fiddler、Proxyman同时开着或者开了一个又去开另一个。因为它们都需要占用系统代理端口混着开会互相抢占代理设置最后你根本不知道流量走的是哪一台工具的代理。排查网络问题时建议一次只开一款代理型工具确定不用了就正常退出。如果非要多个工具同时挂着方便切换至少要确保它们的代理端口号不同并且系统代理明确指向你要用的那一个。6. 组合使用的完整思路从App接口调试到底层排查最后说说组合使用。抓包工具不是非得二选一或三选一真正干活的时候往往是代理型工具和Wireshark配合各取所长。6.1 经典组合Charles或Fiddler/Proxyman Wireshark当App接口返回了奇怪的数据先用Charles看HTTP层到底发生了什么——是被rewrite了还是返回了500请求头带了什么响应体被截断了没有当接口整体表现正常、但是偶尔会卡顿或超时这时候再用Wireshark抓同一时段的包查看TCP重传、TLS握手耗时、DNS解析耗时定位到具体是网络的哪一跳出现了问题。举一个我之前实际遇到的例子某个App的接口在高峰期延迟从100ms涨到3秒Charles抓包显示响应体其实很快返回了但Wireshark发现这个请求的HTTP响应被拆成了30多个TCP包其中有大量重传原因是客户端服务器的TCP窗口协商出了问题。这种情况下单靠Charles根本定位不到根因必须靠Wireshark从传输层数据去判断。6.2 移动端弱网测试的组合打法用Charles/Fiddler/Proxyman的限速功能模拟弱网环境同时加上丢包模拟脚本。在弱网模拟期间打开Wireshark抓包观察TCP重传率、连接建立时的RTT、请求重试行为。这样一方面还原了真实的用户体验另一方面能用数据量化问题严重程度方便你提交给后端的都是证据而不是感觉。6.3 安全测试中的组合使用先用代理工具梳理清楚App或接口对外暴露的HTTP API面把每个接口的请求参数、响应结构记录下来。再用Wireshark深挖非HTTP的流量——比如某些App在后台会用自定义长连接、回传埋点数据、或者连接了非443端口。这时只有Wireshark能看到这些包。如果遇到App做了SSL Pinning无法直接解密HTTPS还需要结合Frida、objection等工具去绕过。这一步属于安全测试的进阶内容有兴趣的可以再去深入研究。在实际操作中我的桌面长期挂着Charles和Wireshark两个窗口TrfanEagle偶尔用来快速分享抓包记录Proxyman在Apple设备调试时顶上Fiddler则更多在Windows环境当外援用。每款工具都有自己的生态位没有谁能一统天下。抓包工具的选择只是技术栈里很小的一环但它直接决定了你排查网络问题的效率。把你的真实场景捋清楚再回来对照这篇文章相信你就能做出合适的选择了。
返回列表