3、Wireshark基础:安装、界面布局、抓包过滤器与显示过滤器的区别

好,咱们进入正题。这一章我打算聊聊Wireshark最基础的东西——安装、界面长什么样,以及那个让很多人头疼的过滤器问题。你可能会说:“装个软件谁不会啊?”嗯,我当年也这么想,结果第一次装完发现抓不到包,折腾了半天才发现是权限没给对。所以咱们还是老老实实过一遍。

3.1 Wireshark的安装——别小看这一步

Wireshark的安装其实不复杂,但有几个坑我得提前告诉你。

Windows平台

去官网下载安装包,一路Next就行。但注意一点:安装过程中会提示你安装Npcap或WinPcap。我个人强烈建议选Npcap,别再用WinPcap了,那玩意儿已经很久没更新了。我在项目中遇到过,用WinPcap抓TSN流时,某些高精度时间戳根本拿不到,换成Npcap立马解决。

避坑指南: 我曾经因为偷懒,直接点了“快速安装”,结果Npcap没装成,抓包界面一片空白。所以安装时务必勾选“Install 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标签都在那儿。

小技巧: 双击数据包列表中的某一行,可以快速展开详情窗口。我经常用这个操作来查看TSN流的时间同步信息。

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流单独拎出来,再慢慢分析。

注意: 显示过滤器不会减少内存占用。如果你抓了100万个包,即使显示过滤器只显示10个,那100万个包仍然占着内存。所以抓大流量时,一定要用抓包过滤器先做一轮筛选。

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搞崩;实验室环境流量小,灵活更重要。

我的习惯: 抓TSN流时,我一般先用抓包过滤器把VLAN ID和协议端口定死,然后抓个10秒左右。抓完后用显示过滤器做二次筛选,比如只看Sync报文或者只看Follow_Up报文。这样既高效又灵活。

3.5 小结

这一章咱们聊了Wireshark的安装、界面布局,以及抓包过滤器和显示过滤器的区别。说白了,抓包过滤器是“事前筛选”,显示过滤器是“事后筛选”。你只要记住这个核心区别,后面分析TSN流时就不会手忙脚乱了。

下一章,我会带你实战抓一个TSN流,看看gPTP报文到底长什么样。到时候咱们再细聊。