资讯中心

抓包工具选型:从Charles到Wireshark,五款主流工具深度对比

📅 2026/11/14 1:27:14
抓包工具选型:从Charles到Wireshark,五款主流工具深度对比
做开发这些年抓包工具我前前后后用过不少Charles、Wireshark、Fiddler、Proxyman还有最近经常被问到的TraceEagle每一款都有自己的一批忠实用户。但每次在技术群里看到有人问“我该用哪个抓包工具”我就知道这个问题没那么简单——因为大多数人对这几款工具的定位差异其实是不清楚的以为它们只是“长得不一样”的同类软件。今天这篇就来把这些工具从原理、定位到实操、踩坑一次性聊透争取帮你省下自己一个个试错的时间。先说结论抓包工具不是越强大越好适合你当前场景的才是最好的。App开发和前后端联调首选Charles或ProxymanWindows环境下做HTTP调试和弱网测试Fiddler更顺手要分析底层协议、排查网络故障、看TCP握手重传这类问题Wireshark绕不开而TraceEagle这类偏链路追踪分析的工具在你需要从“全局链路”视角排查网络质量时能派上大用场。下面我把每个判断的来龙去脉都拆开讲。1. 五款抓包工具的定位与选型逻辑1.1 先分清三类抓包工具别拿同一把尺子量所有需求很多新手最大的误区是以为所有抓包工具干的是同一件事只是界面和厂商不同。实际上这几款工具底层的工作机制可以分为三类理解了这个你后面的所有选择都会清晰很多。第一类是代理调试型代表是Charles、Fiddler、Proxyman。它们的原理是在本机启动一个HTTP代理服务你把手机或电脑的流量指向这个代理端口它再帮你转发到服务器。因为流量从它手里过了一道所以它可以解密HTTPS、修改请求、重发请求、模拟弱网甚至可以mock接口返回。这类工具的核心思路是“中间人”适合日常接口调试、联调、测试场景。缺点是只能看到走代理的流量那些不走代理的程序你抓不到。第二类是网卡捕获型代表是Wireshark。它直接通过网卡驱动抓取经过网卡的原始数据包不依赖代理设置能看到TCP三次握手、DNS查询、ARP广播、ICMP、TLS握手的全部底层细节。它的核心思路是“被动旁听”适合网络协议学习、故障排查、安全分析和数据包级取证。缺点也很明显对应用层数据比如HTTP请求带的具体参数不如代理工具直观而且HTTPS流量只能看到加密包解不了密除非配合浏览器环境变量导出密钥。第三类是链路追踪分析型代表是TraceEagle。这类工具更偏网络链路的可视化和质量分析通常在抓包基础上叠加了路径探测、链路质量评估、节点延迟统计等能力适用于网络链路排查和性能分析场景。和Wireshark抓单台设备数据包不同它更关注“从源到目的地这一整条链路的状态”类似于把交通路况和某辆车的行驶记录结合在一起来看。1.2 五款工具核心定位一览我用一张表把五款工具的基本信息列出来后续每个工具再细说。工具平台工作方式核心场景上手难度CharlesWindows / macOS / Linux代理调试App抓包、HTTPS解密、mock、弱网模拟中等FiddlerWindows为主有Everywhere跨平台版代理调试HTTP调试、接口测试、弱网模拟中等ProxymanmacOS新版有Windows代理调试iOS/macOS生态、Simulator抓包较低WiresharkWindows / macOS / Linux网卡捕获协议分析、网络排障、教学实验较高TraceEagle以Windows/macOS工具为主链路追踪分析链路质量、节点延迟、诊断报告中等1.3 选型逻辑先回答三个问题再决定选工具的决策过程其实很简单。你在打开下载页面之前先问自己三个问题。第一我要抓的是谁的流量如果是手机App的接口请求你需要代理型工具如果是看某个端口上的原始数据包比如定位为什么连不上数据库你需要Wireshark。第二我需不需要解密HTTPS今天绝大多数接口都是HTTPS如果你只是用Wireshark去抓看到的全是加密后的乱码而代理型工具可以通过安装根证书的方式解密。第三我的主力操作系统是什么如果你主力机是macOS且主要在苹果生态里开发Proxyman或者Charles体验会好很多如果公司发的Windows电脑Fiddler最顺手。我自己实际工作里电脑上会同时装Charles和Wireshark。Charles负责日常开发联调Wireshark负责排查网络层面的疑难杂症。Proxyman是我在macOS上偶尔替代Charles的选择并不是说它比Charles强多少而是有些项目团队统一用它我也就跟着用用顺了发现它的界面确实更现代。2. 核心功能细节拆解解密、过滤、mock与弱网差异2.1 HTTPS解密原理为什么有的工具能看到明文有的看不到你用Charles或Fiddler抓App的包能看到HTTP请求的URL、参数和响应体但用Wireshark抓同样的流量只能看到一串TLS加密后的数据。这个差异不是工具能力高低而是机制决定的。代理型工具解密HTTPS用的是中间人证书方案。工具在你第一次启用SSL解密时会生成一个它自己的根证书然后要求你把系统信任这个证书。当手机或浏览器通过代理发起HTTPS请求时代理工具会伪造服务器证书因为你的设备信任了代理工具的根证书所以校验通过于是它就拿到了明文数据再和真实服务器建立另一条HTTPS连接把请求转发出去。这个过程对两端来说是透明的但你设备上多了一个根证书这也是这类工具在安全敏感环境里被限制使用的原因。以这三款代理工具为例开启HTTPS解密的路径分别是CharlesProxy → SSL Proxying Settings勾选Enable SSL Proxying然后在Locations里添加需要解密的host和端口最粗暴的写法是*和443意思是解密所有443端口的HTTPS流量。FiddlerTools → Options → HTTPS勾选Decrypt HTTPS traffic第一次勾选会提示安装根证书同意即可。ProxymanCertificate → Install Certificate on macOS装完系统证书后还要在钥匙串里手动信任之后在SSL Proxying List里添加目标域名。这里有一个非常关键的细节iOS和Android对用户证书的信任策略一直在收紧。如果你发现证书装了但HTTPS还是解不开先检查系统是否信任了你的证书。在iOS上安装证书之后需要去设置 → 通用 → 关于本机 → 证书信任设置里把开关打开很多人就是漏了这一步。在Android 7.0及以上App默认不信任用户安装的CA证书你需要让App的network_security_config允许用户证书或者用debug包测试否则即使你装了证书App的HTTPS流量照样解不开。2.2 Wireshark的过滤能力会写过滤器才算真会用Wireshark的劝退点在于启动之后满屏的数据包让人头晕但一旦你掌握了过滤器它的效率比任何代理工具都高。Wireshark有两种过滤器很多人混着用导致语法报错捕获过滤器是在抓包之前设置的只有匹配的包才会被记录下来语法用的是BPF显示过滤器是对已经抓下来的包做筛选语法是Wireshark自己的。显示过滤器是我日常用得最多的。几个高频表达式你可以直接抄ip.addr 192.168.1.100只看这个IP的进出流量tcp.port 8080只看某个端口http.request只看HTTP请求tls.handshake.type 1只看TLS ClientHello排查握手问题tcp.analysis.retransmission直接列出所有重传包这个在排查丢包时太有用了vlan.id 100如果网络里有VLAN划分用这个过滤具体VLAN的流量还有两个高频功能别忽略右键一条TCP连接记录选择Follow TCP Stream可以直接看到这条连接上的完整会话内容Statistics → Protocol Hierarchy一秒看出流量里各类协议占比快速定位异常流量。如果你在学《计算机网络自顶向下方法》配套的wireshark-traces实验文件比如tcp-wirehark-trace-1.pcap就是拿来练过滤器的最好素材照着教材步骤把TCP往返时间、序列号、吞吐量一个指标一个指标做一遍比看十篇教程都管用。2.3 TraceEagle这类工具到底适合什么场景关于TraceEagle市面上可参考的资料确实比较少我最初也是从一次网络故障排查中接触到它的。从名字和实际场景推测它更偏向网络链路的追踪分析核心价值在于帮你快速定位“到底是哪一段链路出现了丢包或高延迟”。举个例子。用户反馈说访问某服务特别慢你的第一反应是抓包看本机到服务器的TCP往返时间但Wireshark只能告诉你连接慢没法告诉你慢在哪个路由器或哪一跳。TraceEagle这类链路追踪工具的价值就在这里它能把一次请求经过的链路节点、每跳延迟、丢包率以可视化方式呈现出来噪点一目了然。如果你经常处理网络投诉、需要和运营商或云厂商扯皮、或者架设了跨地域的分布式服务这类工具可以作为Wireshark的重要补充。和Wireshark的关系不是替代而是从单点抓包升级到链路视角。3. 实操过程与核心环节实现3.1 Charles手机抓包完整流程装证书、设代理、解HTTPS一步步来Charles最常见的使用场景是手机App抓包很多新手卡在“电脑上能看到数据手机上怎么也抓不到”其实流程走对五个关键步骤就能解决。第一步电脑端启动Charles确认监听端口。默认是8888你可以在Proxy → Proxy Settings里查看。第二步电脑和手机连到同一个WiFi。这点经常被忽略不同网段是无论如何也代理不过去的。第三步手机WiFi设置里配置HTTP代理。在iOS或Android的WiFi详情里选择“手动代理”服务器填电脑的局域网IP端口填8888。填完之后用手机随便访问一个网页Charles上会弹出提示框问是否允许该设备连接点Allow。第四步安装根证书。iOS用户在手机上访问chls.pro/ssl下载证书然后去设置 → 已下载描述文件安装再到证书信任设置里把Charles证书开关打开。Android用户下载证书后在设置 → 安全 → 加密与凭据 → 安装证书选择CA证书。这一步做完HTTPS流量才能解开。第五步如果还是解不开某个域名的HTTPS去Proxy → SSL Proxying Settings确认host和端口已经添加。最省事的做法是先用*通配所有域名确认解开了再按实际需求精确配置。这套流程我走了无数遍最常翻车的两个点一是手机代理填了但Charles弹窗没点Allow流量到了但被拒了二是iOS证书信任开关没开界面看起来证书已安装但实际不生效。这两点排查好了手机抓包就没有大问题了。3.2 Fiddler弱网模拟与Charles限速对比弱网测试是移动端开发离不开的场景两款工具都支持但细节上有区别。Fiddler的默认弱网模拟在Rules → Performance → Simulate Modem Speeds打开后会发现网络变慢了不少但慢到什么程度、是不是你想要的场景它并不给你精细调节的入口。要精确控制得写FiddlerScript在OnBeforeRequest和OnBeforeResponse里对每毫秒传输字节数做限制。核心代码思路是这样的if (m_SimulateModem) { oSession[request-trickle-delay] 300; oSession[response-trickle-delay] 150; }request-trickle-delay是每上传1KB数据延迟的毫秒数response-trickle-delay是每下载1KB数据延迟的毫秒数。你可以根据想要模拟的网络来换算假设4G网络下行理论带宽约20Mbps那么大致每秒能传2500KB折合每KB约0.4毫秒。当然实际测试不用纠结理论值直接用300/150模拟2G150/50模拟弱3G都是行业中常用的经验值。Charles这边操作更直观Proxy → Throttle Settings勾选Enable Throttling然后直接选预设配置比如256 kbps、512 kbps还能自己填带宽、延迟、丢包率。它还支持只针对特定host做限速不影响其他流量。这一点在联调时特别有用比如我只想模拟图片接口的慢速其他接口保持正常就只把图片域名加进限速列表。我自己的弱网测试习惯是先用Charles的预设档快速测一轮比如256kbps、512kbps、1Mbps各跑一遍看基本表现发现跟用户体验问题相关的临界点后再打开丢包设置用1%~5%的随机丢包看看重试逻辑是否正常。Fiddler的优势在Windows下可以做到更精确的毫秒级控制适合有固定弱网标准的团队做回归测试。3.3 Wireshark实操过滤器、追踪流、导出对象一个案例看全Wireshark最经典的学习素材就是《计算机网络自顶向下方法》教材附带的traces文件。你下载了wireshark-traces-9e.zip之后里面有个tcp-wirehark-trace-1.pcap这就是Wireshark实验中分析TCP用的标准素材。打开这个文件后整个主界面会显示一个TCP连接的多轮数据。第一步先用显示过滤器锁定连接比如tcp.stream eq 0或者直接用右键任一TCP包选择Follow TCP Stream。这时候你能看到完整的Seq和Ack序列配合教材里的题目手动计算往返时间RTT、研究重传机制、绘制吞吐量随时间变化的曲线这比你自己开浏览器抓包标准得多因为它是固定场景可以反复练习得到相同结果。在实际工作和比赛场景里Wireshark还有两个功能经常用。第一个是File → Export Objects → HTTP它能把pcap里所有HTTP传输的文件列表导出来直接点Save就能还原成一个完整的文件。这个在分析恶意流量下载、或者找比赛里通过HTTP传的flag文件时非常好用。第二个是显示过滤器里的正则匹配比如比赛中经常要找“包含某个关键字的数据包”你可以直接过滤http contains flag秒秒钟定位到包含flag的HTTP包再追踪流就能看到完整内容。在这类流量分析比赛里常规套路其实很固定先看协议分类找到异常协议或非标准端口然后Follow TCP Stream看有没有明文口令或flag再导出HTTP对象看有没有隐藏文件最后用过滤器排查可疑IP。把这四步走完百分之八九十的题目都能解决。3.4 Proxyman在iOS/macOS生态的便捷操作如果你是macOS用户Proxyman值得认真体验它的界面是这几款工具里最现代、最顺手的。它最吸引人的一点是抓iOS模拟器的流量几乎是零配置——启动Proxyman后模拟器里的请求直接就能看到不需要手动去模拟器里设置代理因为它自动配置了模拟器的网络环境。Proxyman的操作逻辑和Charles非常像但有自己的一些小巧思。比如它左侧是域名列表直接按域名聚合了所有请求你点开就能看该域名下的所有接口这个维度对调试多域名App很直观。再比如它的断点调试Breakpoint可以在请求发出前和响应返回前拦截修改和Charles的断点功能一致但交互更轻。真机抓包流程和Charles差不多手机和电脑同一WiFi手机WiFi代理指向电脑IP和端口Proxyman默认端口是9090然后手机访问https://proxyman.io/rootcert安装证书装完记得在iOS证书信任设置里打开开关最后在Proxyman里配置SSL Proxying的域名。用惯了之后你会发现它在响应预览、WebSocket调试上的体验做得挺细致如果你主要在苹果生态工作学Proxyman的性价比非常高。4. 常见问题与排查技巧实录4.1 Charles抓不到代理手机的包5项排查清单这个问题我遇到太多次了每次帮人远程排查最后原因都跑不出这五个方向。整理成清单给你以后抓不到包就按顺序排查。排查项检查内容解决办法代理连通性手机和电脑是不是同一WiFi代理IP和端口填对没手机浏览器访问http://电脑IP:8888能打开就说明代理通了Charles授权弹窗手机会弹出连接确认没点Allow就看不到到Proxy → Access Control里确认允许的IP范围SSL Proxying配置域名和端口是否在解密列表里先加*:443临时验证确认后再收窄iOS证书信任证书装了但没在“证书信任设置”里打开设置 → 通用 → 关于本机 → 证书信任设置 → 打开开关Android 7限制系统不信任用户CA证书使用可调试App或在network_security_config里放行很多人在第4和第5条上反复折腾其实前三条基础配置没问题的话大概率就是系统证书信任层的问题。4.2 Fiddler卸载后上不了网根因与恢复方法Fiddler被吐槽最多的问题之一就是卸载后浏览器打不开网页。这个问题根因不复杂但能坑到不少新手Fiddler启动时会把系统代理设置成127.0.0.1:8888正常退出时再恢复。但如果进程被强杀、电脑直接关机、或者卸载程序没走正常流程系统代理就残留在了指向8888端口的状态。这时候Fiddler已经不监听8888了浏览器的所有HTTP请求发给一个不存在的代理自然打不开网页。恢复方法也很简单打开Windows的Internet选项 → 连接 → 局域网设置把“为LAN使用代理服务器”勾选取消然后确定。如果你发现自己的程序还走WinHTTP代理用管理员命令行执行以下命令清掉netsh winhttp reset proxy这个命令会把Windows系统的WinHTTP代理设置恢复为空治标治本。我的建议是如果你决定不再用Fiddler了卸载前先手动退出Fiddler再在系统代理设置里确认代理已经被取消最后再卸载。多花十秒钟能省掉后面一堆排查的麻烦。4.3 Wireshark三个常见坑抓不到包、乱码、看不到VLANWireshark的坑相对固定我挑三个高频问题说。第一个是抓不到包。首先确认网卡选对了Wireshark启动页会列出一堆接口有WLAN、以太网、蓝牙等你要选实际收发数据的那个。其次Windows上必须安装Npcap如果你的安装过程没装Npcap后续打开经常会提示找不到设备。最后如果只看到本机流量、看不到别的机器多半是交换机隔离了流量抓包点本身只能看到广播和自己收发的内容。第二个是HTTP响应体乱码。这个多半是gzip压缩导致的Follow TCP Stream看到的是一堆压缩字节。解决办法是在Wireshark首选项里开启解压或者直接在显示过滤器里用http.response定位之后右键选择导出对象把原始文件导出来再解压查看。第三个是VLAN流量看不到或过滤不了。默认情况下Wireshark会解析VLAN标签显示过滤器直接写vlan.id 100就可以了。如果你在网络上抓到了带VLAN标签的包但界面里看不到VLAN字段检查一下首选项里的VLAN支持是否被关闭了在Preferences → Protocols → Ethernet里确保“Skip fake ethernet header”的配置符合你的抓包链路环境。4.4 关于Charles注册码和汉化我不建议你这么干Charles下载量巨大“注册码”和“汉化版”也是搜索热词但作为一个长期做技术的人我在这件事上必须说几句实在话。Charles官方有30天全功能试用试用期过了你可以付费一个License不算贵对于正常工作来说完全承担得起。网上那些“注册码生成器”和“汉化补丁”我这里不推荐使用它们的安全风险远远大于你省下的那点成本——这类文件很容易捆绑木马或者试图替换你的证书体系而这种级别的影响你普通杀毒软件还不一定能发现。汉化版同理。Charles的界面本身就很简洁高频操作就那么几个菜单看看网上教程十分钟就能把界面认全。用英文原版能保证你在遇到问题时搜到的教程和你的界面是一致的汉化版反而可能出现菜单名和教程对不上的尴尬。我见过太多人为了“图中文”装了汉化包结果出问题时下官方英文版重新配置一遍白白浪费了时间。5. 多工具组合使用与实战心得5.1 一套顺手的组合拳日常调试用什么疑难杂症用什么很多人在工具选择上纠结其实完全没必要只用一个。我自己的习惯是根据问题的难度搭配使用工具效率最高。日常接口联调用CharlesmacOS上偶尔换成Proxyman主要负责看HTTP请求参数、响应结构、Cookie和Token的传递。接口报错了从Charles上复制cURL命令快速在终端复现。需要造数据验证前端展示时用Map Local把接口响应映射到本地JSON文件这就是mock的核心用法右键某条请求选择Map Local本地准备一个包含所需数据的响应文件Charles会自动替换线上真实响应。这样不依赖后端接口也可以独立调试页面。遇到网络层面的问题比如接口偶发超时、连接被重置、上传下载速度异常Charles就基本使不上力了。这时候切到Wireshark直接抓本机网卡。重点看TCP的握手时间如果SYN之后迟迟没有SYN-ACK说明本机到服务器的链路或中间防火墙有问题如果看到大量重传说明链路存在丢包需要检查WiFi信号、路由器和服务器带宽。链路跨地区访问的延迟、丢包定位交给TraceEagle这类链路分析工具图表化展示每一跳的质量。这组组合拳覆盖了从应用层到链路层的绝大部分问题。最怕的不是工具不齐全而是手里只有一把锤子看什么都像钉子——比如有人用Wireshark抓了半小时去分析一个本来用Charles五分钟就能定位的HTTP 401问题方向就完全反了。5.2 最后的经验抓包前先想清楚你要看什么说一个我自己踩过不少坑之后总结出来的习惯打开任何抓包工具前先在纸上或者脑子里写清楚两个问题——我要看的流量从哪来、要到哪去以及我看到什么结果就能定位问题。如果这两个问题想不清楚抓包很容易变成漫无目的地看数据浪费大量时间。比如排查“接口慢”你得先明确是“连接慢”还是“响应慢”前者看Wireshark的TCP握手时间后者看Charles的Timing标签页里服务器响应耗时。方向不同选用的工具和看的数据就完全不同。抓包工具这一行入门容易精通难。每一款工具的学习曲线都不算陡峭但真正值钱的是你在抓包过程中积累的对HTTP、TCP、TLS这些协议机制的理解。工具只是把你带到协议世界门口的向导门后面的东西需要你一遍一遍地在真实流量里去看、去验证、去琢磨。希望这篇对比能让你少走一些弯路选到顺手的工具然后真正把它们用起来。

看完文章,想为自己的企业也做一次专业网站诊断?

尧图顾问免费为您评估现有网站,并给出建站/改版建议与报价方案。

免费获取方案