3、Wireshark基础:安装、界面布局、抓包过滤器与显示过滤器的区别
好,咱们进入正题。这一章我打算聊聊Wireshark最基础的东西——安装、界面长什么样,以及那个让很多人头疼的过滤器问题。你可能会说:“装个软件谁不会啊?”嗯,我当年也这么想,结果第一次装完发现抓不到包,折腾了半天才发现是权限没给对。所以咱们还是老老实实过一遍。
3.1 Wireshark的安装——别小看这一步
Wireshark的安装其实不复杂,但有几个坑我得提前告诉你。
Windows平台
去官网下载安装包,一路Next就行。但注意一点:安装过程中会提示你安装Npcap或WinPcap。我个人强烈建议选Npcap,别再用WinPcap了,那玩意儿已经很久没更新了。我在项目中遇到过,用WinPcap抓TSN流时,某些高精度时间戳根本拿不到,换成Npcap立马解决。
Linux平台
Linux下安装更简单,一条命令搞定:
sudo apt-get install wireshark # Ubuntu/Debian
sudo yum install wireshark # CentOS/RHEL
装完后记得把当前用户加到wireshark组里,不然普通用户抓不了包:
sudo usermod -a -G wireshark $USER
然后退出重新登录。嗯,这一步很多人会忘,包括我刚开始的时候。
macOS平台
用Homebrew装最省事:
brew install --cask wireshark
装完记得装ChmodBPF,不然抓包权限会出问题。你想想看,要是抓包工具连网卡都打不开,那还分析个啥?
3.2 界面布局——别被密密麻麻的窗口吓到
第一次打开Wireshark,你可能会觉得眼花缭乱。别慌,我带你捋一遍。其实核心就四个区域:
| 区域 | 名称 | 作用 |
|---|---|---|
| 顶部 | 菜单栏 + 工具栏 | 打开/保存文件、开始/停止抓包、设置过滤条件 |
| 中间上 | 数据包列表 | 显示抓到的所有数据包,一行一个 |
| 中间下 | 数据包详情 | 选中某个包后,这里展示它的协议层级结构 |
| 底部 | 数据包原始字节 | 十六进制和ASCII码显示原始数据 |
我个人习惯把数据包列表窗口拉大一点,因为TSN流里有很多字段需要看。详情窗口我一般只关注“Frame”和“Ethernet”层,时间戳和VLAN标签都在那儿。
3.3 抓包过滤器 vs 显示过滤器——这俩真不一样
好,重点来了。很多初学者会把这两个东西搞混,我当年也犯过这个错。说白了,它们的区别就一句话:
抓包过滤器: 在抓包之前设置,只抓符合条件的包,不符合的直接丢掉。
显示过滤器: 在抓包之后设置,从已经抓到的包里筛选出符合条件的包,不符合的只是隐藏起来。
你想想看,如果你在抓TSN流时,网卡上跑着几百兆的普通流量,你不设抓包过滤器,Wireshark可能会直接卡死。我就在项目中遇到过,抓了10秒钟,内存爆了,Wireshark直接崩溃。从那以后,我每次抓TSN流之前,都会先设好抓包过滤器。
抓包过滤器的写法
抓包过滤器用的是BPF(Berkeley Packet Filter)语法,比较古老,但效率极高。常用写法:
# 只抓TSN流(假设VLAN ID是100)
vlan 100
# 只抓特定MAC地址的包
ether host 00:11:22:33:44:55
# 只抓UDP端口319或320(gPTP协议)
udp port 319 or udp port 320
注意,抓包过滤器不支持协议层级嵌套,比如你不能写“vlan and udp.port==319”,得分开写。嗯,这是BPF的局限。
显示过滤器的写法
显示过滤器就灵活多了,它用的是Wireshark自己的语法,支持协议字段的深度解析。比如:
# 显示所有VLAN标签为100的包
vlan.id == 100
# 显示gPTP的Sync报文
eth.type == 0x8100 && vlan.id == 100 && udp.port == 319
# 显示时间戳异常的包(假设帧间间隔小于1微秒)
frame.time_delta < 0.000001
你看,显示过滤器可以写得很复杂,而且支持逻辑运算。我个人习惯在抓完包后,先用显示过滤器把TSN流单独拎出来,再慢慢分析。
3.4 实战对比——用例子说话
咱们拿TSN里最常见的gPTP协议举个例子。假设你只想抓VLAN 100里的gPTP报文:
用抓包过滤器:
vlan 100 and (udp port 319 or udp port 320)
这样Wireshark只会抓VLAN 100里端口319或320的包,其他包一概不要。效率最高,但缺点是如果你后来想看VLAN 200的gPTP,得重新抓。
用显示过滤器:
vlan.id == 100 && (udp.port == 319 || udp.port == 320)
这样你可以先抓所有VLAN的包,然后用显示过滤器慢慢看。灵活,但内存占用大。
我个人建议:生产环境用抓包过滤器,实验室环境用显示过滤器。为什么?因为生产环境流量大,你不想把Wireshark搞崩;实验室环境流量小,灵活更重要。
3.5 小结
这一章咱们聊了Wireshark的安装、界面布局,以及抓包过滤器和显示过滤器的区别。说白了,抓包过滤器是“事前筛选”,显示过滤器是“事后筛选”。你只要记住这个核心区别,后面分析TSN流时就不会手忙脚乱了。
下一章,我会带你实战抓一个TSN流,看看gPTP报文到底长什么样。到时候咱们再细聊。