使用 Wireshark 和 Lua 脚本解析通讯报文
在复杂的网络环境中,Wireshark 凭借其强大的捕获和显示功能,成为协议分析不可或缺的工具。然而,面对众多未被内置支持的协议或需要扩展解析的场景,Lua 脚本的引入为Wireshark 提供了极大的灵活性和可扩展性。本文将详细介绍如何使用 Lua 脚本来增强Wireshark 的功能,实现对复杂通讯报文的解析,从基础入门到高级应用,带你领略 Lua 脚本在 Wireshark 中的强大威力。
一、为什么选择Lua?
Lua 作为一种轻量级脚本语言,在Wireshark中具有以下显著优势:
- 简单易学:Lua语法简洁,上手快,适合快速开发和原型设计。
- 集成方便:Wireshark内置Lua支持,无需重新编译即可加载脚本插件。
- 灵活性高:Lua提供丰富的API,可访问Wireshark核心功能,如协议解析、数据包处理等。
- 社区活跃:Lua在游戏开发和多个领域有广泛应用,社区支持强大,易于获取帮助。
二、准备环境
确保已安装最新版本的 Wireshark,并准备好 Python 环境(用于生成某些协议库,如MAVLink)。如果解析特定协议,还需下载协议定义文件(如 XML 格式)。
三、创建 Lua 解析脚本
1. 安装 MAVLink(以 MAVLink 为例)
首先,克隆 MAVLink GitHub 仓库,并按照说明安装 MAVLink 工具:
git clone https://github.com/mavlink/mavlink.git
cd mavlink
2. 生成 Lua 解析代码
使用mavgen
工具生成 Lua 解析代码。例如,为 common.xml
生成 MAVLink 2 Wireshark 插件:
python3 -m pymavlink.tools.mavgen --lang=WLua --wire-protocol=2.0 --output=mavlink_2_common message_definitions/v1.0/common.xml
生成mavlink_2_common.lua
文件,包含解析函数。
3. 修改插件文件
根据需要修改生成的Lua文件,指定监控端口。例如:
-- 绑定协议解析器到指定端口
local udp_dissector_table = DissectorTable.get("udp.port")
udp_dissector_table:add(14550, mavlink_proto)
udp_dissector_table:add(14580, mavlink_proto)
udp_dissector_table:add(18570, mavlink_proto) -- 可能用于WSL2中的模拟
4. 添加自定义解析逻辑
对于非 MAVLink 协议或需要额外解析逻辑的情况,编写自定义 Lua 脚本。例如,解析假设的二进制协议:
-- 创建新协议对象
local myproto = Proto("myproto", "My Custom Protocol")-- 定义字段
local f_field1 = ProtoField.uint8("myproto.field1", "Field 1", base.DEC)
local f_field2 = ProtoField.string("myproto.field2", "Field 2")
myproto.fields = {f_field1, f_field2}-- 解析函数
function myproto.dissector(buffer, pinfo, tree)pinfo.cols.protocol = "MYPROTO"local subtree = tree:add(myproto, buffer(), "My Custom Protocol Data")-- 解析第一个字节为无符号整数local field1 = buffer(0, 1):uint()subtree:add(f_field1, buffer(0, 1))-- 解析剩余部分为字符串local field2 = buffer(1, buffer:len()-1):string()subtree:add(f_field2, buffer(1, buffer:len()-1))
end-- 注册解码器
local udp_table = DissectorTable.get("udp.port")
udp_table:add(9000, myproto) -- 假设协议使用UDP端口9000
四、导入 Lua 脚本到 Wireshark
将编写好的 Lua 脚本复制到 Wireshark 插件目录。路径因操作系统而异:
- Linux:
~/.local/lib/wireshark/plugins
或~/.wireshark/plugins
- Windows:
Program Files/Wireshark/plugins
启动 Wireshark,在 Help > About Wireshark > Plugins
中确认插件已加载。
五、捕获 MAVLink 流
在 Linux 系统中,可以使用 tcpdump 来捕获特定接口上的流。可以在笔记本电脑或外部计算机上执行此操作:
apt update
apt install tcpdump
tcpdump -i eth0 -w mavlink-capture.pcap
如果可以通过 SSH 访问远程机器,还可以将 tcpdump 流传输到本地机器,而不是将其记录到文件中。Wireshark 可以打开此流并使用上述工具和过滤器显示解码后的 MAVLink 消息,例如:
mkfifo /tmp/mavlink
wireshark -k -i /tmp/mavlink &
ssh root@10.41.1.1 -p 33333 "tcpdump -s 0 -U -n -w - -i lo not port 33333" > /tmp/mavlink
其中,需要根据远程机器的配置调整用户名、IP 和端口。
- “mkfifo /tmp/mavlink” 创建一个命名管道用于流数据,
- “wireshark -k -i /tmp/mavlink &” 启动 Wireshark 并将命名管道作为输入立即开始捕获,
- “ssh” 命令在远程机器上启动数据流并将其管道传输到本地机器的命名管道中,
- “-s 0” 设置快照长度为默认,
- “-U” 流数据包输出为包缓冲,不等待完整缓冲区,
- “-n” 不转换地址,
- “-w -” 将原始数据写入标准输出(管道传输到本地机器),
- “-i lo” 定义要监听的接口(这里是环回接口,也可以根据需要更改为以太网、USB 或调制解调器接口),
- “not port 33333” 不捕获 SSH 会话创建的数据,还可以添加更多过滤器来减少传输的数据。
六、使用 Wireshark 分析
- 选择网络接口:选择适当的接口捕获。
- 应用过滤器:使用协议名称(如
myproto
)过滤特定流。 - 查看消息详情:点击消息查看详细信息,包括字段值和解释。
六、高级功能与应用
Lua 脚本在 Wireshark 中不仅限于基本解析,还可实现以下高级功能:
- 统计分析:收集特定消息或事件的发生次数,生成图表或报告。
- 实时响应:检测特定模式时触发警报或执行操作。
- 自动化测试:模拟客户端行为,发送请求并验证响应,进行回归测试。
相关文章:

使用 Wireshark 和 Lua 脚本解析通讯报文
在复杂的网络环境中,Wireshark 凭借其强大的捕获和显示功能,成为协议分析不可或缺的工具。然而,面对众多未被内置支持的协议或需要扩展解析的场景,Lua 脚本的引入为Wireshark 提供了极大的灵活性和可扩展性。本文将详细介绍如何使…...
ElasticSearch08-分析器详解
零、文章目录 ElasticSearch08-分析器详解 1、分析器原理 Elasticsearch的分词器(Analyzer)是全文搜索的核心组件,它负责将文本转换为一系列单词(term/token)的过程,也叫分词。 (1ÿ…...
【IN、NOT、AND、OR】在 MySql 中的使用方法,使用场景、注意事项
目录 IN NOT AND OR 注意事项: 使用场景: IN 用于指定某个字段的值在一个预定义的列表中。 SELECT * FROM users WHERE age IN (20, 25, 30);查询返回 age 字段 是20、25 、30 的用户记录。 NOT 用于对条件进行否定。 查询将返回与指定 条件相…...
Face to face
1.西班牙添加5G volte 首先carrierconfig里使能 <boolean name"carrier_nr_available_bool" value"true" /> <boolean name"carrier_volte_available_bool" value"true" /> 其次 组件apn配置ims参数 2.印度j…...

宝塔配置python项目提示python版本与安装的不符
用宝塔的网站添加了项目,配置选择了python3.8,但是在终端并且进入了虚拟环境查看python的版本居然还是默认是2.7.5版本。 官方是举列说明,这张图是用python管理器生成的 而我用的 网站--python项目, 那么虚拟路径在 /www/serve…...

Restaurants WebAPI(一)—— clean architecture
文章目录 项目地址一、Restaurants.Domain 核心业务层1.1 Entities实体层1.2 Repositories 数据操作EF的接口二、Restaurants.Infrastructure 基础设施层2.1 Persistence 数据EF CORE配置2.2 Repositories 数据查询实现2.3 Extensions 服务注册三、Restaurants.Application用例…...

c++数据结构算法复习基础--13--基数算法
基数排序 - 桶排序 时间复杂度 O(n*d) – d为数据的长度 每次比较一位(个位、十位。。。),所以取值范围就为0-9。 根据该特点,设计桶的概念 – 0号桶、1号桶… 1、思想 1)找出最长的数字,确定要处理的…...
ntp设置
NTP(Network Time Protocol)简介 ntp授时定义 - NTP是一种用于在计算机网络中同步时间的协议。它确保网络中的各个设备(如服务器、客户端计算机、网络设备等)的时钟保持准确一致。 - 其工作原理是通过分层的时钟源体系ÿ…...
如何在Java中使用封装好的API接口?
1.选择合适的 HTTP 库 在 Java 中,可以使用多种库来进行 HTTP 请求。java.net.HttpURLConnection是 Java 标准库中的类,能够满足基本的 HTTP 请求需求,但使用起来相对复杂。另外,还有一些第三方库,如OkHttp和Apache H…...
AWS EKS 相关错误修复 - remote error: tls: internal error - CSR pending
现象 升级aws eks的kubernetes版本后执行kubectl logs 或者kubectl exec相关命令会出现报错 remote error: tls: internal error 执行kubectl get csr -A查看csr出现一直pending的状态,并且出现问题的pod都在新创建出来的eks node节点上 kubectl get csr -A NAME AGE …...
浏览器事件循环机制
JavaScript 是单线程运行的语言,同一时间只能执行一个任务。单线程意味着: 如果某个任务执行时间过长,后续任务会被阻塞。 同步任务和异步任务的调度需要一种机制来管理。 为了解决这个问题,事件循环应运而生,它可以…...

ubuntu22.04编译安装Opencv4.8.0+Opencv-contrib4.8.0教程
本章教程,主要记录在Ubuntu22.04版本系统上编译安装安装Opencv4.8.0+Opencv-contrib4.8.0的具体过程。 一、下载opencv和opencv-contrib包 wget https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip wget https://github.com/opencv/opencv_contrib/archive/refs/…...

概率论得学习和整理27:关于离散的数组 随机变量数组的均值,方差的求法3种公式,思考和细节。
目录 1 例子1:最典型的,最简单的数组的均值,方差的求法 2 例子1的问题:例子1只是1个特例,而不是普遍情况。 2.1 例子1各种默认假设,导致了求均值和方差的特殊性,特别简单。 2.2 我觉得 加权…...

【排序算法】——插入排序
目录 前言 简介 基本思想 1.直接插入排序 2.希尔排序 代码实现 1.直接插入排序 2.希尔排序 总结 1.时空复杂度 2.稳定性 尾声 前言 排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列&…...

MySQL的并发控制与MVCC机制深度解析
目录 1. MySQL中的并发问题2. 数据库的隔离级别3. MVCC(多版本并发控制)机制3.1 MVCC的实现原理3.2 Read View详解3.3 当前读与快照读 4. MVCC在不同隔离级别下的工作方式5. MVCC解决幻读问题6. MVCC的优缺点优点:缺点: 7. MVCC在…...

Qt编译MySQL数据库驱动
目录 Qt编译MySQL数据库驱动 测试程序 Qt编译MySQL数据库驱动 (1)先找到MySQL安装路径以及Qt安装路径 C:\Program Files\MySQL\MySQL Server 8.0 D:\qt\5.12.12 (2)在D:\qt\5.12.12\Src\qtbase\src\plugins\sqldrivers\mysql下…...

uniapp地址类 方法
关于点击没反应 manifest.json 检查是否添加了对应的权限 /* 小程序特有相关 */"mp-weixin" : {"appid" : "wxc481f10754f1d9df","setting" : {"urlCheck" : false,"es6" : true,"postcss" : true,&qu…...

使用Idea自带的git功能进行分支合并
文章目录 1.背景描述2.分支切换3.分支合并的具体操作4.将在local环境下,从dev合并到qas分支上的代码,推送到远端 1.背景描述 目前在开发的当前项目有四个分支,master(主分支)、pre(预生产分支)、qas(测试分支)、dev(开发分支); …...

酷盾安全:Edge SCDN边缘安全内容分发网络
在当今数字化迅猛发展的时代,互联网内容分发的高效与安全成为了企业不可忽视的重要课题。为了满足这一需求,酷盾安全推出了创新的Edge Secure Content Delivery Network(Edge Scdn)解决方案,它不仅融合了分布式DDoS防护…...

H5 中 van-popup 的使用以及题目的切换
H5 中 van-popup 的使用以及题目的切换 在移动端开发中,弹窗组件是一个常见的需求。vant 是一个轻量、可靠的移动端 Vue 组件库,其中的 van-popup 组件可以方便地实现弹窗效果。本文将介绍如何使用 van-popup 实现题目详情的弹窗展示,并实现…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...