ARTICLE DETAIL

资讯详情

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

五大抓包工具横向对比:原理、HTTPS解密与实战技巧

五大抓包工具横向对比:原理、HTTPS解密与实战技巧 干客户端开发和网络调试的人电脑里基本都会同时躺着好几个抓包工具。我自己最常用的是 Charles 和 WiresharkWindows 上偶尔开 Fiddler切到苹果生态后用 Proxyman至于 TraceEagle很多做 Android 逆向和 App 联调的朋友应该不陌生。经常有人问我到底哪个抓包工具好用我的标准回答是先别问哪个好用先问你要抓什么、在什么平台上抓。这篇文章就拿 Charles、TraceEagle、Wireshark、Fiddler、Proxyman 这五款常见的抓包工具从原理到实操做一次横向对比把安装步骤、HTTPS 解密、弱网模拟、Mock 配置和常见坑点一次讲清楚。抓包这件事工具选对了能省下一大半时间。尤其现在大部分流量都是 HTTPS光会点开工具看列表远远不够你得知道它凭什么能解密、为什么有的包看不到、证书信任到底怎么配。下面我按自己的使用习惯把这五款工具拆开聊。1. 不同抓包工具的原理差异代理、嗅探与虚拟网卡很多人一开始搞混一件事以为所有抓包工具都是同一种玩法其实差别非常大。Charles、Fiddler、Proxyman 是同一类Wireshark 自己是一类TraceEagle 又是一种。搞不清原理后面所有操作都会踩坑。1.1 代理型抓包为什么 Charles、Fiddler、Proxyman 能解密 HTTPS这三款工具本质是一个本地 HTTP 代理。你在电脑上启动它它会监听一个端口比如默认的 8888。手机或浏览器把流量指向这个代理请求先经过工具工具再转发给真实服务器。这个过程里抓包工具是在做“中间人”的活。客户端跟工具建立 TLS 连接工具再跟服务器建立 TLS 连接。对客户端来说工具就是服务器对服务器来说工具就是客户端。所以它能看到完整的明文请求和响应。这也是为什么这类工具一定要你安装并信任它的根证书——没有证书客户端就不会跟“冒牌服务器”建立 TLS 连接解密也就无从谈起。可以把这想象成收发快递时多了一个中转站。中转站有权拆开包裹检查内容检查完重新封好再发给收件人。Charles、Fiddler、Proxyman 就是这个中转站。它们最大的优势是面向业务调试看的都是 HTTP/HTTPS 层面的请求、响应、Cookie、Header还能直接改包。1.2 嗅探型抓包Wireshark 为什么什么协议都能看却不方便解密Wireshark 的路子完全不同。它不需要把流量指到某个端口而是直接把网卡设置为混杂模式复制一份经过网卡的所有原始数据包。换句话说它是站在旁边看的旁观者而不是中间人。因为只是看所以 TCP 三次握手、DNS 查询、ARP、ICMP、TLS 握手这些底层协议它全都能看到这让它在网络故障定位、协议分析、CTF 取证这些场景里是无可替代的。但代价就是它默认拿不到 TLS 的密钥看到的 HTTPS 全是一堆密文。想要解密也不是没办法后面第四节里我会说 SSLKEYLOGFILE 的玩法。总结一下区别代理型工具适合“看业务数据”Wireshark 适合“看网络本身”。你问出的问题决定了应该用哪个不是装一个就万事大吉。1.3 虚拟网卡通道TraceEagle 凭什么能在 Android 免 root 抓包TraceEagle 是很多 Android 逆向和真机联调场景里的利器。它的原理是在设备本地建立一个虚拟网络通道让特定 App 的流量走这条通道经过它然后再转发出去。因为是在系统网络层做的重定向所以不需要 root可以抓到 TCP、UDP 这类不基于 HTTP 的流量这就比 Charles、Fiddler 只能抓 HTTP 代理流量的方式覆盖面广得多。它还能在悬浮窗实时显示网速和数据包数量方便你在操作 App 时随时观察流量变化。对于国产 App 的接口分析、弱网联调、或者想看某个 SDK 到底上报了什么内容TraceEagle 比电脑端的通用代理工具要直接得多。唯一要适应的是它的界面相对工具化细节不如 Charles 那么精致但胜在针对性强。五款工具的定位差异可以先看这张表工具工作方式主要平台HTTPS 解密擅长场景CharlesHTTP 代理Windows / macOS / Linux内置中间人证书Web 与移动端业务调试、Mock、弱网FiddlerHTTP 代理WindowsClassic/ 跨平台内置中间人证书Windows 平台开发、脚本扩展、弱网模拟ProxymanHTTP 代理 网络隧道macOS / iOS / Windows内置中间人证书苹果生态、iOS 真机抓包、现代 UIWireshark网卡嗅探全平台需配置 TLS 密钥网络协议分析、故障定位、CTFTraceEagle本地虚拟网卡Android可配置证书解密Android 免 root 抓包、TCP/UDP、逆向2. 从零上手五款工具安装步骤与手机抓包配置工具装好只是第一步真正费时间的是把环境配通尤其是手机抓包。下面按工具逐个说都是我自己常用或者帮别人排查时总结出来的路径。2.1 Charles跨平台首选一张证书打通 iOS 和 AndroidCharles 是 Java 写的Windows、macOS、Linux 都能跑。去官网下载对应版本安装过程没太多可说的装完它会在本地监听 8888 端口。抓 iPhone 的包我一般这么操作手机和电脑连同一个 WiFi。Charles 菜单 Proxy Proxy Settings确认 HTTP Proxy 勾选且端口是 8888。手机 WiFi 设置里打开 HTTP 代理服务器填电脑的局域网 IP端口填 8888。第一次配置完Charles 会弹一个提示框问是否允许该设备的连接要点 Allow。用手机 Safari 访问chls.pro/ssl下载并安装证书。iOS 上还要去 设置 通用 关于本机 证书信任设置把 Charles 的证书开关打开。这一步漏掉解密就是失败的。Android 那边稍微麻烦一点。Android 7.0 及以上App 默认只信任系统证书用户安装的 Charles 证书默认不被信任。针对 debug 包可以在工程里配置network_security_config.xml允许用户证书如果是 release 包或者第三方 App就需要设备 root 后把证书装进系统证书目录或者在 Magisk 里装个证书模块。这也是很多人说“Charles 抓不到 App 的包”最常见的原因之一。网上还有一堆“Charles 汉化版”“中文版”的下载链接我的建议是别装。官方只有英文界面那些第三方打包的版本来源不明有风险。英文界面用两天就熟了大不了把常用菜单记下来。2.2 FiddlerWindows 老牌免费工具卸载时容易埋雷Fiddler 分几个版本Fiddler Classic 是免费的适合 WindowsFiddler Everywhere 是跨平台的付费版。大多数教程讲的都是 Fiddler Classic够用。安装后打开它会自动设置 Windows 系统代理。手机上抓包流程跟 Charles 差不多手机 WiFi 连同一个网段代理设置成电脑 IP 加 8888 端口然后手机浏览器访问http://ipv4.fiddler:8888下载证书。Fiddler 在 Windows 上最大的优势是脚本扩展FiddlerScript 可以高度定制。比如你想自动给所有请求加个 Header或者在响应里统一替换某个字段直接在脚本里写几行就能生效重启即加载。这里必须提醒一个经典坑Fiddler 卸载后上不了网。原因很简单它卸载时没有把系统代理设置还原Windows 的网络请求还往 8888 端口发而 Fiddler 已经不在了。修复也很简单打开 Windows 设置里的“Internet 选项”。切到“连接”标签页点“局域网设置”。取消勾选“为 LAN 使用代理服务器”。或者直接在命令行执行netsh winhttp reset proxy重置系统代理。遇到这类问题先别重装系统90% 都是这个原因。2.3 Wireshark免费开源但要先搞懂两种过滤器和网卡选择Wireshark 安装教程网上到处都是Windows 直接下载安装包macOS 可以用 Homebrew 装Linux 用对应包管理器装就行。装完打开会看到一块网卡列表这里很多人第一次就选错选了虚拟网卡或者回环网卡结果什么都抓不到。无线连着 WiFi 就选Wi-Fi或en0插着网线就选以太网不确定就选any先看有没有数据。Wireshark 的过滤器要分清两类。抓包过滤器是在抓之前就过滤语法是 BPF比如host 192.168.1.1 and tcp port 80显示过滤器是在抓完的数据里筛语法更人性化比如http、tcp.port 443。新手最容易搞混的是把显示过滤器的语法填到抓包过滤器里结果提示语法错误。日常调试我建议先把抓包过滤器留空全量抓下来再用显示过滤器慢慢筛性能损耗在大多数场景下可以接受。我之前在做协议分析时需要看到 VLAN 里的流量这时候就要用到显示过滤器。Wireshark 里可以直接按vlan.id 100过滤某个 VLAN 的包非常方便。做网络运维或者排查交换机相关问题时这个过滤器比一条条翻包高效得多。2.4 ProxymanmacOS 和 iOS 生态的现代选择如果你主力是苹果设备Proxyman 的体验会比 Charles 舒服很多。界面是原生的不拖泥带水启动后会自动帮你配置 macOS 系统代理基本零成本上手。抓 iPhone 的包也很顺。最简单的办法是让手机和 Mac 连同一个 WiFi然后用系统代理的方式流程跟 Charles 类似。更狠的是它支持 iOS 设备用 USB 连接 Mac 后通过一种“网络扩展”隧道模式抓包不走 WiFi 代理这样能抓到很多客户端不走 HTTP 代理的流量比如 TCP 连接、NSURLSession 的底层请求等。这个机制不需要依赖同一局域网也不容易受到公司路由器隔离策略的影响。证书安装方面Proxyman 会提示你下载它的根证书按向导走就行。iOS 上同样要去证书信任设置里把开关打开。另外它的调试面板对 JSON 的展示很友好响应体可以自动格式化遇到大 JSON 也不用复制到别的工具里看。2.5 TraceEagleAndroid 免 root 抓包的实用方案TraceEagle 的安装来源一般是官网或应用市场。装好之后需要授予悬浮窗权限和网络捕获权限这一步各家 ROM 弹窗不一样有的要手动去设置里开。开启后选一个目标 App 或者全局模式就能看到这个 App 产生的所有网络请求。它最实用的地方是能抓 TCP/UDP这是 Charles 和 Fiddler 这类纯 HTTP 代理工具做不到的。你用它看游戏长连接、看视频流、看某些私有协议的 App都会比传统代理工具视野宽。抓到的包可以直接导出 pcap 文件然后用 Wireshark 打开做进一步分析等于把移动端采集和 PC 端分析两个环节打通了。国内 ROM 对后台抓包服务的管控比较严。用 TraceEagle 时记得把 App 加入电池优化白名单并锁定最近任务不然抓一会儿服务被系统杀掉数据流就断了。这个坑我踩过好几次后来养成了装完就先设置白名单的习惯。3. HTTPS 解密与证书信任抓包工具的必修课很多人兴致勃勃装好工具结果发现只能看到 CONNECT 请求真正的请求体全是乱码问题基本都出在证书环节。3.1 为什么装了证书还是看不到明文好几个原因叠加在一起会导致证书“装了等于没装”。第一客户端不信任用户证书。Android 7.0 以上默认只在 debug 模式下信任用户证书iOS 则需要额外开启“完全信任”。如果证书下载了但没在系统设置里手动信任TLS 握手阶段客户端就会拒绝连接。第二App 做了 SSL Pinning。常见的做法是 App 内置了服务器的公钥指纹或者把证书硬编码到代码里。如果请求服务器的证书跟内置的不一致客户端直接中断请求。这种场景用 Charles、Fiddler 一抓就是一个红叉或者连接失败。第三代理设置对不对。很多人手机上把代理 IP 填成127.0.0.1这在手机上指向的是手机自己当然连不上电脑。代理 IP 必须在电脑的局域网 IP可以在电脑上通过ipconfig或ifconfig查看。处理思路一般是分层的。自己开发的 App在 debug 环境里把 SSL Pinning 关掉或者用network_security_config.xml放行指定域名和用户证书如果是逆向别人家的 App那就需要想办法绕过 Pinning或者抓非 HTTPS 的流量再或者看能不能在代码里找到证书校验的开关。注意绕过别人 App 的证书校验涉及软件逆向的合规边界只建议在自己有权限的设备上做技术研究。3.2 Wireshark 解密 TLS 的正确姿势SSLKEYLOGFILEWireshark 不能像代理工具那样直接中间人解密但是如果你能拿到客户端的 TLS 密钥它也能把 TLS 报文还原成明文。最常见的做法是设置一个环境变量SSLKEYLOGFILE指向一个文本文件路径。Chrome、Firefox 这类浏览器读取这个环境变量后会把每次 TLS 会话的密钥写入这个文件。Wireshark 里在 Preferences Protocols TLS 中把(Pre)-Master-Secret log filename指向同一个文件再刷新抓到的流量就能看到解密后的 HTTP/2 明文请求。这个方案只适用于你能控制客户端的环境比如分析自己浏览器的流量、自己写的程序、或者用 curl 加--ssl-keylog-file参数去下载资源。如果你想解密的是别人手机上某个 App 的流量那还是需要用 Charles 或 Proxyman 这种代理中间人来处理。两个思路各有各的适用场景别混为一谈。3.3 root 和越狱场景下的系统证书问题下面聊一个边界情况。某些 App 不仅做了 SSL Pinning还只信任系统证书库。如果想在真机上抓这种 App 的 HTTPS 包常规装用户证书是不行的。Android 的解决方案是把抓包工具的证书转成系统证书并放到/system/etc/security/cacerts/目录需要设备有 root 权限。iOS 类似在越狱环境下可以把证书导入到系统信任链里。这块操作门槛不算高但牵扯到设备安全和合规问题我一般只建议在专用测试机上搞日常开发调试尽量用 debug 包配合network_security_config解决别拿着主力机折腾。别忘了无论哪个工具证书都是有有效期的过期之后手机会继续用旧证书发起 TLS 握手这时候就抓不到包了。遇到之前好好的突然断了先看证书要不要重新下载。4. 高频实战弱网模拟、数据 Mock 与 Wireshark 协议分析配置都通了之后真正能提升幸福感的是下面这些实操玩法。弱网模拟和市场里经常听到的 Mock是代理类工具最值钱的两个功能Wireshark 的协议分析则是网络层面问题的兜底手段。4.1 Fiddler 和 Charles 的弱网模拟怎么配弱网测试是客户端开发必须做的。Fiddler 里最简单的方式是 Rules Performance Simulate Modem Speeds勾选后所有请求都会被加上延迟。这个选项本质是通过 FiddlerScript 给请求和响应注入延时模拟 56k 拨号网络的体验。想要自定义延迟多少毫秒Fiddler 可以在 FiddlerScript 里找到OnBeforeRequest和OnBeforeResponse改写oSession[request-trickle-delay]和oSession[response-trickle-delay]。比如响应延迟 300ms就设置oSession[response-trickle-delay] 300。注意这个数字是每个请求的固定延迟不是网络抖动那种随机值做测试时心里要有数。Charles 的做法更直观。Proxy Throttle Settings勾选 Enable Throttling然后设置带宽、延迟、丢包率和 MTU。它支持只针对特定主机限速比如只模拟 CDN 域名慢其他请求不受影响。这个功能在排查“为什么只有图片加载慢”这类问题的时候很有用。我在实际项目里通常先设置 300ms 延迟加 1% 丢包模拟普通的弱网环境再逐步加大参数看 App 的容错表现。4.2 Charles 的 Map Local 和 RewriteMock 接口的三种用法Mock 数据是前后端联调的神器。Charles 里最常用的是 Map Local把线上某个 URL 映射到你本地的一个 JSON 文件。好处是后端没开发完前端也能跑通流程。操作路径是 Tools Map Local添加一条规则填写要拦截的 URL然后 Loc 选择本地文件。另一个场景是 RewriteTools Rewrite可以对请求和响应里的 Header、Body、状态码做批量替换。比如我想把响应里的code: 0改成code: 500测试前端有没有做异常提示一条规则就能搞定比改代码重新发布快得多。断点功能也不可忽视。Proxy Breakpoints 会拦截匹配的请求让你手动修改请求或者响应后再放行。比如你要验证下单接口并发扣库存的问题可以在请求发出前断住复制出多个请求再同时放行模拟并发提交。这个功能存量不多但每次用到都很关键。Fiddler 的 AutoResponder 也是同一类玩法把线上请求拖到 AutoResponder 面板里右侧勾选返回本地文件或自定义响应。逻辑上跟 Map Local 基本一致区别只是交互方式不同。Proxyman 里对应的功能叫 Rewrite 和 Mock操作更现代化创建规则时直接可视化编辑匹配条件。4.3 Wireshark 实战VLAN 过滤、追踪 TCP 流和导出 HTTP 对象Wireshark 在实战里往往不是用来处理业务数据的它处理的是“网络到底发生了什么”这类问题。举一个例子你发现某个接口偶尔超时但 Charles 里看到的请求和响应都正常这时候就要用 Wireshark 看 TCP 层有没有重传、乱序、丢包。网卡选好后抓一会儿先用显示过滤器ip.addr 目标服务器IP把范围缩小然后右键第一条 SYN 包选择“追踪 TCP 流”就能看到这个连接从三次握手到断开的全过程。哪里有重传哪一段延迟异常一目了然。如果是在做密码比赛 CTF 的 writeupWireshark 最常用的套路是导出 HTTP 对象。File Export Objects HTTP会列出所有经由 HTTP 传输的文件。很多靶场题目会把 flag 藏在图片、压缩包或者 www.zip 这类静态文件里直接导出就能拿到。另外看 DNS 请求也是一个常规思路某些恶意流量会通过 DNS 查询把数据带出去过滤dns之后看哪些域名解析得很可疑顺藤摸瓜找后面的 TCP 流。VLAN 过滤也是 Wireshark 的一个重要用法。在带 VLAN 标签的交换机网络里抓到的包会带有 VLAN ID。输入vlan.id 100可以只看 VLAN 100 的流量。排查跨 VLAN 通信问题时这个过滤器能帮你快速确认广播域边界。4.4 TraceEagle 的数据导出与二次分析TraceEagle 抓到数据后可以直接导出 pcap 文件。这一步的价值在于你可以用 Wireshark 打开它利用 Wireshark 的过滤器、图表和协议分析能力做更深度的排查。比如某个 App 后台跑流量你在 TraceEagle 里看到一堆连接但界面信息有限导出后在 Wireshark 里按连接分组合计流量大小就能很快找出是哪个域名、哪个端口的流量占比最高。用 TraceEagle 抓 HTTPS 时它也会提供证书安装向导。跟 Charles 类似Android 高版本需要看 App 的证书策略。如果只是看流量走势和连接目标不关心请求内容其实不装证书也能抓到大量元数据。这个特性在做竞品分析、检测 App 是否在后台偷偷上报数据的时候特别实用。5. 常见问题排查与避坑速查表最后把这几年被问得最多、也是搜索热度最高的几个问题集中列一下每个都给出具体的排查路径。5.1 Charles 抓不到代理手机的包怎么排查这个问题几乎每周都有人问。我按出现频率排了一张表现象原因处理Charles 无任何设备连接提示手机代理没设对确认手机代理 IP 是电脑局域网 IP不是 127.0.0.1连接上了但看不到请求代理只有 HTTP没开 SSL ProxyingProxy SSL Proxying Settings勾选 Enable并添加*:*能看到 CONNECT 但看不到内容证书没信任iOS 去证书信任设置开启开关Android 看是否是 7.0 以上且 App 不信任用户证书某些 App 完全抓不到App 使用了非 HTTP 代理协议比如 TCP/UDP 长连接或开启 QUIC换 TraceEagle 或用 Wireshark 抓网卡流量Charles 显示连接被拒绝电脑防火墙拦截了 8888 端口在防火墙放行 Charles或临时关防火墙测试请求有红叉/握手失败App 做了 SSL Pinning确认 App 是否允许调试必要时关掉 Pinning这里还有个容易忽略的点如果公司网络本身有透明代理或者开启了 AP 隔离手机虽然连上了同一个 WiFi但实际通信路径并不经过电脑Charles 自然就抓不到。判断方法很简单电脑上开一个 HTTP 服务手机浏览器能不能直接访问电脑 IP。访问不了那就既不是 Charles 的问题也不是证书的问题而是网络环境的问题。5.2 Fiddler 卸载后上不了网怎么修复前面提到过这个问题这里再给个清晰的操作顺序打开 Internet 选项找到连接页签下的局域网设置。取消“为 LAN 使用代理服务器”确认代理地址和端口已清空。如果还不行管理员身份运行命令行执行netsh winhttp reset proxy。最后重启浏览器再试。这个问题的根源是 Fiddler 修改了 WinINET 系统代理而卸载程序没有还原。装任何会改系统代理的工具卸载前最好先手动把代理关掉能省很多事。Windows 上还有个类似的坑某些代理工具之间互相覆盖系统代理装了两个以后上网时好时坏排查思路同样是先去系统代理设置里看被谁改了。5.3 Wireshark 抓不到网站数据包多半是网卡和过滤器的问题“为什么我打开 Wireshark 什么都看不到”我几乎每个月都会遇到一次。先看网卡不要选Loopback: lo0除非你要抓本机进程之间的通信无线环境下选带 Wi-Fi 字样的网卡macOS 上一般对应en0。再确认混杂模式是否开启有些网卡驱动默认关闭混杂模式抓包数量会少一半。如果能看到包但看不到 HTTP注意现在大部分网站都开了 HTTPShttp过滤器自然筛选不到内容你需要看tls或者先配置 SSLKEYLOGFILE 解密。另外不要同时填多个显示过滤器比如http tcp.port 443就永远不会命中的因为 HTTPS 流量在 TCP 层是 443但在 HTTP 层解密后才能看到。另外在 macOS 或 Linux 上用 Wireshark 抓包如果设备列表是空的很可能是因为当前用户没有权限打开 BPF 设备。macOS 上试着用sudo wireshark启动Linux 上可以把自己加入wireshark用户组。Windows 上如果用的是 Npcap安装时选择“支持 WinPcap API 兼容模式”能省掉很多历史兼容问题。5.4 其他杂项问题和工具配合思路还有一些零散但常见的问题。端口冲突是最普遍的Charles、Fiddler 默认都用 8888当你装了多个抓包工具时经常启动一个发现另一个已经在占用端口。解决方案很简单在设置里把其中一个改成 8899或者干脆先用进程管理器看谁占了 8888。代理级联也是个大坑。手机已经通过 WiFi 走了一个代理抓包工具自己又设置了代理请求会变成“客户端 - 抓包工具 - 另一个代理 - 服务器”包确实能抓到但响应时间被拉长容易误判为网络慢。调试时尽量让请求路径简单直接。如果你同时装了 Charles 和 Wireshark可以把它们当组合拳用。先用 Charles 判断某个接口是不是正常如果接口正常但用户体验还是慢再用 Wireshark 看 TCP 层是不是有重传或者拥塞。我在实际排查过一个视频卡顿问题Charles 里看到 HTTP 200 响应很快但 Wireshark 显示 TCP 重传率高得离谱最后定位是弱网环境下 UDP 视频流和 TCP 信令互相抢带宽。这类问题如果只依赖单一工具很容易做出错判断。我个人的经验是长期留下 Wireshark 和一个代理类工具就足够应付大多数场景。Wireshark 负责回答“网络层到底发生了什么”Charles 或 Proxyman 负责回答“业务数据到底长什么样”。至于选 Charles 还是 Proxyman纯粹看平台和审美Windows 用户选 Charles 没毛病Mac 用户且喜欢原生界面的直接上 Proxyman。Fiddler 在 Windows 脚本扩展上有优势TraceEagle 则是 Android 免 root 抓 TCP/UDP 的利器。最后再分享一个小技巧。遇到“前端说接口正常、后端说没收到请求”这种扯皮问题我会在 Charles 的 Access Log 里看请求是否到达代理然后看它转发的目标地址是否正确同时用 Wireshark 抓电脑网卡确认请求是否真的发出了网卡。三层证据对照下来问题一定出现在某一层不会来回踢皮球。抓包不是目的把问题定位清楚才是目的。
返回列表