使用 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 实现题目详情的弹窗展示,并实现…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
