跳转至

Wireshark 网络抓包分析

一句话概述:Wireshark 是最强大的网络协议分析工具(抓包工具),实时捕获网络上的所有数据包,用图形界面分析 HTTP、TCP、DNS 等各种协议的通信细节,是网络调试和安全分析的必备工具。

核心知识点

概念白话解释
抓包捕获网络接口上经过的所有数据包
过滤器只显示你感兴趣的数据包
协议解析自动把二进制数据解析成可读的协议字段
显示过滤器抓完包后筛选显示(Display Filter)
捕获过滤器抓包时就过滤(Capture Filter),减少数据量
TCP 流把一个 TCP 连接的所有包组合在一起查看
tsharkWireshark 的命令行版本

安装配置

# 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 流

右键某个数据包 → Follow → TCP Stream
可以看到完整的 HTTP 请求和响应内容
像聊天记录一样按时间顺序显示

高级用法

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 自动分析的问题

导出数据

文件 → 导出对象 → HTTP    # 导出抓到的文件(图片、JS、CSS 等)
文件 → 导出数据包解析 → CSV  # 导出为 CSV
文件 → 导出数据包解析 → JSON  # 导出为 JSON

常见报错

报错信息原因解决方案
No interfaces found没有权限sudo 运行或加入 wireshark 组
抓不到包接口选错了确认用正确的网络接口
看到的全是 TLSHTTPS 加密了需要配置 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 文档 | 显示过滤器参考