ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

五大抓包工具对比:Charles、Fiddler、Wireshark、Proxyman、TraceEagle

2026/9/14 21:11:07 拓冰建站 浏览量
五大抓包工具对比:Charles、Fiddler、Wireshark、Proxyman、TraceEagle 干开发这些年抓包工具我前前后后换了不少轮。一开始沉迷Wireshark看底层报文后来做接口调试离不开CharlesWindows环境又得切Fiddler公司配了Mac之后被Proxyman的交互圈了粉最近团队里又有同事在推TraceEagle。说实话每次看到群里新人问“抓包到底该用哪个工具”我都觉得很难一两句话说清——不是工具不够好而是每个工具的定位差异太大了。这篇文章就当是一个老开发者的选型笔记把Charles、TraceEagle、Wireshark、Fiddler和Proxyman这五个工具放一起从原理、实操到高频坑位一次性讲透。1. 五个工具的“人设”表面都是抓包底子里各玩各的先泼一盆冷水很多人以为“抓包工具”是一种东西其实它们分两大流派。Charles、Fiddler、Proxyman本质上是HTTP/HTTPS中间人代理工作在应用层专注于帮你改请求、看响应、做MockWireshark则是网卡级的数据包分析器什么协议都能看但不关心业务语义而TraceEagle这类偏性能追踪的工具又是另一个思路。搞清楚定位才能不选错。1.1 Charles跨平台中间人代理的天花板Charles是Java写的所以Windows、macOS、Linux都能跑这是它最大的优势之一。它的核心身份是“HTTP代理服务器”你只要把客户端浏览器、手机App的代理指向Charles它就能把HTTPS流量解密后展示成一条一条清晰的请求记录。默认监听端口是8888。Charles在业务调试场景有三个杀手级能力断点Breakpoints、Map Local/Remote和Rewrite。断点可以拦截某个请求或响应手动修改数据再放行Map Local可以把线上接口映射到本地文件做Mock数据基本不写代码Rewrite则能批量改请求头、状态码。这些功能的设计逻辑很统一让开发者在不动服务端的情况下把前端请求“玩出花来”。它的缺点也明显商业软件收费虽然提供30天试用。另外Java的界面风格偏老气初次打开一堆按钮会有点劝退新人。1.2 FiddlerWindows老玩家的免费午餐Fiddler如果你是Windows出身逃不开这个名字。经典版Fiddler Classic至今免费基于.NET Framework开发默认同样监听8888端口手机抓包时配置方式和Charles几乎一样。Fiddler最独特的是FiddlerScript它用脚本语言去控制请求和响应适合做自动化改造。比如你想让某个接口在特定条件下返回特定数据写一段脚本就能实现。它还内置了AutoResponder相当于Charles的Map Local适合做Mock和离线调试。弱网测试也有现成功能下文会细说。不过Fiddler Classic的底层是.NET导致它跨平台能力差官方后来推出了基于Electron的Fiddler Everywhere支持Mac和Linux但免费版有功能限制。我个人的评价是Windows单机开发环境下Fiddler依然非常能打但如果你团队是Mac为主协作起来就很别扭。1.3 Wireshark什么都能看的数据包透视镜Wireshark是完全另一个维度的工具。它依赖NpcapWindows/libpcapLinux和macOS抓取网卡上的原始数据帧所以你能看到MAC地址、IP头、TCP标志位、TLS握手细节、DNS查询记录等底层信息。它不区分你是HTTP还是MySQL还是私有协议全都给你摆出来。很多人在Wireshark里搜“HTTP”搜不到东西以为是软件坏了其实是因为默认抓包环境里HTTPS流量占据了大多数而Wireshark看到的只是加密后的TLS数据段必须配合SSLKEYLOGFILE才能解密看到HTTP明文。这个问题我在后面专门讲。Wireshark的价值更多在排障TCP重传率高、DNS解析超时、TLS握手失败这类问题只有它能精准定位。适合网络工程师、后端开发、运维和安全分析人员。1.4 ProxymanmacOS/iOS生态里的现代派Proxyman是近几年在Mac开发者圈子里口碑很猛的工具。原生Swift编写界面干净、操作顺滑和Charles定位相近但在macOS体验上更贴合系统。它内置了iOS模拟器抓包支持打开就能直接抓模拟器流量不需要手动配置代理这点比Charles舒服太多。它还支持WebSocket调试这对做实时通讯类功能的开发特别友好Network Flow树形展示比Charles平铺列表更直观Traffic Viewer可以快速定位某个请求的来源页面。和Charles一样它也支持Map Local、Rewrite、断点等能力。Proxyman的短板是平台绑定太死Mac是刚需Windows和Linux用户用不了对跨平台团队不太友好。1.5 TraceEagle面向性能追踪的流量分析新面孔TraceEagle是这五个里最不常被提起的一个以至于很多人第一次听到会以为是某个内部工具。它更像是一个面向请求级性能追踪的抓包诊断工具关注点不在“流量内容”而在“请求生命周期”一次完整的API调用从前端发出到服务端返回每一步耗时多少、在哪一层出现延迟、有没有重试它都能拆开给你看。这种定位和Wireshark的底层网包分析、Charles的业务级展示又不同它更偏性能工程。比如你做接口压测后发现P99响应时间偏高用Charles只能看到单次请求的耗时而TraceEagle可以把整条调用链路的耗时分布拉出来帮定位瓶颈是在网络层、网关还是业务代码。因为它相对小众公开资料不多我用它的时候习惯先查官方文档确认平台支持和协议兼容性再决定是否引入团队。就趋势来说这类工具确实值得关注。1.6 一句话定位汇总工具核心定位平台价格典型用户Charles跨平台HTTP/HTTPS中间人调试Windows/macOS/Linux收费、30天试用前端、客户端、测试FiddlerWindows生态HTTP调试与脚本化改写Windows为主Classic免费Windows开发/测试Wireshark网卡级全协议报文分析Windows/macOS/Linux免费开源网络工程师、后端、安全ProxymanmacOS/iOS原生体验的HTTP调试macOS收费、试用Mac端开发、iOS开发TraceEagle请求级性能追踪与诊断需查官方文档视版本而定性能优化、后端开发2. 抓包原理与选型逻辑别只看界面先看你想解决什么问题选工具前至少得知道这些工具为什么能“看见”流量。我曾经带过一个测试新人让他用Wireshark抓App的HTTPS请求他抓了半天只有TLS握手跑来问我“是不是手机装了两个证书”其实是他根本没弄明白中间人和旁路监听的区别。2.1 HTTP工具的核心中间人代理与证书信任链Charles、Fiddler、Proxyman的工作方式本质是中间人代理。你把客户端的代理地址指向工具监听的端口后客户端发给服务器的请求先到工具工具再转发给服务器服务器返回的数据先到工具工具再转发给客户端。这个过程中工具可以任意查看、修改明文数据前提是它能解开HTTPS加密。HTTPS解密依赖证书信任机制。工具会生成一对自己的根证书客户端如果信任了这个根证书就会信任工具签发的任何域名证书。具体流程是工具先用自己根证书复制一份目标域名的签名证书与客户端完成TLS握手客户端看到证书机构是工具的根证书所以校验通过工具再作为客户端与真实服务器建立另一条TLS连接。于是工具两侧各有一条加密隧道它站在中间能看到两边的明文。提示这就是为什么手机会提醒你下载并安装配置文件iOS还要去“设置-通用-关于本机-证书信任设置”里手动信任。不信任根证书HTTPS流量解密必然失败。2.2 Wireshark的旁路模式网卡混杂模式Wireshark不走中间人路线。它通过NpcapWindows或libpcapUnix驱动把网卡设置为混杂模式直接读取经过网卡的每一帧数据。这意味着它不会改变流量路径只是“看了看”所以对网络的影响极小。代价是它看到的是“被加密后的数据包”。要对HTTPS做应用层分析必须配合环境变量SSLKEYLOGFILE把TLS握手时的密钥写入日志再导入Wireshark解密。而且Wireshark不擅长改包、Mock、断点这类业务操作它的强项是“看清链路发生了什么”。2.3 选型逻辑用一张决策表少走弯路我建议你不要纠结哪个工具“最强”而是明确当前阶段最频繁的动作是什么。如果是联调接口、Mock数据、调试前端逻辑首选Charles或Proxyman如果Windows下快速干活、习惯脚本自动化Fiddler很顺手如果想查TCP重传、确认丢包位置、分析DNS/TLS握手Wireshark几乎没有替代品如果做服务性能优化重点关注请求耗时的拆分和追踪TraceEagle这类工具值得试点。你的痛点推荐工具理由前端联调看接口出入参Charles / Proxyman界面友好过滤方便支持断点改包Windows上快速Mock数据FiddlerAutoResponder配置简单免费手机App抓HTTPSCharles / Proxyman文档成熟、证书安装案例多网络慢、丢包、重传Wireshark能看到TCP/IP层全部细节接口性能瓶颈定位TraceEagle侧重耗时追踪和链路分析全平台团队统一工具Charles跨平台最均衡3. 手机抓包实操iPhone和Android的证书陷阱手机抓包是高频需求也是新手最容易卡住的地方。我见过有人接了一下午连不上代理最后发现是电脑防火墙把8888端口拦截了也有人证书装了三遍还是“SSLHandshake failed”因为iOS里忘记点“信任证书”。这一节我把完整流程和坑位讲透。3.1 iPhone抓HTTPS三步配置与信任逻辑以Proxyman为例Charles操作几乎一致。第一步保证电脑和手机在同一个局域网。第二步在Proxyman设置里开启“iOS设备代理”手机会提示你配置HTTP代理填电脑局域网IP和端口默认8888。第三步打开手机Safari访问http://charles.pro/ssl或工具给出的证书下载地址安装描述文件。关键点在这里iOS 10.3以后只安装证书还不够必须去“设置-通用-关于本机-证书信任设置”把对应的根证书开关打开。很多人漏了这一步导致抓包时看到一堆TLS错误。另外iOS 13以后证书下载不再直接弹安装窗口需要在Safari里下载后用“设置”里的“已下载描述文件”手动安装路径绕了一点。如果手机能连上代理但流量抓不到优先检查三点代理IP是否写成了127.0.0.1必须写电脑局域网IP、代理端口是否被占用、电脑防火墙是否放行该端口。3.2 Android抓HTTPS绕过用户证书限制Android的坑更深。Android 7.0API 24开始App默认不再信任用户级别的CA证书。你往手机里装的抓包工具证书属于用户证书很多App直接不认表现为“抓不到包”或SSL握手失败。解决办法有几种如果App的targetSdkVersion低于24默认还是信任用户证书不用额外处理如果是自己开发的App可以在networkSecurityConfig里配置信任用户证书这是最推荐的做法如果是测试别人家的App那就得把证书推到系统证书目录手机必须root然后把证书改为hash命名放进/system/etc/security/cacerts/。如果App启用了SSL Pinning证书绑定常规手段就全失效了这根场景会绕得很远实际工作里一般需要和开发沟通给测试包配置调试信任。注意我不建议为了抓第三方App而做系统证书植入之外的操作尤其是绕过证书校验的手段合规边界很容易触碰。正常开发测试请走“自己的包自己改配置”这条路。3.3 浏览器和本机App的抓法区别抓本机浏览器的流量最简单Charles或Proxyman启动时会自动配置系统代理浏览器走系统代理就被捕获。Fiddler在Windows上会自动注册WinINET代理IE、Chrome默认能抓到。但要注意浏览器如果装了专注隐私的扩展或者自己设置了直连代理可能会绕过工具。抓本机App的流量比较麻烦因为桌面App不一定走系统代理它们可能用Socket直连也可能自己实现了HTTP栈。这种场景下要么用Proxyman的“自动配置系统代理”结合后端代理模式要么直接用Wireshark配合SSLKEYLOGFILE。这些年我踩过不少坑最后发现很多看上去工具不行的场景其实是“工具用错了流派”。4. Wireshark的核心玩法过滤器、TLS解密、Pcap实验Wireshark虽然不擅长业务改包但它在定位网络问题上几乎没有对手。很多人装了却不知道怎么用一打开看到密密麻麻的数据包就发怵。4.1 三分钟入门抓包三步走第一步选择正确的网卡。Wi-Fi上网选“Wi-Fi”或“en0”有线选以太网抓环回就选Loopback。选错网卡是新手第一大坑。第二步点击蓝色鲨鱼鳍开始抓包想要停止就点红色方块。第三步在显示过滤器栏输入表达式。比如只看某个IP输入ip.addr 192.168.1.100只看DNS请求输入dns只看HTTP明文请求输入http.request。Wireshark的表达式语法不难但要每天用才能记住。我的习惯是先把常用十几条存成收藏减少记忆压力。保存后以后点一下就能切换效率高不少。此外抓包时长别太长文件会迅速膨胀建议在确定问题方向后再针对性抓几秒或几十秒。4.2 为什么只能看到“520字节”却看不到完整数据这个问题在热搜里出现过我来说破Wireshark的数据包列表区默认只显示“帧摘要”不是数据不完整而是你还没点开。点击某个数据包后中间面板会显示三层结构Frame物理帧头、Ethernet/IP/TCP层、应用层数据。最下方还有一个十六进制窗口能看到完整字节内容。如果你误以为“只显示了520字节应该显示2090字节”多半是因为没有展开“Data”区域。另外抓包长度也可能被限制抓包选项里“Limit each packet to X bytes”如果被改小了每个包只保留前面若干字节这才会导致内容不完整。默认值一般设成“default”即不限制。排查时可以打开抓包选项确认必要时抓完整包再分析。4.3 TLS解密用SSLKEYLOGFILE还原HTTPS明文想要在Wireshark里像Charles那样直接看HTTPS的明文请求和响应光抓包不够要把TLS会话密钥告诉Wireshark。主流做法是设置环境变量SSLKEYLOGFILE并指向一个日志文件然后重启浏览器。浏览器会把每个TLS会话的pre-master secret写进这个文件。Wireshark里进入“首选项-Protocols-TLS”在“(Pre)-Master-Secret log filename”里填同一个文件路径保存后重新抓包或重新打开pcapHTTPS内容就变成明文了。注意一点TLS 1.3对密钥日志机制也支持但要求应用使用兼容的扩展。Chrome、Firefox目前都能正常导出。另外这个日志文件很敏感等同于私钥泄露用完之后及时删除不要提交到代码仓库。4.4 用教材Pcap练手wireshark-traces-9e有朋友问到“wireshark-traces-9e.zip”和“tcp-wirehark-trace-1.pcap”这是《计算机网络自顶向下方法》第9版配套实验里的抓包文件。它特别适合拿来练手因为pcap文件不会因为你网络环境不稳而改动随时打开随时分析。拿到这个文件后你可以先添加一个筛选器tcp观察TCP三次握手的SYN、SYN-ACK、ACK三个包再统计一下流的往返时间。然后结合过滤器http看看传统的HTTP明文请求长什么样。最后可以尝试导出HTTP对象观察图片、文本等资源的传输顺序。这套流程走下来你对Wireshark的熟练度会明显提升。5. 进阶玩法弱网模拟、Mock数据和自动化协作抓包工具不只是“看包”它们在测试和联调中还能扮演“控制者”的角色。下面三个高频场景值得花时间掌握。5.1 弱网测试Charles限速与Fiddler模拟调制解调器很多端上问题只在弱网环境暴露比如超时重试、图片加载失败、弱网下轮询异常。手动断网不靠谱因为你需要的是“可控的弱网”而不是“忽断忽连”。Charles的做法是菜单Proxy-Throttle Setting勾选“Enable Throttling”预设里选择“56 kbps Modem”或“3G”等档位。你可以自定义带宽kbps和往返延迟ms还能设置丢包率。打开“Throttle”开关后在Charles代理下的所有请求都会受影响。如果你只想给指定域名限速可以在Throttle配置里指定Host列表。Fiddler的做法是Rules-Performance-Simulate Modem Speeds勾选后立即模拟慢速网络适合快速验证。更精细的做法是修改FiddlerScript里的OnBeforeRequest通过oSession[request-trickle-delay]设置请求延迟。我个人更习惯用Charles因为它能直观控制丢包率Fiddler的Modem模拟偏向全局限速控制粒度没那么细。5.2 Mock数据Map Local和AutoResponder的配置技巧联调阶段后端接口没就绪是常态Mock是利器。Charles基础版的操作是把要Mock的请求右键选Save Response保存为文件然后用Tools-Map Local把该URL映射到本地文件。后端返回什么内容完全由本地文件决定。技巧在于Map Local的匹配规则支持通配符你可以把http://api.example.com/*映射到本地目录这样一批接口都能快速Mock。Fiddler里对应的是AutoResponder。把请求拖进面板勾选“Enable rules”右侧规则可以设成“Find a file...”并选择本地响应文件。你还可以在规则列表里创建一个正则匹配把所有/api/v1/开头的请求都指向同一个mock数据文件。这套玩法是我当年在Windows上做前端联调时最常用的效率极高。Proxyman的Map Local能力类似逻辑同样是把线上URL映射到本地文件夹界面使用起来更直观。做Mock的通用原则是mock数据要尽量接近真实接口结构否则联调时容易漏掉字段兼容性。5.3 自动化采集命令行抓包与团队协作如果要在服务器上抓包或采集大量样本图形化工具就显笨重了。这时候tcpdump更合适比如抓所有80和443端口流量并保存成pcapsudo tcpdump -i eth0 -w /tmp/capture.pcap port 80 or port 443抓完以后把pcap文件拿到本地用Wireshark做深度分析这是服务器侧排障的标准姿势。配合-c参数可以限制抓包数量避免文件过大sudo tcpdump -i eth0 -c 1000 -w /tmp/sample.pcap团队协作方面我建议把“代理地址、端口、证书安装规范”写成一份内部文档新人入职第一天就发给他。否则每个新同事都会重新踩一遍“证书没信任”“代理IP填错”“防火墙拦截端口”这三座大山。工具选型最好也统一Windows老用户用FiddlerMac主力用Proxyman或Charles底层链路问题必须统一用Wireshark定位。6. 高频问题速查这些坑我全替你踩过最后把几个热搜里提及的经典问题集中整理成速查表每个问题我都按“原因-处理”两部分写希望你能少走弯路。问题现象常见原因解决办法Charles抓不到代理手机的包手机未信任根证书代理IP/端口填写错误重新安装证书并在iOS证书信任设置中开启信任保证代理IP为电脑局域网IPFiddler卸载后上不了网Fiddler退出或卸载时系统代理未恢复检查WinINET系统代理设置如果仍指向127.0.0.1:8888手动取消勾选“使用代理服务器”必要时重启网络适配器Wireshark看不到完整数据未展开包详情抓包长度被限制点数据包后展开中间面板检查抓包选项中“Limit each packet to X bytes”iPhone安装Proxyman证书失败未使用Safari下载未进入“已下载描述文件”安装用Safari访问证书地址下载后去“设置-已下载描述文件”安装再到证书信任设置开启TraceEagle打开后没有流量未开启系统代理或未配置采集目标查看官方文档确认当前版本支持的抓包模式确认是否需要在启动前选择目标网卡Android App抓不到HTTPS包Android 7.0后不信任用户CA证书开发包内配置networkSecurityConfig信任用户证书测试用手机需root并安装证书到系统目录所有登录接口都显示SSL握手失败根证书未全局信任iOS检查“证书信任设置”Android检查用户证书是否启用Chrome不工作时检查系统是否用了独立证书库Wireshark抓HTTPS全是密文没有配置SSLKEYLOGFILE设置环境变量并重启浏览器在Wireshark TLS协议配置里填入日志文件路径还有一个容易被忽略的问题同一台电脑上Charles和Proxyman都开着的场景。因为两者默认都想用8888代理端口后启动的工具会侦听失败。这时的现象不是“抓不到包”而是另一个工具直接报端口占用。处理方法是把其中一个改成其他端口比如8088。端口冲突还容易发生在本地开发服务上比如你在8080端口起Webpack又把Fiddler代理端口改成了8080一样会撞车。我个人在实际操作中的体会是抓包工具的选型没有标准答案但团队最好形成一套“按问题类型选工具的共识”。如果只做Web和正经业务联调Charles和Proxyman足够到了要定位丢包、重传、DNS解析缓慢这些底层问题时Wireshark永远是最靠谱的兜底性能分析方面TraceEagle这种追踪流量生命周期的思路值得尝试。另外再分享一个小技巧日常抓包时先用Wireshark判断问题所属层级再切到Charles或Proxyman看业务细节两个流派搭档用效率是真的高。