4、Wireshark基础操作:界面介绍、抓包过滤器设置、显示过滤器语法、数据包着色规则、跟踪流功能

好,咱们进入实战环节了。前面几章讲了MAVLink协议的原理和报文结构,但说实话,光看文档是学不会抓包的。你得亲手打开Wireshark,看着那些花花绿绿的报文在屏幕上滚动,才能真正理解无人机和地面站之间是怎么“对话”的。

这一章,我就带你过一遍Wireshark最核心的几个操作。嗯,都是我在项目里天天用的东西,一个都跑不掉。

4.1 Wireshark界面介绍

第一次打开Wireshark,你可能会觉得有点懵。菜单栏、工具栏、过滤栏、数据包列表、详情面板、字节面板……东西太多了。别急,我帮你拆开看。

我个人习惯把界面分成三个区域:

  • 数据包列表区(Packet List):最上面那块,显示所有抓到的包。每一行就是一个包,有编号、时间、源地址、目的地址、协议、长度、信息摘要。
  • 数据包详情区(Packet Details):中间那块,选中某个包后,这里会展开它的协议栈。从物理层到应用层,一层层剥开给你看。
  • 数据包字节区(Packet Bytes):最下面那块,显示原始二进制数据。左边是十六进制,右边是ASCII字符。

你想想看,这三个区域其实是联动的。你在详情区点一下某个字段,字节区对应的字节就会高亮。反过来,你在字节区点一下,详情区也会跳到对应的位置。这个功能在分析MAVLink报文时特别有用——我经常用它来快速定位某个字段在原始数据里的位置。

我的小习惯: 每次开始抓包前,我会先把界面布局调好。把数据包列表的列宽调整一下,把“Protocol”列拉宽一点,这样一眼就能看出哪些是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
注意: 抓包过滤器不支持“udp.port”这种带点的写法。那是显示过滤器的语法。我曾经有个同事,在抓包过滤器里写了“udp.port == 14550”,结果抓了半天一个包都没抓到,还以为是网卡坏了。嗯,这个坑我踩过。

设置方法很简单:在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
核心技巧: 显示过滤器支持自动补全。你在过滤栏里输入“mavlink.”,Wireshark会自动弹出所有可用的字段名。这个功能我每天都在用,强烈推荐。

4.4 数据包着色规则

Wireshark默认会给不同协议的数据包涂上不同的颜色。比如TCP是淡紫色,UDP是淡蓝色,MAVLink默认是浅绿色。这个功能看着不起眼,但在实际抓包时特别有用。

你想想看,几百个包在屏幕上滚动,如果没有颜色区分,你根本找不到重点。有了颜色,一眼就能看出哪些是MAVLink包,哪些是其他协议的包。

Wireshark的着色规则是可以自定义的。我个人习惯给MAVLink的心跳包单独设一个颜色——比如亮黄色。这样在大量数据中,我能快速判断无人机是否还在“活着”。

设置方法:

  1. 点击菜单栏的“View” → “Coloring Rules”
  2. 在弹出的窗口里点击“New”
  3. 名称填“MAVLink Heartbeat”,过滤器填mavlink.msgid == 0
  4. 选择前景色和背景色,点击“OK”

你还可以给不同类型的MAVLink报文设置不同的颜色。比如:

  • 心跳包:亮黄色
  • 位置数据:蓝色
  • 姿态数据:绿色
  • 命令报文:红色

这样,你一眼就能看出当前数据流里主要是什么类型的报文在传输。嗯,这个技巧我在调试无人机飞控的时候经常用,效果非常好。

避坑指南: 着色规则不要设太多。我曾经一口气设了十几个规则,结果屏幕上五颜六色的,反而看不清了。建议控制在5个以内,突出重点就好。

4.5 跟踪流功能

跟踪流(Follow Stream)是Wireshark里一个非常强大的功能。它能帮你把某个通信会话的所有数据提取出来,按顺序排列,方便你分析整个对话过程。

怎么用?很简单:

  1. 在数据包列表里,选中一个你感兴趣的UDP包(比如某个MAVLink报文)
  2. 右键点击,选择“Follow” → “UDP Stream”
  3. Wireshark会自动过滤出这个UDP流的所有数据包,并弹出一个新窗口显示原始数据

这个功能在分析MAVLink通信时特别有用。比如,你想看无人机起飞前和地面站交换了哪些命令,就可以用跟踪流把整个会话过程拉出来,一条一条看。

我记得有一次,客户反映无人机在飞行中会突然失去响应。我用跟踪流功能把整个飞行过程的通信数据导出来,发现地面站在某个时间点连续发送了3次“紧急降落”命令,但无人机只回复了前两次,第三次没有回复。嗯,问题就出在这里——无人机在第三次命令时已经死机了。

跟踪流窗口里,你可以选择显示格式:

  • ASCII:显示可读的文本字符
  • Hex Dump:显示十六进制数据
  • C Arrays:显示C语言数组格式
  • Raw:显示原始二进制数据

对于MAVLink报文,我一般用Hex Dump格式。因为MAVLink是二进制协议,ASCII格式会显示一堆乱码,反而不好看。

注意: 跟踪流功能会把整个会话的数据全部提取出来,包括TCP的重传包、ACK包等。如果你只想看应用层的数据,建议先用显示过滤器把无关的包过滤掉,再用跟踪流功能。

知识体系图

下面这张图,是我自己总结的Wireshark基础操作知识体系。你可以把它当作一个快速索引,用到哪个功能就回来看一眼。

Wireshark基础操作知识体系 Wireshark基础操作 界面介绍 数据包列表区 数据包详情区 数据包字节区 抓包过滤器 BPF语法 抓前过滤 端口/IP过滤 显示过滤器 协议/字段过滤 比较操作符 组合条件 着色规则 协议颜色标识 自定义着色 报文类型区分 跟踪流 会话数据提取 多种显示格式 通信过程分析 核心思路:先抓后滤,着色辅助,流分析定位问题 抓包过滤器减少干扰 → 显示过滤器精准定位 → 着色规则快速识别 → 跟踪流深入分析

好了,这一章的内容就到这里。Wireshark的这些基础操作,说白了就是让你在茫茫数据包中找到你想要的那一个。多练几次,你就能形成自己的操作习惯。下一章,我们会用这些工具去抓真正的MAVLink报文,看看无人机和地面站之间到底在聊什么。


公众号:蓝海资料掘金营,微信deep3321