Wireshark 网络抓包分析¶
一句话概述:Wireshark 是最强大的网络协议分析工具(抓包工具),实时捕获网络上的所有数据包,用图形界面分析 HTTP、TCP、DNS 等各种协议的通信细节,是网络调试和安全分析的必备工具。
核心知识点¶
| 概念 | 白话解释 |
|---|---|
| 抓包 | 捕获网络接口上经过的所有数据包 |
| 过滤器 | 只显示你感兴趣的数据包 |
| 协议解析 | 自动把二进制数据解析成可读的协议字段 |
| 显示过滤器 | 抓完包后筛选显示(Display Filter) |
| 捕获过滤器 | 抓包时就过滤(Capture Filter),减少数据量 |
| TCP 流 | 把一个 TCP 连接的所有包组合在一起查看 |
| tshark | Wireshark 的命令行版本 |
安装配置¶
# Ubuntu/Debian
sudo apt install wireshark # 安装图形界面版
sudo apt install tshark # 只安装命令行版
# 允许非 root 用户抓包
sudo usermod -aG wireshark $USER # 把当前用户加入 wireshark 组
# 需要重新登录生效
# macOS
brew install --cask wireshark
# 启动
wireshark # 打开图形界面
基本使用¶
开始抓包¶
1. 打开 Wireshark
2. 选择网络接口(eth0 / wlan0 / lo)
3. 双击接口名开始抓包
4. 做你要分析的操作(比如访问网页、调 API)
5. 点工具栏的红色方块停止抓包
显示过滤器(最常用)¶
# 按协议过滤
http # 只看 HTTP 流量
tcp # 只看 TCP
udp # 只看 UDP
dns # 只看 DNS 查询
tls # 只看 TLS/SSL
icmp # 只看 Ping
# 按 IP 过滤
ip.addr == 192.168.1.1 # 源或目标 IP
ip.src == 192.168.1.1 # 源 IP
ip.dst == 10.0.0.1 # 目标 IP
!(ip.addr == 192.168.1.1) # 排除某 IP
# 按端口过滤
tcp.port == 80 # TCP 80 端口
tcp.port == 443 # HTTPS
tcp.dstport == 3000 # 目标端口 3000
udp.port == 53 # DNS
# 按 HTTP 过滤
http.request.method == "GET" # HTTP GET 请求
http.request.method == "POST" # HTTP POST 请求
http.response.code == 200 # HTTP 200 响应
http.response.code >= 400 # HTTP 错误响应
http.host == "example.com" # 特定域名
http.request.uri contains "/api" # URL 包含 /api
# 组合过滤
http && ip.addr == 192.168.1.1 # HTTP 且指定 IP
tcp.port == 80 || tcp.port == 443 # 80 或 443 端口
http.request && !(http.host == "cdn.example.com") # HTTP 请求排除 CDN
查看数据包详情¶
数据包列表(上面板):
- No. 序号
- Time 时间
- Source 源 IP
- Destination 目标 IP
- Protocol 协议
- Info 摘要信息
协议详情(中面板):
- Frame: 物理层信息
- Ethernet: 数据链路层
- Internet Protocol: IP 层
- Transmission Control Protocol: TCP 层
- Hypertext Transfer Protocol: HTTP 层
原始数据(下面板):
- 十六进制 + ASCII 显示
跟踪 TCP 流¶
高级用法¶
tshark 命令行抓包¶
# 列出可用接口
tshark -D # 显示所有网络接口
# 抓包
sudo tshark -i eth0 # 在 eth0 上抓包
sudo tshark -i eth0 -c 100 # 只抓 100 个包
sudo tshark -i eth0 -w capture.pcap # 保存到文件
# 带过滤器抓包
sudo tshark -i eth0 -f "port 80" # 捕获过滤器
sudo tshark -i eth0 -Y "http.request" # 显示过滤器
# 读取抓包文件
tshark -r capture.pcap # 读取并显示
tshark -r capture.pcap -Y "http.request" -T fields -e http.host -e http.request.uri # 提取特定字段
常用分析技巧¶
# 分析 TCP 连接问题
tcp.analysis.retransmission # 重传(网络丢包)
tcp.analysis.duplicate_ack # 重复 ACK
tcp.analysis.zero_window # 零窗口(接收方处理不过来)
tcp.analysis.reset # 连接被重置
# 分析 DNS
dns.qry.name == "example.com" # DNS 查询特定域名
dns.flags.response == 1 # 只看 DNS 响应
# 分析延迟
统计 → IO 图表 # 查看流量随时间的变化
统计 → 会话 # 查看各连接的统计信息
统计 → 端点 # 查看通信端点
分析 → 专家信息 # Wireshark 自动分析的问题
导出数据¶
常见报错¶
| 报错信息 | 原因 | 解决方案 |
|---|---|---|
No interfaces found | 没有权限 | sudo 运行或加入 wireshark 组 |
| 抓不到包 | 接口选错了 | 确认用正确的网络接口 |
| 看到的全是 TLS | HTTPS 加密了 | 需要配置 SSL key 才能解密 |
| 抓包文件太大 | 没限制大小 | 用 -c 限制包数或 -a filesize:100000 |
| 过滤器语法错误 | 写错了 | 检查过滤器颜色(绿色=正确,红色=错误) |
速查表¶
# tshark 命令行
tshark -D # 列出接口
tshark -i <接口> # 抓包
tshark -i <接口> -c <数量> # 限制包数
tshark -i <接口> -w <文件> # 保存文件
tshark -r <文件> # 读取文件
tshark -r <文件> -Y "<过滤器>" # 过滤显示
# 常用显示过滤器
http / dns / tcp / udp / tls / icmp # 按协议
ip.addr == x.x.x.x # 按 IP
tcp.port == 80 # 按端口
http.request.method == "POST" # HTTP 方法
http.response.code == 500 # HTTP 状态码
frame.len > 1000 # 包大小
tcp.flags.syn == 1 # SYN 包(连接建立)
tcp.flags.fin == 1 # FIN 包(连接关闭)
# 快捷键(GUI)
Ctrl+E # 开始/停止抓包
Ctrl+F # 查找包
Ctrl+G # 跳转到指定包号
Ctrl+Shift+F # 跟踪 TCP 流
# ⚠️ 法律提醒
# 只抓你有权限分析的网络流量
# 抓取他人网络通信可能违法
参考:Wireshark 官网 | Wireshark 文档 | 显示过滤器参考