Wireshark
2026/5/29工具工具Wireshark大约 6 分钟
Wireshark
链接
是什么
Wireshark 是一款开源的网络协议分析器,能够实时捕获和分析网络流量。它是网络故障排查、安全分析和 CTF 竞赛中最常用的工具之一。
核心功能:
- 流量捕获:实时捕获网络接口的流量
- 协议解析:支持数千种网络协议的解析
- 过滤器:强大的显示过滤器和捕获过滤器
- TCP 流跟踪:重组 TCP 会话数据
- 协议分析:深入分析各种协议的细节
- 统计功能:流量统计和协议分布分析
- 导出功能:导出捕获的数据和对象
在 CTF Misc 类题目中,Wireshark 是分析网络流量、提取隐藏数据的核心工具。
安装与配置
安装方法
# Linux
# Ubuntu/Debian
sudo apt update && sudo apt install wireshark
# CentOS/RHEL
sudo yum install wireshark wireshark-gnome
# Arch Linux
sudo pacman -S wireshark-qt
# Kali Linux(预装)
wireshark --version
# macOS
brew install wireshark
# Windows
# 从官网下载安装程序:https://www.wireshark.org/download.html
# 安装时勾选 WinPcap/Npcap权限配置
# Linux 下配置非 root 用户捕获权限
sudo usermod -aG wireshark $USER
# 重新登录后生效
# 或使用 dumpcap 权限
sudo chmod +x /usr/bin/dumpcap
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap网络接口配置
1. 启动 Wireshark
2. 选择要捕获的网络接口
3. 点击 "Start" 开始捕获
4. 使用 "Stop" 停止捕获基本用法
捕获流量
# 开始捕获
1. 选择网络接口
2. 点击 "Start" 按钮
3. 或使用快捷键 Ctrl+E
# 停止捕获
1. 点击 "Stop" 按钮
2. 或使用快捷键 Ctrl+E
# 保存捕获文件
File -> Save As -> 选择保存位置
支持格式:.pcap, .pcapng, .cap显示过滤器
# 基本过滤
ip.addr == 192.168.1.100 # IP 地址
ip.src == 192.168.1.100 # 源 IP
ip.dst == 192.168.1.100 # 目标 IP
tcp.port == 80 # TCP 端口
tcp.dstport == 80 # 目标端口
udp.port == 53 # UDP 端口
http # HTTP 协议
dns # DNS 协议
ftp # FTP 协议
ssh # SSH 协议
# 协议过滤
tcp # TCP 协议
udp # UDP 协议
icmp # ICMP 协议
arp # ARP 协议
tls # TLS 协议
ssl # SSL 协议
# 组合过滤
ip.src == 192.168.1.100 && tcp.port == 80
http.request.method == "GET"
http.request.uri contains "flag"
tcp.flags.syn == 1
tcp.flags.rst == 1
frame.len > 1000捕获过滤器
# 捕获过滤器语法(BPF 语法)
host 192.168.1.100 # 主机
src host 192.168.1.100 # 源主机
dst host 192.168.1.100 # 目标主机
port 80 # 端口
src port 80 # 源端口
dst port 80 # 目标端口
tcp # TCP 协议
udp # UDP 协议
icmp # ICMP 协议
# 组合捕获过滤器
host 192.168.1.100 and port 80
src host 192.168.1.100 and not dst port 22TCP 流跟踪
# 跟踪 TCP 流
1. 选择一个 TCP 数据包
2. 右键 -> Follow -> TCP Stream
3. 查看重组的 TCP 会话数据
# 跟踪 HTTP 流
1. 选择一个 HTTP 数据包
2. 右键 -> Follow -> HTTP Stream
3. 查看 HTTP 请求和响应
# 跟踪 UDP 流
1. 选择一个 UDP 数据包
2. 右键 -> Follow -> UDP Stream
3. 查看 UDP 会话数据协议分析
# 查看协议详情
1. 选择数据包
2. 在 Packet Details 面板中展开协议层
3. 查看每个字段的详细信息
# 常见协议层:
- Frame:帧信息
- Ethernet:以太网层
- Internet Protocol:IP 层
- Transmission Control Protocol:TCP 层
- Application Layer:应用层(HTTP、DNS 等)导出对象
# 导出 HTTP 对象
File -> Export Objects -> HTTP
# 列出所有 HTTP 传输的文件
# 选择并保存
# 导出 FTP 对象
File -> Export Objects -> FTP
# 列出所有 FTP 传输的文件
# 导出 IMF 对象(邮件)
File -> Export Objects -> IMF
# 列出所有邮件
# 导出 SMB 对象
File -> Export Objects -> SMB
# 列出所有 SMB 文件共享CTF常用技巧
搜索关键字符串
# 使用字符串搜索
1. Edit -> Find Packet
2. 选择 "String" 作为搜索类型
3. 输入搜索内容:
- flag
- key
- password
- secret
- CTF
- base64 编码的字符串
# 使用正则表达式
1. 选择 "Regular Expression" 作为搜索类型
2. 输入正则表达式:
- flag\{.*\}
- [a-zA-Z0-9+/=]{20,}提取文件
# 从 HTTP 流中提取文件
1. File -> Export Objects -> HTTP
2. 选择要提取的文件
3. 点击 "Save"
# 从 TCP 流中提取文件
1. 跟踪 TCP 流
2. 选择 "Raw" 格式
3. 保存为文件
# 使用 binwalk 分析
binwalk -e capture.pcap分析 DNS 查询
# 过滤 DNS 查询
dns.qry.name contains "flag"
dns.qry.name contains "key"
dns.qry.name contains "secret"
# 查看 DNS 响应
dns.resp.name contains "flag"
# 提取 DNS 查询的域名
# DNS 隐写可能在查询的域名中隐藏数据分析 HTTP 流量
# 过滤 HTTP 请求
http.request
http.request.method == "GET"
http.request.method == "POST"
# 查看 HTTP 请求参数
http.request.uri contains "flag"
http.request.uri contains "key"
# 查看 HTTP 响应
http.response
http.response.code == 200
# 提取 HTTP 传输的文件
File -> Export Objects -> HTTP分析 FTP 流量
# 过滤 FTP 流量
ftp
ftp-data
# 查看 FTP 命令
ftp.request.command
# 跟踪 FTP 数据流
1. 选择 FTP 数据包
2. 右键 -> Follow -> TCP Stream
3. 查看传输的文件内容
# 提取 FTP 传输的文件
File -> Export Objects -> FTP分析 ICMP 流量
# 过滤 ICMP 流量
icmp
# 查看 ICMP 数据
# ICMP 隐写可能在数据字段中隐藏信息
# 提取 ICMP 数据
# 检查 ICMP 数据包的 payload分析无线流量
# 过滤无线流量
wlan
wlan.fc.type == 0 # 管理帧
wlan.fc.type == 1 # 控制帧
wlan.fc.type == 2 # 数据帧
# 提取无线密码
# 捕获 WPA 四次握手
eapol使用统计功能
# 协议分布统计
Statistics -> Protocol Hierarchy
# 会话统计
Statistics -> Conversations
# 端点统计
Statistics -> Endpoints
# HTTP 请求统计
Statistics -> HTTP -> Requests
# DNS 查询统计
Statistics -> DNS流量重组
# 重组 TCP 流
1. 选择 TCP 数据包
2. 右键 -> Follow -> TCP Stream
3. 查看重组的数据
# 重组 HTTP 流
1. 选择 HTTP 数据包
2. 右键 -> Follow -> HTTP Stream
3. 查看完整的 HTTP 请求和响应时间分析
# 查看时间线
View -> Time Display Format
# 计算时间差
1. 选择两个数据包
2. 查看时间戳差异
# 分析时间间隔
Statistics -> IO Graphs使用命令行工具
# 使用 tshark(Wireshark 的命令行版本)
tshark -r capture.pcap
# 过滤输出
tshark -r capture.pcap -Y "http.request"
# 提取特定字段
tshark -r capture.pcap -T fields -e http.request.uri
# 统计协议分布
tshark -r capture.pcap -q -z io,phs
# 提取 HTTP 文件
tshark -r capture.pcap --export-objects http,export_dir常见问题
无法捕获流量
原因:权限不足或接口选择错误。
解决:
# 检查权限
sudo wireshark
# 或配置用户权限
sudo usermod -aG wireshark $USER捕获文件过大
解决:
- 使用捕获过滤器减少数据量
- 使用环形缓冲区
- 分段捕获
过滤器语法错误
解决:
- 使用 Wireshark 的过滤器自动补全
- 参考过滤器语法文档
- 使用过滤器表达式构建器
无法解析特定协议
解决:
- 检查协议是否已启用
- 更新 Wireshark 到最新版本
- 使用自定义协议解析器
性能问题
解决:
- 使用捕获过滤器
- 增加缓冲区大小
- 关闭不必要的协议解析
- 使用 tshark 命令行工具
无法提取文件
解决:
- 手动跟踪 TCP 流
- 使用 binwalk 分析
- 编写自定义提取脚本
中文显示乱码
解决:
- 设置正确的字符编码
- Edit -> Preferences -> Protocols -> 选择协议 -> 设置编码