Wireshark:HTTP、MQTT、WebSocket 抓包详细教程
目录
1 预备工作(安装 / 权限 / 驱动)
2 抓包基础设置(开始、保存与注意)
3 常用全局配置(要先打开)
4 捕获过滤器 vs 显示过滤器(快速参考)
5 HTTP 抓包与分析(详细步骤)
5.1 抓取场景
5.2 捕获 / 过滤建议
5.3 查看请求/响应
5.4 导出 HTTP 对象(静态资源、文件)
5.5 tshark / 命令行导出 HTTP 对象
5.6 常见问题
6 MQTT 抓包与分析(详细步骤)
6.1 抓取准备
6.2 捕获与过滤
6.3 查看 PUBLISH payload
6.4 tshark 提取 MQTT 信息(示例)
6.5 设备端日志 + MQTT 抓包结合
6.6 MQTT over WebSocket
7 WebSocket 抓包与分析(详细步骤)
7.1 捕获 / 过滤
7.2 跟踪会话
7.3 二进制数据(JSON / protobuf / MQTT over WS)
7.4 WebSocket over TLS(wss)
7.5 常用操作
8 HTTPS / TLS 解密(浏览器 & 客户端调试常用)
8.1 最简单、常用的方法:Pre-Master Secret 日志(适用于基于 TLS 的客户端,如浏览器)
8.2 移动 App / 原生客户端
8.3 使用私钥解密(仅适用于 RSA key exchange,且服务器使用静态 RSA 私钥)
9 抓移动设备 / IoT 设备(实践技巧)
9.1 手机 App(Android/iOS)
9.2 IoT(ESP32 / 嵌入式)
10 常用示例过滤器
11 常用 tshark(命令行)示例
12 实战流程示例(手机 App 调试一个 POST 登录请求)
13 进阶技巧与自动化
14 常见问题与排查清单
15 快速参考表
1 预备工作(安装 / 权限 / 驱动)
-
安装 Wireshark(Windows/macOS/Linux)。Windows 勾选 Npcap。
-
以管理员/root 身份运行以取得抓包权限(或在 Linux 加入
wireshark
用户组并允许运行抓包)。 -
确认目标设备与抓包电脑网络连通(同一 Wi-Fi / 局域网)或能通过端口镜像/网桥看到流量。
-
在 Wireshark 中选择正确的网卡(Wi-Fi、Ethernet、桥接接口等)。
2 抓包基础设置(开始、保存与注意)
-
开始:选择网卡 → 点击左上蓝色 ▶(或 Ctrl+E)。
-
停止:红色 ⏹(或 Ctrl+E)。
-
保存:
File → Save As
,格式.pcapng
(建议保留原始完整抓包)。 -
推荐在开始前设置 Capture Filter(捕获过滤器),减少无用数据:例如只抓 MQTT:
port 1883
;只抓 HTTP:port 80
或tcp port 80 or tcp port 443
(若不解密 TLS,则不会看到 HTTP 明文)。
3 常用全局配置(要先打开)
-
TCP 重组(非常重要)
Edit → Preferences → Protocols → TCP
→ 勾选 Allow subdissector to reassemble TCP streams(以及Reassemble out-of-order segments
)。 -
HTTP 重组
Edit → Preferences → Protocols → HTTP
→ 勾选 Reassemble HTTP bodies spanning multiple TCP segments。 -
TLS 解密(见第 7 节 HTTPS 解密)
4 捕获过滤器 vs 显示过滤器(快速参考)
-
捕获过滤器(开始抓包前):基于 BPF(libpcap),用于减少抓取流量。
-
示例:
host 192.168.1.50 and port 1883
、port 80
、tcp port 8883
。
-
-
显示过滤器(抓包后筛选):Wireshark 自有语法,更强大。
-
常用:
http
、mqtt
、websocket
、ip.addr == 192.168.1.10
、tcp.port == 443
。
-
5 HTTP 抓包与分析(详细步骤)
5.1 抓取场景
-
明文 HTTP(端口 80):能直接看到请求/响应明文。
-
HTTPS(端口 443):需要解密才能查看明文(见第 7 节)。
5.2 捕获 / 过滤建议
-
捕获过滤器(减噪):
-
只抓 Web 端口:
tcp port 80 or tcp port 443
-
-
显示过滤器(分析):
-
所有 HTTP:
http
-
GET 请求:
http.request.method == "GET"
-
POST 请求:
http.request.method == "POST"
-
特定主机:
ip.addr == 10.0.0.5 and http
-
包含关键字段(例如 JSON 关键字):
frame contains "application/json"
或frame contains "password"
-
5.3 查看请求/响应
-
右键 HTTP 包 →
Follow
→TCP Stream
(或Follow → HTTP Stream
),查看一条会话的请求和响应明文。 -
在 HTTP 包的 Detail 区可展开
Hypertext Transfer Protocol
节点查看 header 与 body 字段。
5.4 导出 HTTP 对象(静态资源、文件)
-
菜单:
File → Export Objects → HTTP
,可导出网页上的图片、JS、文件等。
5.5 tshark / 命令行导出 HTTP 对象
# 导出所有 HTTP 对象到 ./http_objects 目录
tshark -r capture.pcapng --export-objects "http,./http_objects"
5.6 常见问题
-
如果 POST body 没显示完整:检查 TCP 和 HTTP 重组是否开启(第3节)。
-
若看到 TLS 加密的 TLS Application Data:需要解密或用代理抓明文(见 7 节)。
6 MQTT 抓包与分析(详细步骤)
MQTT 是 IoT 中常用的轻量协议(默认端口 1883 明文,8883 TLS)。Wireshark 对 MQTT 支持很好,能解析 CONNECT、PUBLISH、SUBSCRIBE 等报文。
6.1 抓取准备
-
如果设备使用明文 MQTT(1883),直接在同一网段抓到流量即可。
-
若使用 TLS(8883),需做 TLS 解密或在设备/客户端启用 SSL key logging(见第 7 节)或使用 MITM(如在开发阶段改为明文或使用带证书的代理)。
6.2 捕获与过滤
-
捕获过滤器举例:
port 1883
。 -
显示过滤器:
-
所有 MQTT:
mqtt
-
PUBLISH 消息:
mqtt.msgtype == 3
-
指定主题:
mqtt.topic == "home/lock/123/events"
或mqtt.topic contains "lock"
-
指定 QoS:
mqtt.qos == 1
-
CONNECT:
mqtt.msgtype == 1
-
SUBSCRIBE:
mqtt.msgtype =
-