Wireshark 从入门到精通

Wireshark 从入门到精通
知闲Wireshark 从入门到精通:事无巨细的使用操作全指南
一、Wireshark 核心介绍
Wireshark 是一款开源免费的网络协议分析工具,被誉为「网络安全领域的瑞士军刀」,支持 Windows、macOS、Linux 全平台,核心功能包括:
协议解析:支持超过 1000 种协议(TCP/IP、HTTP、DNS、MQTT 等)
实时捕获:监控网络接口流量,记录数据包完整信息
深度分析:协议层级拆解、流量统计、会话重组
适用场景:网络故障排查、安全攻击检测、协议学习、性能优化
二、安装与环境配置
2.1 下载与安装
Windows 系统
macOS 系统
方法 1:终端命令安装(需先安装 Homebrew)
brew install wireshark |
方法 2:官网下载 .dmg 安装包,拖拽至应用程序文件夹
Linux 系统
- Debian/Ubuntu 系列:
sudo apt update && sudo apt install wireshark -y |
- RedHat/CentOS 系列:
sudo yum install wireshark -y |
2.2 权限配置(关键!)
Linux 特殊配置
普通用户默认无抓包权限,需加入 wireshark 用户组:
\# 添加用户到 wireshark 组 |
Windows/macOS 权限
Windows:管理员身份运行可捕获所有接口流量
macOS:首次启动需输入系统密码授权网络访问
三、主界面深度解析
启动 Wireshark 后,界面分为 6 大核心区域,从上到下依次为:
| 区域名称 | 功能说明 |
|---|---|
| 菜单栏 | 包含所有功能(文件、捕获、分析、统计等) |
| 工具栏 | 快捷操作按钮(开始 / 停止捕获、保存、过滤、搜索等) |
| 接口列表 | 显示可用网络接口(Wi-Fi、以太网、虚拟机网卡等),标注实时流量速率 |
| 捕获过滤器栏 | 抓包前设置过滤条件(如 tcp port 80),减少无用数据 |
| 数据包列表区 | 显示捕获到的数据包摘要(序号、时间、源地址、目标地址、协议、长度、信息) |
| 数据包详情区 | 选中数据包后,按协议层级展开解析(物理层→数据链路层→网络层→应用层) |
| 数据包字节区 | 显示数据包原始数据(十六进制 + ASCII 格式) |
3.1 关键区域操作技巧
接口列表:右键接口可选择「捕获选项」,配置抓包参数
数据包列表:双击列标题可排序(如按时间、协议);右键可添加自定义列(如持续时间)
数据包详情:点击「+」展开协议层级,选中字段时字节区对应位置会高亮
工具栏快捷键:
开始捕获:
Ctrl + E停止捕获:
Ctrl + E(再次按下)保存文件:
Ctrl + S搜索数据包:
Ctrl + F
四、基础操作:捕获数据包
4.1 标准捕获流程(新手必学)
- 选择接口:在接口列表中,勾选当前正在使用的网络接口(如连接互联网的 Wi-Fi)
- 技巧:看接口右侧的实时流量数值,选择有数据流动的接口
设置捕获过滤器(可选):在过滤器栏输入规则(如仅捕获 HTTP 流量
tcp port 80)开始捕获:点击工具栏「鲨鱼鳍」按钮,或按
Ctrl + E产生网络流量:打开浏览器访问网页、发送微信消息等
停止捕获:点击工具栏红色方块按钮,或再次按
Ctrl + E保存捕获文件:
菜单选择「File → Save」
格式默认
pcapng(推荐,支持更多元数据),也可选择兼容格式pcap命名规范:
日期_接口_用途.pcapng(如20251001_WiFi_HTTP分析.pcapng)
4.2 高级捕获设置
打开捕获选项:菜单「Capture → Options」(快捷键
Ctrl + K)关键配置项:
捕获接口:勾选需要监控的多个接口(如同时捕获 Wi-Fi 和以太网)
捕获过滤器:输入 BPF 语法规则(下文详细讲解)
缓冲区大小:默认 2MB,大流量场景建议调整为 10-20MB
捕获文件轮转:设置文件大小上限(如 100MB),自动分割多文件
时间戳精度:默认毫秒,可调整为微秒(适用于高精度分析)
- 点击「Start」开始捕获
五、核心技能:过滤器语法大全
Wireshark 过滤器分为 捕获过滤器(抓包前过滤)和 显示过滤器(抓包后筛选),是高效分析的核心,必须熟练掌握!
5.1 捕获过滤器(BPF 语法)
基于 Berkeley Packet Filter 语法,仅捕获符合条件的数据包,减少数据量。
基本语法结构
协议 + 方向 + 条件 |
常用协议关键字
tcp、udp、ip、arp、icmp、http、dns、ftp
方向关键字
src(源)、dst(目标)、host(主机,含源和目标)、net(网段)
常用示例(直接复制使用)
| 需求 | 过滤规则 |
|---|---|
| 仅捕获 HTTP 流量(端口 80) | tcp port 80 |
| 仅捕获 HTTPS 流量(端口 443) | tcp port 443 |
| 捕获与 192.168.1.100 的通信 | host 192.168.1.100 |
| 捕获源 IP 为 10.0.0.5 的流量 | ip src 10.0.0.5 |
| 捕获目标网段为 192.168.0.0/24 | ip dst net 192.168.0.0/24 |
| 捕获 ICMP 协议(ping 包) | icmp |
| 排除广播包 | not broadcast |
| 同时捕获 HTTP 和 DNS 流量 | tcp port 80 or udp port 53 |
5.2 显示过滤器(Wireshark 自定义语法)
抓包后筛选已捕获的数据包,支持更复杂的条件组合,语法更灵活。
基本语法结构
协议.字段 运算符 值 |
核心运算符
| 运算符 | 含义 | 示例 |
|---|---|---|
| == | 等于 | http.request.method == "GET" |
| != | 不等于 | ip.src != 192.168.1.1 |
| > | 大于 | tcp.window_size > 1024 |
frame.len 100 |
||
| >= | 大于等于 | icmp.type >= 8 |
| 小于等于 | dns.response.time 0.1 |
|
| and | 逻辑与 | tcp.port == 80 and ip.src == 192.168.1.10 |
| or | 逻辑或 | http or https |
| not | 逻辑非 | not arp |
| contains | 包含 | http.request.uri contains "login" |
常用字段速查
| 协议 | 常用字段 | 说明 |
|---|---|---|
| IP | ip.src、ip.dst、ip.addr | 源 IP、目标 IP、任意 IP |
| TCP | tcp.srcport、tcp.dstport | 源端口、目标端口 |
| HTTP | http.request.method | 请求方法(GET/POST/PUT/DELETE) |
| HTTP | http.response.code | 响应状态码(200/404/500) |
| DNS | dns.qry.name | DNS 查询域名 |
| DNS | dns.flags.response | 是否为响应包(1 = 响应,0 = 查询) |
| TCP | tcp.flags.syn | SYN 标志位(1 = 设置) |
| TCP | tcp.analysis.retransmission | TCP 重传包(1 = 重传) |
高频使用示例(直接复制)
筛选所有 HTTP GET 请求:
http.request.method == "GET"筛选 404 错误响应:
http.response.code == 404筛选来自特定 IP 的 HTTPS 流量:
ip.src == ``192.168.1.5`` and tcp.port == 443筛选 DNS 查询
www.baidu.com:dns.qry.name == "``www.baidu.com``"筛选 TCP 三次握手的 SYN 包:
tcp.flags.syn == 1 and tcp.flags.ack == 0筛选 TCP 重传包(网络故障排查):
tcp.analysis.retransmission筛选包含登录关键词的 HTTP 请求:
http.request.uri contains "login"筛选特定 MAC 地址的流量:
eth.addr == 00:11:22:33:44:55
过滤器使用技巧
输入时按
Ctrl + Space自动补全字段点击过滤器栏右侧「表达式」按钮,打开可视化编辑器(新手友好)
常用过滤器可保存为书签:点击过滤器栏「保存」按钮,命名后下次直接选择
六、数据包分析实战
6.1 基础分析流程
定位目标数据包:通过显示过滤器筛选感兴趣的流量(如
http)查看数据包详情:双击数据包,在详情区展开协议层级
物理层:查看 MAC 地址、帧长度
网络层:查看 IP 地址、TTL、协议类型
传输层:查看端口号、序列号、确认号、标志位
应用层:查看 HTTP 头、DNS 查询内容等
- 原始数据对照:在字节区查看十六进制和 ASCII 格式的原始数据,验证协议字段
6.2 关键协议分析示例
示例 1:TCP 三次握手分析
TCP 三次握手是建立连接的核心过程,通过 Wireshark 可直观观察:
过滤条件:
tcp.flags.syn == 1 or tcp.flags.ack == 1分析步骤:
第 1 包(SYN):客户端 → 服务器,
tcp.flags.syn == 1,Seq=0第 2 包(SYN+ACK):服务器 → 客户端,
tcp.flags.syn == 1 and tcp.flags.ack == 1,Ack=1第 3 包(ACK):客户端 → 服务器,
tcp.flags.ack == 1,Ack=1
- 异常判断:若缺少某一步,可能是网络丢包或端口未开放
示例 2:HTTP 请求与响应分析
过滤条件:
http选中 HTTP 请求包,详情区展开:
Hypertext Transfer Protocol→ 查看请求方法、URI、协议版本Request Headers→ 查看 User-Agent、Cookie、Host 等
- 找到对应的响应包(同一 TCP 流):
查看
Response Code(200 = 成功,500 = 服务器错误)查看
Response Headers中的Content-Type(数据类型)展开
Line-based text data查看响应正文(如 HTML 内容)
6.3 追踪完整流(核心功能)
当数据包被分片传输时,需重组为完整流查看:
- 右键选中任意数据包 → 选择「Follow」→ 按需选择流类型:
TCP Stream:重组 TCP 会话(适用于 HTTP、HTTPS)HTTP Stream:直接查看 HTTP 完整请求 / 响应UDP Stream:重组 UDP 会话(适用于 DNS、VOIP)
- 流窗口操作:
顶部可切换不同流(Stream 0、Stream 1…)
可选择显示格式:
ASCII(文本)、Hex Dump(十六进制)、C Arrays(代码数组)点击「Save As」可导出完整流内容
- 应用场景:
分析完整的 HTTP 通信内容(如表单提交数据)
查看 FTP 文件传输的完整数据
排查 API 调用的请求参数和响应结果
七、高级功能:从入门到精通
7.1 统计功能详解
Wireshark 提供强大的统计工具,快速掌握网络整体状况:
7.1.1 协议分布统计
操作:菜单「Statistics → Protocol Hierarchy」
作用:查看各协议占比(如 HTTP 占 30%、TCP 占 50%)
应用:识别网络主要流量类型,定位异常协议
7.1.2 端点统计
操作:菜单「Statistics → Endpoints」
选项卡:
Ethernet:MAC 地址通信统计(识别接入设备)IP:IP 地址通信统计(查看流量 Top IP)TCP:端口通信统计(识别常用服务端口)
应用:快速定位流量最大的设备或端口
7.1.3 会话统计
操作:菜单「Statistics → Conversations」
作用:显示设备间的通信会话(如 192.168.1.5 ↔ 203.0.113.10)
可按流量大小排序,识别最活跃的通信对
7.1.4 I/O 图表(流量可视化)
操作:菜单「Statistics → I/O Graph」
配置:
X 轴:时间(默认秒)
Y 轴:数据包数量 / 字节数
可添加多条曲线(如 TCP 流量、UDP 流量)
应用:直观观察流量波动,识别峰值或异常中断
7.2 自定义颜色规则
通过颜色快速区分不同流量,提升分析效率:
打开颜色规则:菜单「View → Coloring Rules」
系统默认规则:
红色:TCP 重传、错误包
蓝色:HTTP 流量
绿色:TCP 正常连接
- 自定义规则(示例):
点击「New」→ 命名「DNS 查询」
过滤条件:
dns.flags.response == 0选择颜色(如黄色)→ 点击「OK」
- 应用:所有 DNS 查询包会显示为黄色,一目了然
7.3 自定义协议解析
当 Wireshark 无法识别特定端口的协议时,手动指定解析方式:
右键选中数据包 → 选择「Decode As」
在弹出窗口中:
Current:当前识别的协议(如 TCP)Destination:选择目标协议(如 HTTP)Apply:应用到当前会话Save:保存为默认规则
- 示例:将端口 8080 的流量解析为 HTTP(
Decode As → HTTP)
7.4 HTTPS 流量解密(关键技能)
HTTPS 流量默认加密,需配置密钥才能解密:
方法 1:通过浏览器导出 SSL 密钥(推荐)
- 配置浏览器环境变量(以 Chrome 为例):
Windows:右键「此电脑」→「属性」→「高级系统设置」→「环境变量」→ 新建系统变量:
变量名:
SSLKEYLOGFILE变量值:
C:\sslkeylog.log(任意路径)
macOS/Linux:终端执行(临时生效):
export SSLKEYLOGFILE=\~/sslkeylog.log |
重启浏览器,访问 HTTPS 网站(如百度),浏览器会自动生成密钥文件
Wireshark 配置:
菜单「Edit → Preferences → Protocols → TLS」(旧版本为 SSL)
点击「Browse」选择生成的
sslkeylog.log文件点击「OK」生效
- 重新捕获 HTTPS 流量,即可看到解密后的 HTTP 内容
方法 2:导入服务器私钥(需拥有服务器权限)
获得服务器 SSL 证书私钥(如
server.key)Wireshark 配置:
菜单「Edit → Preferences → Protocols → TLS」
点击「Add」→ 选择私钥文件,填写对应端口(如 443)
点击「OK」
- 捕获该服务器的 HTTPS 流量,自动解密
7.5 命令行工具:tshark
Wireshark 的命令行版本,适用于服务器环境或自动化脚本:
常用命令示例
- 捕获 eth0 接口的 HTTP 流量并保存:
tshark -i eth0 -f "tcp port 80" -w http\_capture.pcapng |
- 读取捕获文件,筛选 HTTP GET 请求并输出:
tshark -r http\_capture.pcapng -Y "http.request.method == 'GET'" |
- 实时显示 DNS 查询内容:
tshark -i wlan0 -f "udp port 53" -T fields -e dns.qry.name |
- 统计捕获文件中的协议分布:
tshark -r capture.pcapng -z io,phs |
核心参数说明
-i:指定网络接口(如 eth0、wlan0)-f:捕获过滤器(BPF 语法)-w:保存捕获文件-r:读取已保存的捕获文件-Y:显示过滤器(Wireshark 语法)-T fields -e 字段:自定义输出字段-z:统计选项
八、常见问题与解决方案
8.1 捕获不到数据包
问题原因与解决:
选择错误接口:确认选择的接口是当前正在使用的(如连 Wi-Fi 却选了以太网)
权限不足:
Linux:未加入 wireshark 用户组(重新执行
sudo usermod -aG wireshark $USER并重启)Windows:未以管理员身份运行
- 混杂模式未开启:
捕获选项中勾选「Promiscuous Mode」(默认开启)
部分无线网络适配器不支持混杂模式,切换为有线网络尝试
- 防火墙拦截:暂时关闭系统防火墙或杀毒软件
8.2 过滤器语法错误
常见错误与修正:
- 显示过滤器使用单等号
=而非双等号==:
错误:
ip.src = ``192.168.1.1正确:
ip.src == ``192.168.1.1
- 字符串未加引号:
错误:
http.request.method == GET正确:
http.request.method == "GET"
- 捕获过滤器使用显示过滤器语法:
错误(捕获过滤器):
ip.src == ``192.168.1.1正确(捕获过滤器):
ip src ``192.168.1.1
- 字段名错误:
错误:
tcp.sourceport == 80正确:
tcp.srcport == 80(使用自动补全避免错误)
8.3 无法解密 HTTPS 流量
排查步骤:
确认 SSL 密钥文件路径正确,且文件有内容(浏览器需重新访问网站生成)
确认 Wireshark 版本支持 TLS 解密(建议使用 3.0 以上版本)
部分网站使用 TLS 1.3 协议,需 Wireshark 3.2+ 版本支持
检查是否为代理环境(如 VPN、代理服务器),需在代理客户端配置密钥
8.4 捕获文件过大,打开卡顿
优化方案:
抓包前设置捕获过滤器,减少无用数据
抓包时使用「文件轮转」功能(捕获选项中设置文件大小上限)
打开大文件时,先使用显示过滤器筛选核心数据,再导出为新文件:
菜单「File → Export Specified Packets」
选择「Displayed」(仅导出当前显示的数据包)
保存为新文件,打开速度大幅提升
- 关闭不必要的功能:菜单「View → Uncheck “Name Resolution”」(关闭名称解析)
九、实战场景案例
案例 1:网页加载缓慢排查
捕获浏览器访问目标网页的流量(过滤
http or https)分析 DNS 解析:
过滤
dns.qry.name == "目标域名"查看 DNS 响应时间(数据包列表「Time」列,单位秒)
若响应时间 >0.5 秒,可能是 DNS 解析缓慢
- 分析 TCP 重传:
过滤
tcp.analysis.retransmission若存在大量重传包,说明网络丢包或拥塞
- 分析 HTTP 响应:
追踪 HTTP 流,查看服务器响应时间
查看响应正文大小,若过大可能是资源未压缩
案例 2:检测 ARP 欺骗攻击
ARP 欺骗会导致流量劫持,通过 Wireshark 快速检测:
捕获局域网流量(过滤
arp)观察 ARP 响应包:
正常 ARP 响应:
arp.isgratuitous == 0,源 MAC 地址与 IP 匹配欺骗 ARP 响应:同一 IP 对应多个 MAC 地址,或陌生 MAC 地址响应网关 IP
- 过滤条件:
arp.opcode == 2(仅显示 ARP 响应包),持续监控是否有异常响应
案例 3:IoT 设备 MQTT 通信分析
确保 Wireshark 与 IoT 设备在同一局域网
捕获过滤器:
tcp.port == 1883(MQTT 默认端口)分析 MQTT 协议:
过滤
mqtt查看所有 MQTT 数据包查看
mqtt.topic字段(设备订阅 / 发布的主题)查看
mqtt.payload字段(消息内容,需根据设备协议解析)
十、学习资源与工具推荐
10.1 官方资源
官方论坛:Wireshark Community
10.2 书籍推荐
《Wireshark 网络分析的艺术》(入门经典)
《Wireshark 网络分析实战》(案例丰富)
《TCP/IP 协议详解 卷 1》(配合协议学习)
10.3 练习资源
官方示例捕获文件:Wireshark Sample Captures
网络安全练习平台:Hack The Box、TryHackMe(含 Wireshark 分析题目)
十一、总结
Wireshark 的核心价值在于「将抽象的网络协议可视化」,掌握它的关键是:
熟练区分捕获过滤器和显示过滤器的用法
理解常见协议的结构(如 TCP 三次握手、HTTP 请求格式)
结合实际场景多练习(如排查网络故障、分析协议交互)
从基础抓包到高级分析,建议按以下步骤进阶:
入门:安装配置 → 基础抓包 → 简单过滤
进阶:协议分析 → 流追踪 → 统计功能
精通:HTTPS 解密 → 自定义规则 → 命令行自动化
多在实际场景中练习(如分析自己的浏览器流量、排查家庭网络故障),才能真正将工具转化为技能!
