2. Wireshark 环境准备:安装、配置与过滤器设置
工欲善其事,必先利其器。做网络分析,Wireshark 就是咱们手里最趁手的家伙。这一章,我带你把这把刀磨快。
很多新手上来就抓包,结果抓了一堆乱七八糟的数据,根本看不明白。说白了,就是环境没配好,过滤器没用对。我刚开始学的时候也犯过这毛病,抓了十分钟的包,有用的就那么几条,翻得我眼都花了。
嗯,咱们一步步来。先把工具装好,再把过滤器玩明白。
2.1 Wireshark 的安装与基础配置
安装这事儿,其实没什么难度。但有几个坑,我得提前跟你说一声。
2.1.1 下载与安装
去官网下载就行,别去那些第三方站点。版本选最新的稳定版,别追 beta 版,容易出幺蛾子。
- Windows 用户:一路 Next 就行。但注意,安装到选择组件那一步时,记得勾上 Npcap。这是抓包的核心驱动,不装它,你啥也抓不到。我曾经帮一个同事排查问题,折腾了半天,结果发现他装 Wireshark 时把 Npcap 给跳过了……
- macOS 用户:建议用 Homebrew 装,命令就一行:
brew install --cask wireshark。装完记得装 ChmodBPF,不然普通用户权限不够,抓不了包。 - Linux 用户:
sudo apt install wireshark(Debian/Ubuntu)。装完会让你选是否允许非 root 用户抓包,我建议选“是”,省得每次都要 sudo。
2.1.2 基础配置
装好之后,别急着抓包。先做几个小配置,能让你的分析效率翻倍。
| 配置项 | 路径 | 推荐设置 | 说明 |
|---|---|---|---|
| 时间显示格式 | View → Time Display Format | Seconds Since Beginning of Capture | 方便看相对时间差,排查延迟问题 |
| 自动滚动 | Capture → Options → 勾选 | 关闭(抓大流量时) | 开着会卡,尤其抓几百兆的 pcap 时 |
| 列显示 | 右键列标题 → Column Preferences | 添加 Protocol、Length、Info | 默认列不够用,我习惯把 Info 拉宽 |
| 解析器设置 | Analyze → Enabled Protocols | 按需开启/关闭 | 只开你关心的协议,减少干扰 |
我个人习惯,一上来先把时间格式改成相对时间。为什么?你想想看,排查一个 UDP 丢包问题,你关心的是两个包之间隔了多少毫秒,而不是它发生在几点几分几秒。绝对时间那是事后写报告用的。
2.2 抓包过滤器:只抓你想要的
抓包过滤器,说白了就是在数据还没进 Wireshark 之前,先筛一遍。这玩意儿用的是 BPF(Berkeley Packet Filter)语法,效率极高。
我建议你养成一个好习惯:抓包之前,先想清楚你要看什么。别一股脑全抓,那样数据量太大,你的电脑扛不住,分析起来也费劲。
2.2.1 常用抓包过滤器写法
语法很简单:[协议] [方向] [类型] [值]。咱们直接看例子。
# 只抓 UDP 流量
udp
# 抓特定端口的 UDP 流量
udp port 53 # DNS 查询
udp port 123 # NTP 时间同步
udp port 67 or 68 # DHCP 请求与应答
# 抓特定主机的流量
host 192.168.1.100
src host 10.0.0.1 # 只抓源地址
dst host 172.16.0.1 # 只抓目的地址
# 组合条件
udp and host 192.168.1.1
udp and port 53 and not host 10.0.0.1
or。另外,not 关键字很有用,比如你只想看 UDP,不想被广播包干扰,可以写 udp and not broadcast。
2.2.2 实战场景:抓一个 UDP 视频流
假设你在排查一个视频会议卡顿的问题。视频流通常走 UDP,端口可能是 3478(STUN/TURN)或者自定义端口。你可以这样写:
udp and port 3478
或者,如果你知道对方 IP,直接锁死:
udp and host 203.0.113.50
这样抓下来的包,干净利落,全是你要分析的数据。
2.3 显示过滤器:在结果里精准定位
抓包过滤器是“事前筛选”,显示过滤器是“事后检索”。数据已经抓下来了,你想从里面找出特定的内容,就得靠它。
显示过滤器的语法更丰富,也更强大。它基于 Wireshark 的协议解析树,能深入到字段级别。
2.3.1 常用显示过滤器写法
| 过滤表达式 | 含义 | 示例 |
|---|---|---|
udp |
只显示 UDP 包 | 过滤掉 TCP 和其他协议 |
udp.port == 53 |
显示源或目的端口为 53 的 UDP 包 | 只看 DNS 流量 |
ip.addr == 192.168.1.1 |
显示包含该 IP 的包 | 只看与某台设备的通信 |
udp.length > 100 |
显示 UDP 载荷长度大于 100 字节的包 | 过滤掉小包,只看大包 |
dns.qry.name contains "google" |
显示 DNS 查询中包含“google”的包 | 精准定位特定域名查询 |
2.3.2 进阶用法:组合与排除
# 逻辑与
udp and ip.addr == 10.0.0.1
# 逻辑或
udp.port == 53 or udp.port == 123
# 逻辑非
udp and not icmp
# 字段比较
udp.length >= 500
# 字符串匹配
data contains "ffmpeg"
host、port 这种关键字;显示过滤器用 ip.addr、udp.port 这种带点的字段名。别搞混了,不然写半天没反应。
2.4 本章知识体系:过滤器选择逻辑
为了让你更直观地理解什么时候该用哪种过滤器,我画了张图。你一看就明白。
这张图的核心逻辑很简单:能提前过滤,就别拖到事后。但如果你不确定要抓什么,那就先全抓,再用显示过滤器慢慢找。我个人的习惯是,抓包时尽量用抓包过滤器缩小范围,分析时再用显示过滤器精确定位。两把刀配合着用,效率最高。
2.5 避坑指南:我踩过的几个坑
- 过滤器写错了没反应:检查语法。抓包过滤器用
host,显示过滤器用ip.addr。我曾经在显示过滤器里写了host 192.168.1.1,结果啥也没显示,还以为是网卡坏了…… - 抓包文件太大打不开:抓包前用抓包过滤器限制流量。如果已经抓了一大堆,可以用
editcap命令切分文件,或者用显示过滤器导出子集。 - UDP 包太多,看不清:用显示过滤器里的
udp.length字段,过滤掉那些只有几十字节的 ACK 或心跳包,只看真正的数据包。 - 颜色规则干扰判断:Wireshark 默认会给不同协议标颜色。如果你觉得颜色晃眼,可以在 View → Coloring Rules 里关掉,或者自定义一套。
好了,环境准备好了,过滤器也学会了。接下来,你就可以放心大胆地去抓包了。记住,工具是死的,人是活的。多练,多试,慢慢你就会有感觉。