聊到抓包工具对比我电脑上常年开着WiresharkCharles和Proxyman都装过Fiddler在Windows上用来测接口最近团队里还有人推荐TraceEagle这种新面孔。很多人第一次接触觉得这几款工具“都差不多反正就是看请求和响应”实际上等你真正上手就会发现每款工具的定位、工作模式、适合排查的问题类型完全不一样选错了工具一个简单问题能折腾你半天。这篇文章我会从原理到实操把这五款抓包工具放在一起拆开讲清楚包括它们各自解决什么问题、什么时候该用哪款以及那些文档里不会写的坑。先说一个必须明确的前提抓包工具不是“看流量”这么简单它本质上是通过不同方式介入客户端和服务器之间的通信。理解了这个底层机制你才能理解为什么Charles抓不到某些App的包、为什么Wireshark能看底层TCP却解不开HTTPS、为什么Fiddler卸载后电脑会上不了网。这些东西不搞清楚工具换再多也白搭。1. 抓包之前先把核心原理搞明白1.1 抓包工具的两种工作模式市面上的抓包工具工作模式大致分两类中间人代理模式和网卡捕获模式。这个差异决定了它们能做什么、不能做什么。Charles、Fiddler、Proxyman属于代理模式。它们会在你的电脑上开一个HTTP代理服务客户端手机或浏览器把流量主动交到这个代理上工具收到请求后先记录一份再转发给真正的服务器。服务器响应回来时工具也先记录再返回给客户端。整个过程有点像快递中转站所有包裹都从你手里过一遍你当然就能看清楚包裹里装了什么。Wireshark则完全不同它属于网卡捕获模式基于libpcap/Npcap这类底层抓包驱动直接把网卡上经过的数据帧都截下来。它不需要客户端主动配合只要流量经过这块网卡就能记录。但代价是它看到的是“原始报文”对新手来说信息量很大、很杂。从定位上看抓包工具分两类就够了。一类是给应用开发者用的业务请求、接口参数、返回值、Header这类用Charles/Fiddler/Proxyman操作方便、界面友好。另一类是给网络工程师和底层排查者用的TCP握手、重传、丢包、DNS查询、TLS握手细节这类选Wireshark它能看到更底层的世界。1.2 HTTPS解密为什么装了证书才能看到明文现在绝大多数流量都是HTTPSTLS加密后的内容在工具里默认是一堆乱码。要让抓包工具看到明文核心机制是中间人解密。以代理模式为例客户端把HTTPS请求发给工具然后工具自己扮演“目标服务器”和客户端建立TLS连接。工具再和真正的服务器建立另一条TLS连接。这个过程中工具需要给客户端一个它能验证通过的证书而这个证书必须由某个被信任的根证书签发。所以你必须先下载并信任工具的根证书只有这样客户端才会接受“目标服务器”的证书工具也才能解密出明文请求。这里有两个非常经典的坑。第一只安装了根证书但没开启SSL ProxyingHTTPS解密开关那工具看到的还是一个CONNECT请求看不到具体URL和内容。第二很多App做了证书固定Certificate Pinning代码里只信任特定证书即使你把根证书装到系统信任区这些App依然会拒绝连接表现为请求失败或直接超时。这两种情况我后面会详细展开。1.3 别急着装工具先想清楚你在排查哪一层的问题我见过很多同事接口联调出了问题第一反应是打开Wireshark抓了几百MB的包最后啥也没看出来因为他在应用层排查问题却用上了网络层的工具。反过来有人网络慢、延迟高却用Charles反复看接口耗时忘了Charles只能看到应用层时间真正的网络耗时和重传它根本显示不出来。选择工具之前先定位问题层次接口参数对不对、返回数据结构、Header头是否正常这是应用层问题选Charles、Fiddler或Proxyman。页面打不开、接口超时、连续重试怀疑TCP握手有问题或者TLS协商失败选Wireshark看底层握手过程。抓包后要分享给团队其他人或者要回放流量做回归测试那传统单机工具不够用得看TraceEagle这类平台化工具。抓包工具不是万能的想清楚“我要看哪一层”比下载哪款工具重要得多。2. Charles移动端调试的日常主力2.1 三步完成手机抓包步骤一个都不能少Charles是跨平台工具Windows、macOS、Linux都有。我用它最多的场景是抓手机App的包。很多人装上Charles后第一反应是“为什么什么请求都看不到”大多数情况是手机代理没配或者证书没装。完整的配置链路应该是这样的。第一步装电脑端证书。打开Charles菜单栏Help选择SSL Proxying再选择Install Charles Root Certificate把根证书安装到系统受信任的根证书颁发机构里。第二步手机配代理。手机和电脑连同一个WiFi手机WiFi设置里选择手动代理服务器地址填电脑的局域网IP端口填8888。要注意手机设置的代理IP一定是电脑实际连WiFi的IP可以通过Charles的Help菜单里的Local IP Address查看。填错IP是最常见的低级错误。第三步装手机证书并开启SSL Proxying。手机浏览器访问chls.pro/ssl下载并安装Charles根证书。如果是iPhone还要到设置-通用-关于本机-证书信任设置里把Charles根证书的“完全信任”打开这一步很多人漏掉结果就是装完证书还是抓不到HTTPS内容。装好证书后回到CharlesProxy菜单下打开SSL Proxying Settings勾选Enable SSL Proxying最好添加一条“:”的规则覆盖所有域名和端口否则默认只解密部分域名。我用一个小经验判断手机代理是否生效配置好代理后在手机浏览器打开http://www.gstatic.com/generate_204如果能正常返回204或者页面能打开说明代理链路基本通如果直接提示无法访问那多半是代理配置有问题。2.2 Mock数据与弱网模拟Charles最顺手的地方Charles在移动端调试里之所以受欢迎不光是能抓包还因为它有一整套请求修改和模拟工具。Map Local是高频功能。开发时后端接口还没写好或者线上数据不符合预期你可以把某个URL映射到本地一个JSON文件。右键选中一个请求选择Map Local在弹出的窗口里把请求路径指向本地文件这样App请求这个URL时Charles直接返回本地文件内容后端不用管也能联调。实际操作中我建议把映射规则命名清楚统一放到一个目录不然时间长了根本分不清哪条规则对应哪个接口。Map Remote适合做环境切换。比如把线上域名映射到测试环境域名不用改代码就能切环境。Rewrite功能适合批量改Header、URL参数、Host比如给所有请求统一加上一个调试Header或者把请求里的某个字段批量替换。Throttle功能就是弱网模拟Proxy菜单下打开Throttle Settings可以设置下行带宽、上行带宽、延迟、丢包率。模拟弱网时我一般先把延迟设成200ms试一下再逐步加大不要一下把带宽拉到极低容易数组超时误判。还有Breakpoints功能和Repeat功能。Breakpoints可以在请求发出前或响应返回前中断手动修改报文后再继续流程适合测试接口容错性。Repeat就是重放一个请求适合验证修改后接口是否恢复正常。2.3 Charles的常见坑我踩过的给你列一遍Charles用得越久你越会发现它的脾气。我整理几个高频问题吧。第一个高频问题就是“Charles抓不到代理手机的包”。我之前排查过无数遍原因基本出在三个环节一是手机代理根本没生效访问外网都打不开二是证书虽然装了但没信任iOS上尤其常见安卓7.0以上版本对用户证书默认不信任普通App还好部分对安全性要求高的App根本不认用户证书三是SSL Proxying没开启导致只看到一个CONNECT请求没有具体URL。逐个排查基本都能解决。第二个是浏览器或App提示“you may need to configure your browser or application to trust the Charles root certificate”。这个提示出现时不用慌说明代理链路是通的只是当前连接的目标域名的证书没有被客户端信任。解决办法很简单重新安装Charles根证书然后在系统证书管理里把它设置为“始终信任”。在macOS上打开钥匙串访问找到Charles根证书双击选择“信任-使用此证书时-始终信任”然后重启浏览器再试。第三个坑是Charles挂久了电脑突然间歇性断网。这通常是Charles设置的系统代理没有完全关闭导致的特别在非正常退出时容易出现。解决方法是手动把系统代理关掉或者重启Charles再退出。macOS上可以到系统设置-网络-详细信息-代理里检查Windows上到Internet选项-连接-局域网设置里检查。平时不抓包时养成把Charles的代理开关关掉的习惯能省很多事。3. Wireshark底层网络细节的显微镜3.1 安装与抓包入口新手最容易卡在选网卡Wireshark在Windows上安装时要选配套的Npcap驱动这一步必不可少没有Npcap你连网卡都选不了。安装Npcap时我建议勾选“Install in WinPcap API-compatible Mode”兼容WinPcap接口这样老工具也能用它。macOS和Linux安装相对简单官方安装包或者包管理器一条命令就行。第一次打开Wireshark界面会列出所有可用的网络接口。选网卡这件事很多人容易懵。笔记本连WiFi就选无线网卡名称通常包含Wi-Fi或Wireless插网线就选以太网卡Ethernet想抓本机回环流量就选LoopbackWindows上需要Npcap支持macOS有lo0。举个最简单的例子笔记本开着WiFi访问目标网站你选了以太网卡去抓包结果啥也抓不到因为流量根本不走那块网卡。选好网卡后双击或者点左上角蓝色鲨鱼鳍图标就开始抓包。抓包前可以在捕获选项里设置一个混杂模式Promiscuous Mode一般默认开启这样能捕获同一网段内其他设备的流量。不过要提醒一句无线网络下混杂模式受网卡驱动和交换机隔离限制不一定能抓到其他设备的包不要抱太大期望。3.2 两种过滤器不要混用抓包过滤器 vs 显示过滤器Wireshark里有两套过滤器系统很多人经常搞混导致“我明明写了过滤条件为什么还是抓到一堆包”或者“过滤条件是对的但结果为空”。抓包过滤器Capture Filter在开始抓包之前设置作用是“只抓满足条件的包”。它的语法是传统BPF语法比如tcp port 443表示只抓443端口的TCP包host 192.168.1.1表示只抓和这个IP通信的包。好处是节省存储和抓包文件大小如果明确要分析某个IP的流量抓包前就把它写上。显示过滤器Display Filter在抓包完成后设置作用是“从已经抓到的包里筛选出想要的包”。它的语法是Wireshark特有的字段语法比如tcp.port 443、ip.src 192.168.1.1、http、dns。显示过滤器不影响抓包结果只是隐藏不符合条件的包随时可以改。实用建议抓包前用抓包过滤器限制范围能大幅减少干扰流量抓包后用显示过滤器精确定位。如果你只想看某个域名解析行为显示过滤器写dns.qry.name contains example.com比傻看一堆DNS包高效得多。3.3 为什么Wireshark只显示520字节我想看2090字节的完整数据这个问题很多人问过网上一搜“wireshark 为何只能显示520字节数据怎么显示2090个字节数据”也能看到类似的讨论。出现这个疑问通常是混淆了“一个网络包的字节数”和“一次应用层数据的字节数”。以太网的MTU最大传输单元一般是1500字节减去IP头最少20字节和TCP头最少20字节一个TCP包最多能携带的负载MSS通常是1460字节。如果你的App一次要往服务端发送2090字节的请求体TCP层会把它拆成两个段第一个段1460字节第二个段630字节而不是把它塞进一个“2090字节的大包”里。如果接收窗口变小或者网络路径上协商出的MSS更小分段会更多每个包的长度就会更小。看到单个包只有520字节可能是当前流里恰好选中了一个比较小的数据段也可能是连接协商的MSS偏小。想看到一次应用层请求的全部数据正确的操作是在任意一个相关包上右键选择“Follow”再选“TCP Stream”或HTTP StreamWireshark会把这条TCP连接上的所有负载重组在一起以完整形式展示出来。这时候你就能看到完整的HTTP请求行、Header、Body而不是盯着一个孤零零的520字节。顺带提一个小知识点如果抓包文件里出现超过1500字节的包往往是网卡的TSO/GRO硬件卸载特性导致的它把多个数据段合并成一个“大帧”交给驱动Wireshark抓到的是合并后的包。这不是Wireshark的问题是你的网卡驱动的优化行为。3.4 Wireshark的TLS解密和VLAN标签进阶排查必备Wireshark默认看到HTTPS也是加密的。要解密最通用的方法是利用浏览器或App导出的TLS密钥日志。具体做法是设置环境变量SSLKEYLOGFILE指向一个本地文件路径比如D:\sslkey.log然后重启浏览器。浏览器会把每个TLS会话的密钥写入这个文件。然后在Wireshark里打开“Preferences”找到“Protocols”下的“TLS”在“(Pre)-Master-Secret log filename”里填入同一个文件路径。配置好后重新抓包HTTPS流量就能看到解密后的HTTP/2明文内容了。这个方案对Chrome和Firefox都好使是分析前端请求、HAR流量的利器。VLAN标签属于802.1Q协议。如果你的交换机是Trunk口抓到的包会带有VLAN ID字段。在Wireshark里直接用显示过滤器vlan.id 100就能过滤某个VLAN的流量。有时候包里有多个VLAN标签QinQ可以用vlan.id 100 vlan.id 200查看。排查跨VLAN通信问题时这个字段比看IP还直观。Wireshark还有一个好用的能力是统计和绘图。用“Statistics”菜单下的“TCP Stream Graph”选择“Time-Sequence (Stevens)”能直观看到TCP传输过程的吞吐和窗口变化配合“RTT Graph”能看到每个包的往返时延。排查“网络慢但应用层没啥异常”这类问题这两个图基本能给出结论。4. FiddlerWindows老玩家的看家工具4.1 为什么现在还在用Fiddler ClassicFiddler是抓包工具里的老资历了尤其是Fiddler Classic一个免费且轻量的Windows工具至今仍有很多人在用。刚装上它就会自动注册为系统代理从WinINETWindows的HTTP协议栈层面接管流量所以打开Fiddler后浏览器的流量立刻就能在列表里看到几乎零配置。要提醒一句Fiddler Classic和Fiddler Everywhere是两款产品。Classic版只支持Windows而且免费功能对一个抓包工具来说已经够用。Everywhere版是跨平台的商业化产品支持macOS和Linux但免费功能有限制很多界面设计也偏现代化。如果你在Windows上日常调试我建议直接用Classic轻快、顺手。开启HTTPS解密也很简单菜单ToolsOptions切到HTTPS页签勾选“Capture HTTPS CONNECTs”和“Decrypt HTTPS traffic”会弹出一个证书安装提示确认后把Fiddler根证书装进系统信任区。之后就能看到HTTPS请求的具体内容了。4.2 Fiddler的独门功能Composer、AutoResponder和FiddlerScriptFiddler的组装请求功能叫Composer右侧标签页可以手动构造一个HTTP请求选方法、填URL、加Header、写Body点Execute就能发出。我在调试回调接口时经常用不用开Postman抓包工具里就能直接验证。AutoResponder是Fiddler的Mock功能对应Charles里的Map Local。选中任意一个会话右侧切到AutoResponder勾选“Enable rules”点“Add Rule”把请求URL匹配规则指向本地文件或另一个URL就能实现返回假数据的效果。它还支持正则表达式匹配比如把所有example.com/api/.*的请求统一返回一个预设的JSON很适合模拟异常返回。Filters功能则是帮你在大量会话里快速聚焦的。可以按主机、进程、响应码、请求类型、文件类型过滤。比如只想看某个进程的流量在Filters里勾选“Show only the following processes”选上目标进程其他流量自动隐藏清爽很多。FiddlerScript是Fiddler最强大的地方。打开Rules菜单下的Customize Rules会打开一个C#脚本文件你可以在这里改写请求和响应。比如给所有请求统一加Header在OnBeforeRequest方法里写oSession.oRequest[X-Debug-Token] 12345;。做弱网测试时也能写oSession[request-trickle-delay] 300;让每个请求都延迟300毫秒再发出。这种脚本能力在自动化测试和批量模拟场景中非常实用。4.3 Fiddler卸载后上不了网这个经典问题值得单独讲Fiddler卸载后上不了网几乎每个老用户都遇到过。原因其实特别简单Fiddler作为系统代理接管了Windows的联网设置卸载时如果没有把代理还原系统设置里就会残留一个代理配置指向一个已经不存在或不工作的端口网络自然就断了。解决办法分两步第一步打开Windows“设置”进入“网络和Internet”左侧选“代理”会看到“使用代理服务器”开关把它关掉。如果没有再打开IE的“Internet选项”切到“连接”页签点“局域网设置”把“为LAN使用代理服务器”前面的勾去掉。第二步如果代理开关已经关了还上不了网那就是WinHTTP层面的代理残留。命令行执行netsh winhttp show proxy如果显示有代理地址执行netsh winhttp reset proxy清空。我这个教训很深刻卸载Fiddler前先去菜单里把“File- Capture Traffic”关了或者干脆先把系统代理设置还原再卸载。否则一旦程序残留了异常退出状态卸载程序并不会帮你清理代理新人同事往往在这块卡半天最后重装系统实在没必要。5. TraceEagle与Proxyman两个新锐选手值得关注5.1 TraceEagle把抓包从单人本地操作变成团队协作和前面几款单机工具比起来TraceEagle的定位明显不一样它更像是一个面向团队协同的抓包与流量分析平台。传统抓包工具的产物是本地一个pcap文件或者Charles的session文件你抓到包后想发给后端同事对方恰好没装同款工具打不开文件来回折腾效率极低。TraceEagle这一类工具的思路是把流量录制下来附带完整的请求响应时间线、协议解析结果然后生成一个可分享的报告链接对方打开链接就能看不需要安装任何客户端。我实际使用中的体验是它特别适合接口联调和多端问题定位。比如App端反馈某个接口异常后端说“我这边日志正常”这时候你在客户端抓包把包含解密后的请求响应、耗时、握手时间线的报告发给后端双方基于同一条链路分析问题定位效率明显提升。它还支持流量回放可以针对某个请求批量重放做回归测试。这个思路是传统抓包工具没有的。不过有一点要提醒这类新锐工具的价值取决于它对协议解析的覆盖范围和你团队的技术栈匹配度。启用之前先确认它能不能解析你常用的协议比如WebSocket、gRPC、HTTP/2以及数据能否导出为标准格式如HAR、PCAP。如果你只是单机调试自己看TraceEagle不是必需品但如果是团队协作场景它能帮你省去很多“把包发给别人”的沟通成本。5.2 ProxymanmacOS/iOS生态里的现代抓包体验Proxyman是macOS上口碑很好的一款抓包工具对Apple Silicon和iOS设备的支持非常到位。如果你主力机是Mac又经常抓手机App的包Proxyman的体验比Charles要顺手很多。最直观的差异在证书管理上。Proxyman把证书安装流程做得很傻瓜菜单里直接有“Install Certificate on macOS”和“Install Certificate on iOS”手机端用数据线连上Mac再按提示打开Safari下载安装即可。证书信任状态也会在界面上明确提示不像Charles那样需要自己摸索。功能上Proxyman支持Map Local、Map Remote、Rewrite、DNS映射、网络节流、脚本修改几乎你能想到的调试能力都有。它的Script功能用JavaScript写比FiddlerScript上手门槛更低。对iOS开发者来说Proxyman还能配合模拟器直接抓包省掉了配置代理的麻烦。性能方面请求多的时候Proxyman的列表依然流畅这一点比Charles做得更好。界面布局也更现代侧边栏、标签页、检查器分屏信息密度高但不凌乱。如果你刚从Charles切过来几乎不需要学习成本。唯一要适应的可能是它在某些局域网络环境下自动配置系统代理的行为刚开始会让你误以为“它什么都没抓”实际是在菜单栏右上角有一个全局开关开启后才能接管系统流量。6. 到底选哪款一张表看清定位6.1 五款工具的定位对照经常有人让我推荐一款“最好用的抓包工具”我的回答始终是没有最好只有最合适。不同场景下选型逻辑完全不同。我整理了一个对照表方便你快速判断。工具工作模式平台核心场景免费情况上手难度Charles代理Windows / macOS / Linux移动端App抓包、HTTPS解密、Mock、弱网模拟试用30天后收费中等Wireshark网卡捕获Windows / macOS / Linux底层网络分析、TCP/IP、TLS握手、VLAN免费开源较高Fiddler Classic代理Windows接口调试、系统代理抓包、脚本改流量免费较低TraceEagle混合/平台化跨平台团队抓包、流量回放、报告共享商业软件中等Proxyman代理macOS移动端/前端调试、现代UI体验付费较低如果你的主要平台是Windows日常做Web或Windows客户端调试Fiddler Classic轻量免费足够用。如果你经常抓手机App、做移动端联调Charles是绕不开的主力跨平台且功能完整。如果你需要分析网络性能、TCP重传、TLS握手或者排查“到底是网络问题还是服务端问题”那必须上Wireshark。如果你在Mac环境下做前端或iOS开发Proxyman的体验会让你觉得钱花得值。如果你在团队协作中经常要共享抓包结果TraceEagle这类工具是很好的补充。6.2 高频问题排查速查表建议收藏最后把我这些年遇到的高频问题整理成一张速查表方便你遇到问题第一时间对照排查现象可能原因快速解决Charles抓不到手机App的包手机代理没配好、证书未信任、SSL Proxying未开启依次检查代理、证书信任状态、SSL Proxying规则浏览器提示不信任Charles证书根证书未设为始终信任重新安装证书并设置“始终信任”Wireshark看不到完整应用数据混淆了数据帧长度和TCP流数据量右键Follow TCP Stream查看完整流转发Fiddler卸载后上不了网系统代理残留设置里关闭代理必要时netsh winhttp reset proxyWireshark抓到的HTTPS是密文未配置TLS密钥日志设置SSLKEYLOGFILE并配置Wireshark的TLS密钥路径手机能上网但抓不到其他设备流量无线AP隔离、混杂模式受限用代理模式工具抓同一网段设备或用有线抓包列完这些高频问题说点我自己的使用习惯。我现在遇到问题第一反应不是找工具而是先判断这个报错发生在哪一层如果接口返回了响应但数据不对直接开Charles或Proxyman看请求和响应如果接口一直转圈或者超时我会用Wireshark看TCP握手和TLS握手有没有完成如果要做团队联调则结合TraceEagle这类平台工具共享抓包结果。抓包工具装得再多不如先把工作原理吃透。搞懂每种工具的工作模式和数据呈现逻辑遇到问题才能秒速选对工具少走弯路。 SEO 优化官网定制响应式建站教育培训建站