4、Wireshark基础操作:界面介绍、抓包过滤器设置、显示过滤器语法、数据包着色规则、跟踪流功能
好,咱们进入实战环节了。前面几章讲了MAVLink协议的原理和报文结构,但说实话,光看文档是学不会抓包的。你得亲手打开Wireshark,看着那些花花绿绿的报文在屏幕上滚动,才能真正理解无人机和地面站之间是怎么“对话”的。
这一章,我就带你过一遍Wireshark最核心的几个操作。嗯,都是我在项目里天天用的东西,一个都跑不掉。
4.1 Wireshark界面介绍
第一次打开Wireshark,你可能会觉得有点懵。菜单栏、工具栏、过滤栏、数据包列表、详情面板、字节面板……东西太多了。别急,我帮你拆开看。
我个人习惯把界面分成三个区域:
- 数据包列表区(Packet List):最上面那块,显示所有抓到的包。每一行就是一个包,有编号、时间、源地址、目的地址、协议、长度、信息摘要。
- 数据包详情区(Packet Details):中间那块,选中某个包后,这里会展开它的协议栈。从物理层到应用层,一层层剥开给你看。
- 数据包字节区(Packet Bytes):最下面那块,显示原始二进制数据。左边是十六进制,右边是ASCII字符。
你想想看,这三个区域其实是联动的。你在详情区点一下某个字段,字节区对应的字节就会高亮。反过来,你在字节区点一下,详情区也会跳到对应的位置。这个功能在分析MAVLink报文时特别有用——我经常用它来快速定位某个字段在原始数据里的位置。
4.2 抓包过滤器设置
抓包过滤器,说白了就是“抓之前”的筛选。它的作用是在数据进入Wireshark之前就把它过滤掉,只保留你关心的流量。这个和显示过滤器不一样,后面我会讲。
抓包过滤器用的是BPF(Berkeley Packet Filter)语法。嗯,听起来有点吓人,但其实常用的就那么几个。
我举个例子。假设你只想抓无人机和地面站之间的UDP流量:
udp port 14550
如果你知道地面站的IP地址,可以更精确:
host 192.168.1.100 and udp port 14550
如果你想抓多个端口:
udp port 14550 or udp port 14555
设置方法很简单:在Wireshark主界面的抓包过滤器栏(Capture Filter)里输入表达式,然后点击旁边的“开始”按钮。或者,你也可以在“Capture”菜单里选择“Options”,在弹窗里设置。
我个人建议,如果你是在无人机飞行的现场抓包,最好把过滤器设得宽一点。比如只过滤IP地址,不要过滤端口。为什么?因为有时候地面站软件会动态切换端口,你设死了端口反而会漏掉数据。我遇到过好几次这种情况,后来学乖了。
4.3 显示过滤器语法
显示过滤器是“抓之后”的筛选。数据已经全部抓进来了,你想从里面挑出你关心的部分。这个比抓包过滤器灵活得多,语法也更丰富。
常用的显示过滤器表达式:
| 用途 | 表达式 | 说明 |
|---|---|---|
| 只看MAVLink协议 | mavlink |
显示所有MAVLink报文 |
| 只看心跳包 | mavlink.msgid == 0 |
MSG_ID 0 就是HEARTBEAT |
| 只看GPS数据 | mavlink.msgid == 24 |
MSG_ID 24 是GLOBAL_POSITION_INT |
| 只看某个系统ID | mavlink.sysid == 1 |
系统ID为1的无人机 |
| 组合条件 | mavlink.msgid == 0 and mavlink.sysid == 1 |
系统1的心跳包 |
你可能会问:“我怎么知道MSG_ID对应什么报文?”嗯,这个问题问得好。你可以查MAVLink的官方定义,也可以在Wireshark里直接看——选中一个MAVLink包,在详情区展开,找到“Message ID”字段,旁边就会显示报文名称。
显示过滤器还支持比较操作符:==、!=、>、<、>=、<=。比如你想看长度大于50字节的MAVLink包:
mavlink.len > 50
或者你想排除心跳包(因为心跳包太频繁了,有时候会干扰视线):
mavlink and not mavlink.msgid == 0
4.4 数据包着色规则
Wireshark默认会给不同协议的数据包涂上不同的颜色。比如TCP是淡紫色,UDP是淡蓝色,MAVLink默认是浅绿色。这个功能看着不起眼,但在实际抓包时特别有用。
你想想看,几百个包在屏幕上滚动,如果没有颜色区分,你根本找不到重点。有了颜色,一眼就能看出哪些是MAVLink包,哪些是其他协议的包。
Wireshark的着色规则是可以自定义的。我个人习惯给MAVLink的心跳包单独设一个颜色——比如亮黄色。这样在大量数据中,我能快速判断无人机是否还在“活着”。
设置方法:
- 点击菜单栏的“View” → “Coloring Rules”
- 在弹出的窗口里点击“New”
- 名称填“MAVLink Heartbeat”,过滤器填
mavlink.msgid == 0 - 选择前景色和背景色,点击“OK”
你还可以给不同类型的MAVLink报文设置不同的颜色。比如:
- 心跳包:亮黄色
- 位置数据:蓝色
- 姿态数据:绿色
- 命令报文:红色
这样,你一眼就能看出当前数据流里主要是什么类型的报文在传输。嗯,这个技巧我在调试无人机飞控的时候经常用,效果非常好。
4.5 跟踪流功能
跟踪流(Follow Stream)是Wireshark里一个非常强大的功能。它能帮你把某个通信会话的所有数据提取出来,按顺序排列,方便你分析整个对话过程。
怎么用?很简单:
- 在数据包列表里,选中一个你感兴趣的UDP包(比如某个MAVLink报文)
- 右键点击,选择“Follow” → “UDP Stream”
- Wireshark会自动过滤出这个UDP流的所有数据包,并弹出一个新窗口显示原始数据
这个功能在分析MAVLink通信时特别有用。比如,你想看无人机起飞前和地面站交换了哪些命令,就可以用跟踪流把整个会话过程拉出来,一条一条看。
我记得有一次,客户反映无人机在飞行中会突然失去响应。我用跟踪流功能把整个飞行过程的通信数据导出来,发现地面站在某个时间点连续发送了3次“紧急降落”命令,但无人机只回复了前两次,第三次没有回复。嗯,问题就出在这里——无人机在第三次命令时已经死机了。
跟踪流窗口里,你可以选择显示格式:
- ASCII:显示可读的文本字符
- Hex Dump:显示十六进制数据
- C Arrays:显示C语言数组格式
- Raw:显示原始二进制数据
对于MAVLink报文,我一般用Hex Dump格式。因为MAVLink是二进制协议,ASCII格式会显示一堆乱码,反而不好看。
知识体系图
下面这张图,是我自己总结的Wireshark基础操作知识体系。你可以把它当作一个快速索引,用到哪个功能就回来看一眼。
好了,这一章的内容就到这里。Wireshark的这些基础操作,说白了就是让你在茫茫数据包中找到你想要的那一个。多练几次,你就能形成自己的操作习惯。下一章,我们会用这些工具去抓真正的MAVLink报文,看看无人机和地面站之间到底在聊什么。
公众号:蓝海资料掘金营,微信deep3321