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 属于透明抓包——客户端根本不知道有人在监听。这两种场景的适用性完全不同,后面我们会对比。

代理的核心流程其实就三步:

  1. 拦截:客户端把请求发给代理,而不是目标服务器
  2. 解析:代理拆解请求,展示给你看
  3. 转发:代理把请求原样(或修改后)发给目标服务器

这里有个容易混淆的点——正向代理和反向代理的区别。

类型 代表工具 作用 客户端感知
正向代理 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 知识体系总览

下面这张图,是我自己梳理的抓包知识体系。你可以把它当成整个课程的地图。

抓包工具知识体系总览 抓包工具知识体系总览 HTTP/HTTPS 协议原理 代理服务器原理 抓包工具核心功能 Charles Fiddler Wireshark Charles 核心功能 SSL 代理 / 断点 / 重写 Map Local / Map Remote 限速 / 自动响应 Fiddler 核心功能 FiddlerScript 脚本 AutoResponder Composer / 命令行模式 Wireshark 核心功能 过滤器 / 统计 / 流追踪 TLS 解密 / 专家分析 IO 图 / 端点统计 移动端 App 调试 自动化测试 / Mock 网络故障排查 高级应用:协议逆向 / 安全分析 / 性能调优

这张图展示了整个课程的知识脉络。从底层的协议原理,到中间的工具功能,再到顶层的应用场景和高级技能。每一章都会围绕这个体系展开。

1.5 本章小结

这一章我们做了三件事:

  • 理清了 HTTP 和 HTTPS 抓包的本质区别——明文 vs 加密,以及 MITM 的原理
  • 搞懂了代理服务器的工作机制——拦截、解析、转发三步走
  • 对比了 Charles、Fiddler、Wireshark 的定位和适用场景

我的建议:不要急着装工具。先花 10 分钟想清楚你平时的工作场景——你是做前端开发?后端调试?还是网络运维?根据场景选工具,而不是根据工具定场景。这个顺序搞反了,后面会走很多弯路。