1. 抓包基础回顾:HTTP/HTTPS 协议原理、代理服务器原理、抓包工具核心功能对比
各位同学,欢迎来到《抓包工具高级应用技能》的第一章。
说实话,很多人一上来就问我:「老师,Charles 怎么装?Fiddler 怎么配?」
我的回答通常是——先别急。工具只是刀,你得先知道砍的是什么。
这一章,我们不讲花哨的操作。我带你重新梳理一下抓包背后的三个核心基础:HTTP/HTTPS 协议、代理服务器原理、以及三大工具的定位差异。这些东西你搞懂了,后面 29 章你学起来会非常顺。
1.1 HTTP/HTTPS 协议原理——抓包到底在抓什么?
抓包,说白了就是「偷看」客户端和服务器之间的对话。
HTTP 的对话是明文。你想想看,就像两个人隔着墙喊话,谁路过都能听见。所以 HTTP 抓包很简单——只要把网卡设成混杂模式,或者中间插一个代理,数据包就能原样复制出来。
核心要点:HTTP 请求由三部分组成:请求行、请求头、请求体。响应也一样:状态行、响应头、响应体。抓包工具展示的 Raw / Headers / Body 选项卡,就是把这些拆开给你看。
但 HTTPS 不一样。它给对话加了一层 TLS/SSL 加密。就像两个人用对讲机通话,你只能听到「滋滋滋」的噪音。
那抓包工具怎么还能抓到 HTTPS 的内容呢?
嗯,这里要注意——抓包工具用的是中间人攻击(MITM)的原理。工具把自己伪装成服务器,跟客户端建立一条加密通道;同时又伪装成客户端,跟真正的服务器建立另一条加密通道。两条通道的数据在工具内部解密、展示、再加密转发。
避坑指南:我曾经在调试一个金融 App 时,发现 HTTPS 抓包全是乱码。折腾了半天,才发现是 App 做了 SSL Pinning(证书绑定)。它只信任自己内置的证书,不认 Charles 的根证书。这种情况,你得用 Frida 或 Xposed 去 hook 证书校验函数——这个我们后面章节会细讲。
所以,HTTPS 抓包能不能成功,关键看两点:
- 证书信任链:你的抓包工具根证书必须被客户端信任
- SSL Pinning:App 是否做了额外的证书校验
1.2 代理服务器原理——抓包工具是怎么「插队」的?
抓包工具本质上就是一个代理服务器。
你想想看,正常情况下,你的浏览器直接请求 https://api.example.com。数据包从你的网卡出发,经过路由器、交换机、DNS 解析,最后到达目标服务器。
但当你打开 Charles 或 Fiddler 后,你的浏览器会把请求先发给 127.0.0.1:8888(Charles 默认端口)。工具收到请求后,再替你去访问真正的服务器。
个人经验:我习惯把代理分为两种:显式代理和透明代理。Charles/Fiddler 属于显式代理——客户端明确知道自己在用代理。Wireshark 属于透明抓包——客户端根本不知道有人在监听。这两种场景的适用性完全不同,后面我们会对比。
代理的核心流程其实就三步:
- 拦截:客户端把请求发给代理,而不是目标服务器
- 解析:代理拆解请求,展示给你看
- 转发:代理把请求原样(或修改后)发给目标服务器
这里有个容易混淆的点——正向代理和反向代理的区别。
| 类型 | 代表工具 | 作用 | 客户端感知 |
|---|---|---|---|
| 正向代理 | Charles, Fiddler | 代理客户端发出请求 | 知道 |
| 反向代理 | Nginx, HAProxy | 代理服务器接收请求 | 不知道 |
| 透明代理 | Wireshark + 端口镜像 | 被动监听网络流量 | 不知道 |
抓包工具用的是正向代理模式。你手动配好代理地址,工具才能抓到包。如果你不配代理,Charles 只能抓到它自己发出的请求——这显然不是我们想要的。
1.3 三大抓包工具核心功能对比
市面上抓包工具很多,但真正能打的就是三个:Charles、Fiddler、Wireshark。
我经常被问到:「老师,我该学哪个?」
我的回答是:都学。但你要知道它们各自的强项和弱项。
1.3.1 Charles——macOS 生态的首选
Charles 是我个人最常用的工具。它基于 Java 开发,跨平台,但 macOS 上的体验最好。
- 优点:界面清爽,SSL 代理配置简单,支持断点、重写、映射、限速
- 缺点:付费(30 天试用),不支持命令行,对非 HTTP 协议支持弱
- 适用场景:移动端 App 抓包、Web 调试、接口 Mock
个人习惯:我一般用 Charles 做日常调试。它的 Map Local 功能特别好用——把线上接口映射到本地 JSON 文件,前端开发可以完全脱离后端跑起来。这个功能我们在第 8 章会专门讲。
1.3.2 Fiddler——Windows 生态的老牌王者
Fiddler 是 .NET 写的,Windows 上表现最好。它有一个杀手锏——FiddlerScript,可以用 C# 脚本自定义抓包行为。
- 优点:免费,功能极其丰富,支持脚本扩展,支持命令行模式
- 缺点:界面老旧,macOS/Linux 需要 Mono 运行,SSL 配置稍复杂
- 适用场景:Windows 环境下的深度调试、自动化测试、协议分析
避坑指南:我曾经在 Windows Server 上用 Fiddler 抓包,发现 HTTPS 请求全部失败。查了半天,原来是系统时间不对,导致证书校验失败。Fiddler 的根证书对系统时间非常敏感——差 5 分钟以上就会报错。这个坑我踩过,你们别踩。
1.3.3 Wireshark——网络层的终极武器
Wireshark 跟上面两个完全不同。它不依赖代理,而是直接抓取网卡上的所有数据包。它能看到 TCP 三次握手、DNS 查询、TLS 握手——这些 Charles 和 Fiddler 是看不到的。
- 优点:协议支持最全(上千种),能看网络层和传输层,免费开源
- 缺点:学习曲线陡峭,不能直接修改请求,对 HTTPS 解密需要额外配置
- 适用场景:网络故障排查、协议逆向、安全分析、性能调优
核心对比:Charles/Fiddler 是「应用层」工具,Wireshark 是「网络层」工具。前者帮你理解业务逻辑,后者帮你理解网络行为。两者不是替代关系,是互补关系。
1.4 知识体系总览
下面这张图,是我自己梳理的抓包知识体系。你可以把它当成整个课程的地图。
这张图展示了整个课程的知识脉络。从底层的协议原理,到中间的工具功能,再到顶层的应用场景和高级技能。每一章都会围绕这个体系展开。
1.5 本章小结
这一章我们做了三件事:
- 理清了 HTTP 和 HTTPS 抓包的本质区别——明文 vs 加密,以及 MITM 的原理
- 搞懂了代理服务器的工作机制——拦截、解析、转发三步走
- 对比了 Charles、Fiddler、Wireshark 的定位和适用场景
我的建议:不要急着装工具。先花 10 分钟想清楚你平时的工作场景——你是做前端开发?后端调试?还是网络运维?根据场景选工具,而不是根据工具定场景。这个顺序搞反了,后面会走很多弯路。