Wireshark 协议插件Lua开发 -数据包内嵌协议的解释

news/2024/5/18 14:00:40 标签: lua, wireshark, udp

概述

因为公司项目涉及的协议打包,协议包内又嵌了一层IP包的奇葩套娃结构,为了方便抓包调试,利用Wireshark的协议插件开发功能,写了一个插件,博文记录以备忘。

环境信息

Wireshark 4.0.3

协议结构体套娃图

在这里插入图片描述

插件安装

将对应的协议解释文件复制到Wireshark安装目录\plugins<版本号>
然后通过菜单按钮【分析】->【重新载入Lua插件】,即可完成插件加载

完整代码

lua">-- @brief XXX Protocol dissector plugin
-- @author XXX
-- @date 2023.12.03

-- create a new dissector
local NAME = "XXX"
local PORT = 2998
local foo = Proto(NAME, "XXX Protocol")

local fields = foo.fields
fields.ss = ProtoField.bytes(NAME .. ".ss", "SS", base.SPACE)
fields.payload = ProtoField.bytes(NAME .. ".payload", "XXX Payload", base.None)
fields.ic = ProtoField.bytes(NAME .. ".ic", "ic", base.SPACE)

-- dissect packet
function foo.dissector (buf, pinfo, tree)
	if buf:len() == 0 or buf:len() < 30 then return end
	local subtree = tree:add(foo)
	subtree:add(fields.ss, buf(0,20))
	subtree:add(fields.ic, buf(buf:len() - 10, 10))
	subtree:add(fields.payload, buf(20,buf:len() - 30))
	-- 提取内嵌的数据
	local raw_data = buf(20,buf:len() - 30)
    -- 内嵌了一层IP协议,所以调用内部的Dissector解释
    Dissector.get("ip"):call(raw_data:tvb(), pinfo, tree)
end

-- 将协议添加到右键Decode As,不写该行,只能根据端口啥的绑定具体的协议
DissectorTable.get("udp.port"):add_for_decode_as(foo)
DissectorTable.get("tcp.port"):add_for_decode_as(foo)
-- register this dissector
DissectorTable.get("udp.port"):add(PORT, foo)

效果图

在这里插入图片描述

参考链接

实战编写 wireshark 插件解析私有协议
Functions For New Protocols And Dissectors
Wireshark解析器(Dissector)插件-Lua
自己动手编写Wireshark Lua插件解析自定义协议
Mika’s tech blog


http://www.niftyadmin.cn/n/5235375.html

相关文章

YOLOv7+姿态估计Pose+tensort部署加速

YOLOv7-Pose YOLOv7是一种高效的目标检测算法&#xff0c;用于实时物体检测。姿态估计Pose是一种用于识别和跟踪人体关键点的技术。TensorRT是一个针对深度学习推理任务进行加速的高性能推理引擎。 将YOLOv7和姿态估计Pose与TensorRT结合可以实现快速而准确的目标检测和姿态估…

SCAUoj综合性实验

Last One ! 文章目录 1109 综合实验&#xff1a;文件操作与字符处理总结 1109 综合实验&#xff1a;文件操作与字符处理 时间限制:4000MS 代码长度限制:10KB 提交次数:6265 通过次数:1646 题型: 填空题 语言: GCC Description 在当前目录中存在文件名为"case1.in"&…

Sharding-Jdbc(4):Sharding-Jdbc分库

1 新建数据库 创建ds_0数据库和ds_1数据库&#xff0c;在两个数据库新建表如下&#xff1a; CREATE TABLE t_order (order_id bigint(20) NOT NULL,user_id bigint(20) NOT NULL,PRIMARY KEY (order_id) ) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_bin; 2 新建maven项目…

【MyBatisPlus】MyBatisPlus之id生成策略的方法

MyBatisPlus之id生成策略的方法 在使用MyBatisPlus框架进行开发时&#xff0c;我们通常需要为实体类设计主键的生成策略。MyBatisPlus提供了多种主键生成策略&#xff0c;本文将介绍这些策略的用法。 雪花算法策略 雪花算法是Twitter公司开源的一个分布式ID生成算法&#xff…

改进YOLO5:结合CVPR2023最新 PConv |包含 YOLOv5 / YOLOv8 模型 YAML 文件

改进YOLO5:结合CVPR2023最新 PConv |包含 YOLOv5 / YOLOv8 模型 YAML 文件 一、论文总结PConv模块优势二、YOLOv51. yaml文件2. common代码文件三、YOLOv81. yaml2. modules文件添加3. Task文件4. 测试

机器人阻抗控制性能及其实验验证

Impedance Control 机器人阻抗控制是一种控制方法&#xff0c;其目的是构建一个系统使得执行器&#xff08;如机械臂&#xff09;能同时控制力和位置。它基于阻抗模型&#xff0c;通过调节机器人的行为&#xff0c;以维持理想的动态关系。这种动态关系可以理解为机器人末端位置…

Hdoop学习笔记(HDP)-Part.02 核心组件原理

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

Android 13.0 Camera2 静音时拍照去掉快门声音

1.概述 在13.0系统rom定制化开发时,在Camera2静音情况下有快门拍照声音,这就不符合使用规范了 静音的情况下拍照也不应该发出声音,所以在静音拍照流程中要求去掉快门声音,接下来具体实现 相关的功能 2.Camera2静音拍照去掉快门声音核心代码 /packages/apps/Camera2/src/co…