Wireshark 抓包分析和过滤
Wireshark 抓包分析与过滤完全指南
Wireshark 是世界上最流行的网络协议分析器。它能让你捕获网络流量并深入查看数据包细节,无论你是网络管理员排查故障、开发者调试网络应用,还是安全工程师进行流量审计,掌握 Wireshark 的抓包与过滤能力,都能极大提升你的工作效率。本教程将从零开始,带你系统掌握数据包捕获、显示过滤、捕获过滤以及常见场景的分析技巧。
环境准备与基本界面
安装与首次启动
访问 www.wireshark.org 下载对应操作系统版本。安装时建议同时安装 WinPcap 或 Npcap(Windows)组件,否则 Wireshark 无法抓取网卡流量。macOS 和 Linux 系统通常通过包管理器安装即可,注意授予抓包权限。
启动后,你会看到主界面列出了本机所有网络接口。选择一个有流量的接口(例如正在上网的 Wi‑Fi 或以太网),双击即可开始实时抓包。
认识三个主要面板
抓包开始后,Wireshark 分为三个区域:
- 数据包列表(上部) :每一行是一个抓到的数据包,最多显示七列:编号、时间、源地址、目的地址、协议、长度、信息。
- 数据包详情(中部) :选中一个数据包后,以树状结构显示各层协议字段(帧、以太网、IP、TCP/UDP、应用层等)。
- 原始字节(下部) :对应包的十六进制和 ASCII 表示,选中上方某字段时对应字节会高亮。
抓住这三块关系,你就掌握了 Wireshark 分析的核心视图。
开始第一次抓包
基本抓包操作
在接口上双击后,Wireshark 立即显示流量。如果只想抓取特定来源的流量,可以在开始前设置捕获过滤器(见后文),但初次学习可以不加限制直接开始。
建议关闭其它网络应用,打开一个简单的目标,比如在浏览器访问 http://example.com,然后停止抓包(点击红色方块按钮)。此时你可以看到 DNS 查询、TCP 三次握手、HTTP 请求响应等一系列数据包。
保存与打开抓包文件
停止抓包后,通过 File → Save As 保存为 .pcap 或 .pcapng 文件。抓包文件可与他人共享,使用 Wireshark 再次打开即可离线分析,无需重新捕获。
显示过滤器:精准锁定目标数据
抓包文件可能包含大量无关流量,显示过滤器让你从已捕获的包中筛选所需,不改变抓取内容。
基本语法与常用显示过滤器
显示过滤器采用一种表达式语言,格式为 协议.字段 比较符 值,字符串用双引号,布尔运算符为 and、or、not,也可直接写 &&、||、!。
最常用的过滤器示例:
- 按 IP 地址:
ip.addr == 192.168.1.10(显示与这个 IP 通信的所有包) - 按端口:
tcp.port == 80或udp.port == 53 - 按协议:直接键入
http、dns、arp等 - 排除流量:
!arp排除所有 ARP 包 - 组合条件:
ip.src == 10.0.0.1 and tcp.dstport == 443
输入过滤器时,文本框颜色变为绿色表示语法正确,红色表示错误。
针对 HTTP/DNS 的过滤技巧
HTTP 流量常用过滤器:
http.request.method == GET— 只看 HTTP GET 请求http.response.code == 404— 查看 404 响应http.host contains "example"— 请求主机名包含 examplehttp.cookie— 提取所有包含 Cookie 的包
DNS 流量常用过滤器:
dns.flags.response == 0— 只看 DNS 查询(请求)dns.flags.response == 1— 只看 DNS 响应dns.qry.name contains "wikipedia"— 查询域名包含 wikipediadns.resp.name == "www.example.com"— 响应中匹配域名
追踪 TCP 流与会话
对某个 HTTP 或 TLS 包右键选择 Follow → TCP Stream,Wireshark 会重构完整的双向数据流,并以可读方式显示。同时自动应用显示过滤器 tcp.stream eq N,让你聚焦于此连接的所有包。这对于分析应用层协议细节尤为方便。
捕获过滤器:精确控制抓取内容
捕获过滤器在抓包开始前生效,使用 BPF(Berkeley Packet Filter) 语法。设置正确的捕获过滤器可以减少抓包文件大小并保护敏感信息。
BPF 语法速成
BPF 过滤器由原语和运算符组成:
| 过滤目标 | 语法示例 |
|---|---|
| 主机 | host 192.168.1.1 |
| 源或目标 | src 10.0.0.5、dst 8.8.8.8 |
| 网络 | net 192.168.1.0/24 |
| 端口 | port 53、tcp port 80、udp portrange 1-1024 |
| 协议 | arp、icmp、tcp、udp |
| 组合 | src host 10.0.0.3 and dst port 443 |
| 否定 | not port 22 |
在 Wireshark 主界面双击接口前,可以在“捕获过滤器”输入框填写,或通过 Capture → Options 选择接口后设定。
典型捕获过滤器场景
- 只抓与某服务器的通信:
host 93.184.216.34(example.com 的 IP) - 排除无关协议:
not arp and not stp and not dhcp - 抓取特定网段 DNS 报文:
src net 192.168.0.0/24 and udp port 53 - 抓取 VLAN 标签流量:
vlan或vlan 100
常见分析案例
诊断 TCP 连接问题
TCP 三次握手失败是常见网络故障。使用显示过滤器 tcp.flags.syn == 1 and tcp.flags.ack == 0 查看所有 SYN 包。若某个 SYN 后无对应 SYN‑ACK,可能是目标端口未开放或防火墙拦截。进一步通过 ip.addr == x.x.x.x 追踪对应 IP,并查看是否有 ICMP “destination unreachable” 包。
分析 TLS 握手指纹
现在大量流量加密,但仍可通过 Client Hello 和 Server Hello 分析协商参数。用显示过滤器 tls.handshake.type == 1 查看客户端支持的密码套件、SNI(服务器名称)等。tls.handshake.extensions_server_name 可提取域名。
定位 ARP 欺骗或重复 IP
ARP 欺骗表现为短时间内多个 MAC 地址声称同一 IP。显示过滤器 arp.duplicate-address-frame 可自动标记可能的地址冲突。结合 arp.opcode == 2(ARP 应答)手动排查。
提取文件、图片等传输内容
HTTP 明文传输可右键 HTTP 对象选择“Export Object → HTTP”,Wireshark 列出所有文件、图片、脚本等,可直接保存。对于更复杂的协议,可能需要跟随 TCP 流手动提取。
高级过滤与效率技巧
使用右键快速构建过滤条件
选中包详情中的任意字段(如 ip.src),右键选择“Apply as Filter → Selected” 立即过滤。选择“Prepare as Filter”可先填入但不立即执行,方便组合多个条件。这是最常用的操作之一。
自定义过滤栏自动补全
在显示过滤器栏输入部分单词后按 Tab 或 Ctrl+Space 会弹出补全列表,列出可用协议和字段。熟练后可快速构建复杂查询。
通过着色规则辅助分析
Wireshark 默认为不同协议着色(TCP 浅紫、HTTP 绿色等),你也可以自定义着色规则:View → Coloring Rules。例如将特定源 IP 的包加亮黄色,结合显示过滤器使用事半功倍。
使用宏和过滤器按钮
将常用过滤器添加到工具栏:点击显示过滤器右侧的“书签”图标,选择“管理过滤器”,添加并勾选“显示过滤器按钮”。之后可一键切换,适合定期执行的监控任务。
总结与学习路径
掌握 Wireshark 的核心是:先会抓、再会筛。从简单全量捕获开始,逐渐习惯用显示过滤器缩小范围,再学习 BPF 捕获过滤器精确抓取。日常排查时,推荐的四步工作流为:
- 全局浏览:抓包后先看协议层次统计(
Statistics → Protocol Hierarchy),了解流量组成。 - 问题定位:利用显示过滤器或跟踪功能锁定可疑连接。
- 对比协议细节:仔细检查 TCP 标志、应用层请求/响应码。
- 导出证据:导出相关对象或流,保存为新的抓包文件。
官方内置的 Help → Sample Captures 提供了大量可练习的实例,建议加载后尝试用不同过滤器分析,持续打磨你的 Wireshark 技能。当你能在数 GB 的流量文件中像看书一样快速定位关键信息时,你就真正掌握了网络分析的利器。