一文搞懂抓包:代理、HTTP 与 HTTPS 的流量观察链路

抓包的本质是回答一个问题:数据从浏览器到服务器,一路上经过哪些环节,每个环节能看到什么、看不到什么? 拆开就是三件事实——HTTP 是明文协议,所以”抓包能看到内容”;代理是流量路径上的中转站,所以”抓包工具能插进链路”;HTTPS 是加密协议,所以”想看到内容必须成为 TLS 端点或拿到密钥”。把这三件事串起来,就得到一张完整的流量观察地图。

本文只讨论授权环境下的流量观察与抓包原理。

一、流量本质:数据在网络上到底是什么

你在网络上发送的每一个请求,物理上都是一串比特流。从应用层到物理层,数据被一层层”套娃”封装:

1
2
3
4
5
HTTP 数据(可读文本)
↓ 加 TCP 头(源/目的端口)
↓ 加 IP 头(源/目的地址)
↓ 加以太网帧头(源/目的 MAC)
↓ 变成电信号/光信号/无线电波

网络七层模型(OSI)和四层模型(TCP/IP)讲的就是这层封装关系。对抓包来说,只需要记住一个简化视角:以太网帧 → IP 包 → TCP 段 → HTTP 数据。

抓包工具本质上是解封装器,从底层一层层剥掉头,把内容展示给你:

  • Wireshark:从以太网帧开始剥,你看到完整的 TCP/IP 结构、每个包的十六进制内容,视野最大、最底层
  • Burp / Yakit:直接停在 HTTP 层,只展示请求行、请求头、body 这种”人类友好”视图,专门为 Web 测试设计

核心认知:HTTP 请求”看起来”是一段可读文本(请求行 + 头部 + 空行 + body),而它被包裹在 TCP/IP/以太网里。这段文本的可读性,就是”抓包能看到明文”的物质基础——下面一章展开。

二、HTTP:明文的可观察性

1. 一个 HTTP 请求长什么样

在 Burp 里看到的典型请求:

1
2
3
4
5
6
GET /login HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 ...
Cookie: session=abc123
Accept: text/html

结构就四部分:请求行(方法 + 路径 + 协议版本)、请求头(Host、Cookie、User-Agent 等键值对)、空行、body(GET 通常没有,POST 有表单或 JSON 数据)。响应结构对称:状态行(200 OK)、响应头、body。

2. 为什么明文 = 可看可改

HTTP 不加密,意味着链路上任何能读到这段数据的节点,都可以看、改、重放:

  • 看:路由器、运营商、WiFi 热点、企业网关、抓包工具——都能读到完整内容
  • 改:中间节点可以篡改响应(最经典的例子:公共 WiFi 上被插入广告、HTTP 页面被注入脚本)
  • 重放:拦截到登录请求后,原样重发(如果服务端没做防重放)

这就是 HTTP 的三大安全缺陷:窃听、篡改、身份伪造——也是 HTTPS 出现的直接原因。

3. HTTP 抓包:零配置

因为不存在加密,HTTP 抓包没有任何证书问题:

1
浏览器 ──明文──▶ Burp ──明文──▶ 服务器

只要把代理指到抓包工具,立刻就能看到全部明文,不需要装任何证书、不需要任何额外配置。这也是内网靶场、老系统、开发环境调试这么方便的原因——它们大量跑纯 HTTP。而现代公网站点几乎全是 HTTPS 了(浏览器会把 HTTP 标为”不安全”,HSTS 强制跳转 HTTPS),所以抓包的重头戏在 HTTPS——也就是接下来两章的主角。

三、代理:流量被”插一脚”的机制

1. 什么是代理

代理是一个中间转发者:客户端不直接连服务器,而是把请求交给代理,由代理转发。按位置和用途分三种形态,面试最爱考:

形态 替谁干活 谁配置 典型例子
正向代理 替客户端转发 客户端主动设置 Burp、Fiddler、翻墙代理
反向代理 替服务器接收 服务器端部署 Nginx、CDN、负载均衡
透明代理 替网络强制接管 无需客户端配置 企业上网行为管理、iptables 重定向

抓包工具是标准的正向代理。你设置浏览器代理 127.0.0.1:8080,本质是改写了请求的目的地——原本直连 example.com:443,现在先到本机的 Burp。Burp 收到后再替你连真正的服务器。正向代理就是”客户端主动把流量交给你”,这是主动抓包的前提。

透明代理值得多说一句:它不需要客户端任何配置,靠网络设备(交换机/路由器/防火墙)强制把流量重定向到代理。企业里”我明明没设代理,为什么上网行为被记录”的答案就是它。对抓包来说,Burp 也有透明代理模式(Invisible Proxy),配合 iptables 重定向可以抓不认代理的客户端。

2. HTTP 代理 vs SOCKS5

HTTP 代理 SOCKS5 代理
工作方式 用 CONNECT 方法建隧道 更底层,直接转发任意 TCP/UDP
支持协议 HTTP/HTTPS 为主 任意协议(TCP/UDP 都行)
能看到的细节 能解析 HTTP 层(可抓包) 只认 IP:端口,不关心内容
典型用途 Web 抓包、Web 调试 内网穿透、全局代理

注意:SOCKS5 是”更底层”的代理,它不解析协议,所以SOCKS5 代理本身不做抓包——它只负责搬运字节流。Burp 走的是 HTTP 代理;而内网渗透常用的 frp、chisel 等隧道工具则大量用 SOCKS5。

3. VPN vs 代理:搬运工与翻译官

很多人把 VPN 和代理混为一谈,其实对”流量观察”来说差别巨大:

维度 VPN 代理(Burp)
工作层次 网络层/传输层(整个 IP 包) 应用层(只处理特定协议)
覆盖流量 全部(含 DNS、UDP、游戏、邮件) 只看代理指向的协议
HTTPS 解密 不主动解密,只能看密文 MITM + 装证书,能看明文
中间人能力 无(不做证书伪造) 有(假证书 + 双密钥)
典型用途 内网接入、匿名 安全测试、调试

一句话:VPN 是”搬运工”,Burp 是”翻译官”。VPN 服务器作为流量出口,能看到所有经过的流量——但目标站是 HTTP 就看到明文,是 HTTPS 就只能看到密文(和任何网络节点一样)。现实中”VPN 能看到 HTTPS 明文”的场景(如企业上网行为管理),本质是网关叠加了 MITM + 预装企业证书,不是 VPN 天生能解密。没有装证书这一环,任何设备都解不开 HTTPS——这是所有流量观察手段的公共边界。

4. 转发型代理 vs 抓包型代理:搬与拆

顺着上面的对比再进一步:代理本身也分两种,对抓包的理解这是最关键的一刀。

转发型代理 抓包型代理
代表 Clash、frp、SOCKS5、VPN Burp、Yakit、Fiddler
做什么 纯搬运字节流 解析协议、读内容、改内容
需要伪装证书吗 不需要(密文原样搬) 必须(要成为 TLS 端点)
能看 HTTPS 明文吗 不能 能(装证书后)

规律:要不要伪装证书,取决于”要不要看内容”,而不是”是不是代理”。TLS 是端到端加密,转发型代理不参与握手,收到的是密文,原样搬走即可——Clash 节点服务器看到的内容和运营商看到的没有任何区别。而抓包工具本质是”代理 + 拆信能力“:它在搬运工的基础上多了一个 MITM 引擎,伪装证书、持有双密钥,才能读、能改。理解了这一层,就理解了为什么”装证书”是抓包工具绕不开的一环(第五章展开)。

5. 代理链

代理还可以串联成链:客户端 → 代理 A → 代理 B → 服务器。内网渗透里这叫多级代理/代理链,用于逐层深入目标内网;渗透时”Burp → Clash → 节点”的组合就是典型用法(既能抓包又能翻墙)。本文不展开,相关实战可参考另一篇《FRP 内网穿透与代理实战》。

四、HTTPS:加密之后抓包看到了什么

1. 为什么加密

HTTPS = HTTP + TLS(SSL 是 TLS 的前身,已淘汰)。它解决三件事:

  • 机密性:数据加密传输,防止窃听
  • 完整性:防篡改(哈希校验)
  • 身份验证:通过 CA 数字证书确认”对面真的是 example.com”

2. TLS 握手简版(五步)

握手是”加密开始前的协商”,全程发生在数据加密之前。以最常见的 ECDHE 流程为例:

TLS 握手五步时序图

1
2
3
4
5
6
客户端                                  服务器
│ ① ClientHello(TLS版本、密码套件、随机数、SNI)──▶ │
│ ② ◀── ServerHello(选定套件、自己的随机数) │
│ ③ ◀── 证书(含公钥) │
│ ④ 验证证书 → 交换 DH 参数 → 各自算出 pre-master │
│ ⑤ 派生会话密钥 → Finished ──▶(双方确认) │

三个要点:

  • SNI(Server Name Indication)在 ClientHello 里明文传输——这就是防火墙、企业网关能识别”你在访问哪个域名”的原因
  • 证书是明文下发的,因为客户端必须验证它
  • 握手完成后,双方用对称会话密钥加密数据(TLS 1.3 中 pre-master 概念被 (EC)DHE 共享密钥直接派生取代,且握手优化为 1-RTT 完成)

3. 加密后抓包看到什么:握手明文,数据密文

这是整篇文章最重要的一个认知:

TLS 阶段 抓包能看到
握手 TLS 版本、密码套件、SNI、证书(明文元数据)
数据 Application Data 记录——全部密文

在 Wireshark 里打开一个 HTTPS 包,你看到的是十六进制密文,不是 GET /login HTTP/1.1。HTTPS 的加密使”抓包”退化为”抓密文”——内容从此与旁观者无关。

4. Wireshark 怎么解:SSLKEYLOGFILE

Wireshark 能解密 HTTPS,但路径和 Burp 完全不同——它不伪装服务器,而是直接借密钥:

  1. 设置环境变量 SSLKEYLOGFILE=/path/to/keylog,启动浏览器
  2. 浏览器把每次 TLS 会话的密钥(pre-master secret)写入该文件
  3. Wireshark 的 Pre-Master-Secret log filename 指向它
  4. 重放/刷新流量,密文自动被解密成明文 HTTP

注意两个限制:只能用 SSLKEYLOGFILE,不能用服务器私钥——现代 TLS 用 ECDHE 前向保密,即使拿到服务器私钥也解不开历史流量(TLS 1.2 早期的 RSA 密钥交换时代私钥能解,已废弃);而且这种方式只能解本机浏览器自己发的流量,因为密钥只属于你自己的连接。想改包?这条路做不到,只能看。

5. HTTP/2 与 HTTP/3 对抓包的影响

现代 Web 已经进入 HTTP/2/3 时代,抓包认知要同步更新:

  • HTTP/1.1:文本协议,请求/响应逐行可读,好改好重放
  • HTTP/2:二进制分帧、多路复用。抓包工具里看到的是解码后的友好视图,不再是原始文本行,但 Burp 能正常处理
  • HTTP/3(QUIC):底层换成 UDP,不再是 TCP。Burp 默认抓不到 HTTP/3 流量——很多人在新协议站点上”工具失灵”,其实是没意识到这点。抓 HTTP/3 需要专门配置(或让站点回退到 HTTP/2)

面试如果被问”为什么有些流量抓不到”,HTTP/3 是标准答案之一。

五、中间人:为什么 Burp 还能解密 HTTPS

1. 核心机制:两段独立的 TLS

Burp 能看 HTTPS 明文,不是因为破解了 TLS,而是因为它把自己拆成了两段完全独立的 TLS 连接,夹在中间当”翻译官”:

中间人代理的两段 TLS 连接

1
2
3
         TLS #1(自签证书)            TLS #2(真实证书)
浏览器 ◀═══════════▶ Burp ◀═══════════▶ 服务器
Burp 解密见明文 重新加密转发
  • 第一段(浏览器 ↔ Burp):Burp 对浏览器假装自己是服务器,出示一张自己签发的证书。这段的会话密钥 Burp 掌握 → 明文在这里可见、可改
  • 第二段(Burp ↔ 服务器):Burp 作为普通客户端,用服务器的真实证书重新握手,把请求重新加密转发。服务器无感知

关键认知:Burp 看得到明文,是因为它本身就是第一段 TLS 的”服务器端”,而不是它破解了什么。它是两段 TLS 的端点,不是旁观者。

2. 一次 HTTPS 抓包的七步

抓包七步流程时序图

1
2
3
4
5
6
7
① 代理接管   浏览器发 CONNECT example.com:443 给 Burp(请求先到 Burp)
② 下发假证书 TLS 握手中,Burp 用自己的 CA 私钥现场签发一张 example.com 的证书
③ 信任链打通 浏览器验证失败 → 把 Burp CA 装进系统信任库(一次性)
④ TLS #1 握手完成,Burp 持私钥 → 明文可见、可改包
⑤ TLS #2 用真实证书与服务器握手,重新加密转发请求
⑥ 响应返回 服务器的 HTTPS 响应到 Burp,Burp 解密,可查看/修改
⑦ 重加密回传 改完的响应重新加密发回浏览器,浏览器正常渲染

整个流程只有第③步需要人工干预(装证书),其余全自动。

3. 双会话密钥:中间人全知全能的来源

  • 两段连接各自独立握手,各自随机生成密钥,两套密钥完全独立、互不相通
  • 浏览器只有 TLS#1 密钥,它不知道 TLS#2 的存在
  • 服务器只有 TLS#2 密钥,它认为 Burp 就是个普通客户端
  • Burp 是唯一同时持有两套密钥的一方:用 TLS#1 解开浏览器的请求 → 看/改 → 用 TLS#2 加密转发;响应方向同理

一句话:两端各信一半,中间全知全能。这就是”中间人”的技术含义。

4. 为什么必须装证书(信任链)

浏览器验证证书走的是证书信任链:

  1. Burp 需要出示一张 example.com 的证书——它没有真实的,只能用自己内置的 Burp CA 私钥临时签发一张
  2. 浏览器向上查签发者,发现”Burp CA”不在系统信任列表 → 报错 NET::ERR_CERT_AUTHORITY_INVALID,拒绝连接
  3. 安装 Burp CA 证书 = 把”Burp CA”加进系统信任库
  4. 从此 Burp 签发的任何假证书验证通过,第一段 TLS 顺利建立

所以装证书不是破解 TLS,而是让浏览器主动信任了中间人:

1
系统信任 Burp CA → Burp CA 签发假证书 → 浏览器放行

5. 为什么不能只靠”点继续访问”

有人问:证书报错时点”高级 → 继续前往”不就行了吗?其实点继续也能抓到包——因为连接依然是和 Burp 建立的,TLS 握手依然由 Burp 完成,Burp 照样看到明文。但”点继续”有四个致命局限,装证书才是正规做法:

问题 点”继续前往” 安装 CA 证书
每个新域名 都要重新点一次警告页 自动信任,全程无感
地址栏 永久显示”不安全” 正常锁形图标
非浏览器客户端 没有”继续”按钮,直接失败 系统级信任,curl/Java/Python 都过
HSTS 站点 连”继续”按钮都不给 正常抓包

最后一条最硬:HSTS(HTTP 严格传输安全)站点的响应头带 Strict-Transport-Security,浏览器会记住”这个域名永远只走 HTTPS、禁止证书例外”——遇到证书错误直接显示”连接不是私密连接”,不提供任何绕过入口。Google、GitHub 等几乎所有大厂都开 HSTS,不装证书 = 直接抓不了。

6. 证书装浏览器还是系统

取决于客户端的证书库,实战一律装系统:

客户端 用谁的证书库 装哪
Chrome / Edge 系统证书库 装系统即可
Firefox 自己的独立证书库(NSS) 必须单独装进 Firefox
curl / Java / Python 系统证书库 装系统
桌面 App 系统证书库 装系统

手机端是真正的坑:

  • Android 7.0+:App 默认只信任系统 CA,不信任用户安装的 CA——证书装到”用户证书”区对大多数 App 无效,要 root 后塞进系统区,或用 Frida 等过检测
  • iOS:装完描述文件后,还要去 设置 → 通用 → 关于本机 → 证书信任设置 手动打开”完全信任”开关

7. SSL Pinning:为什么 App 抓不到

App 里经常”抓不到包”或直接报错,因为做了 SSL Pinning(证书固定):不信任系统 CA 列表,而是硬编码了服务器证书的指纹/公钥。Burp 的假证书即使被系统信任,App 也不认。这就是为什么抓 App 要过证书校验(root + 系统证书 + Frida 绕过 Pinning)。

8. 被动嗅探 vs 主动代理

“抓包”在安全语境里其实有两个含义,别混淆:

主动代理(Burp) 被动嗅探(Wireshark 监听)
流量怎么来的 客户端主动把流量交给你 你偷听路过的流量
需要条件 配置代理 + 装证书 端口镜像 / 混杂模式 / ARP 欺骗
能改包 能 不能
HTTPS 明文 能(MITM + 证书) 不能(除非拿到密钥)
层次 应用层中间人 网络层旁路

被动嗅探的经典形态:交换机端口镜像、WiFi 监听、ARP 欺骗后的流量截获——它只能”看”,不能”改”,且 HTTPS 下基本只能看到握手元数据。

六、防御视角:如何让中间人失效

攻击讲完了,反过来说”怎么防”。所有中间人攻击的成功前提是:目标安装了你的证书,或你拿到了会话密钥。防御就是堵住这两条路:

防御手段 原理 防住了什么
HSTS 浏览器强制 HTTPS + 禁止证书例外 防降级攻击、”点继续”的侥幸心理
Certificate Pinning 客户端锁定证书/公钥,不信任系统 CA 防”装证书”式 MITM(App 场景)
SRI 子资源完整性 页面引用的 CDN 资源校验哈希 防 CDN 脚本被中间人篡改
CA 透明度(CT) CA 签发的证书强制写入公开日志 防证书被偷签(伪造 CA 证书全网可查)

一条认知收束:HTTPS 不等于绝对安全,它把”随便看”升级成了”必须突破信任链”。企业能监控员工 HTTPS 流量、恶意软件能解密银行流量,靠的都是”目标机器上装了证书”这一环——所以信任链是 HTTPS 安全模型的基石,也是唯一的薄弱点。

七、心智模型:一张图看懂所有流量观察手段

把全文收拢成一张全景图:看到 HTTPS 明文,只有两条路——

看到 HTTPS 明文的唯二路径

1
2
3
4
5
6
7
8
9
                   HTTPS 密文流量
│ │
┌─────────────┘ └─────────────┐
路径 A:中间人 MITM 路径 B:直接拿密钥
Burp / Yakit / 企业网关 Wireshark + SSLKEYLOGFILE
成为 TLS 端点(假证书+双密钥) 浏览器导出会话密钥
前提:目标必须装 CA 证书 限制:只能抓本机,不用装证书

HTTP 明文:路上任何节点直接可读,无需任何手段

汇总对照表:

手段 层次 看 HTTP 看 HTTPS 能改包
被动嗅探 网络层 明文 仅握手元数据 否
代理(Burp) 应用层 明文 MITM 后明文 是
VPN 网络层隧道 出口可见明文 仅密文 否
Wireshark + 密钥 旁路分析 明文 借密钥解密 否
上一篇
下一篇