当前位置: 首页 > news >正文

Wireshark:自定义类型帧解析

文章目录

  • 1. 前言
  • 2. 背景
  • 3. 开发 Lua 插件

1. 前言

限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。

2. 背景

Wireshark 不认识用 tcpdump 抓取的数据帧,仔细分析相关代码和数据帧后,发现是交换芯片在以太网帧头IP 帧头之间插入了 6 个字节。由于要做对这些数据帧做分析工作,同时又想利用 Wireshark 的便利,于是想到 WiresharkLua 插件功能。

3. 开发 Lua 插件

在应用 Lua 插件解析数据帧前,Wireshark 的解析如下图:

在这里插入图片描述

可见 Wireshark 无法正常解析数据帧。接下来编写 Lua 脚本 edsa.lua 如下:

-- 定义协议
local edsap = Proto("edsa", "EDSA Protocol")-- 添加字段
local f_edsa_field1 = ProtoField.uint8("edsa.field1", "Field 1", base.DEC)
local f_edsa_field2 = ProtoField.uint8("edsa.field2", "Field 2", base.DEC)
local f_edsa_field3 = ProtoField.uint16("edsa.field3", "Index", base.DEC)
local f_edsa_field4 = ProtoField.uint8("edsa.field4", "Field 4", base.DEC)
local f_edsa_field5 = ProtoField.uint8("edsa.field5", "Field 5", base.DEC)edsap.fields = {f_edsa_field1, f_edsa_field2, f_edsa_field3, f_edsa_field4, f_edsa_field5}-- 定义 dissector 函数
-- 注意,这里 tvbuf 的数据,不包含以太网帧头的 14 字节
function edsap.dissector(tvbuf, pinfo, tree)if tvbuf:len() < 6 then return endpinfo.cols.protocol = edsap.namelocal edsa_tree = tree:add(edsap, tvbuf(0,6), "EDSA Protocol")edsa_tree:add(f_edsa_field1, tvbuf(0,1):uint())edsa_tree:add(f_edsa_field2, tvbuf(1,1):uint())edsa_tree:add(f_edsa_field3, tvbuf(2,2):uint())edsa_tree:add(f_edsa_field4, tvbuf(3,1):uint())edsa_tree:add(f_edsa_field5, tvbuf(4,1):uint())-- 处理剩余的数据local new_tvbuf = tvbuf(6+2):tvb()Dissector.get("ip"):call(new_tvbuf, pinfo, tree)
end-- 注册到以太网帧类型 0xdada :
-- 当 wireshark 发现以太网帧的 EtherType 字段为 0xdada 时,
-- 则调用 dsap.dissector()
local edsa_type = DissectorTable.get("ethertype")
edsa_type:add(0xdada, edsap)

然后把 edsa.lua 放到下图 Wireshark 设定的路径中:

在这里插入图片描述

然后重启 Wireshark 加载 tcpdump 抓取的数据包:

在这里插入图片描述

可以看到,已经可以正常解析了。

在开发 Lua 脚本的过程中,可以开启 Wireshark控制台Luaprint() 信息会输出到控制台,帮助定位开发过程中遇到的问题:

在这里插入图片描述

调试完成后,记得关闭它。

http://www.lryc.cn/news/544324.html

相关文章:

  • Redis7——进阶篇(一)
  • word转换为pdf后图片失真解决办法、高质量PDF转换方法
  • Kafka零拷贝
  • 鸿蒙应用开发入门教程
  • 【2022——暴力DP / 优雅背包】
  • AI智能体与大语言模型:重塑SaaS系统的未来航向
  • 绕过密码卸载360终端安全管理系统
  • golang安装(1.23.6)
  • 星闪开发入门之常见报错整理(一)
  • Node.js与MySQL的深入探讨
  • 【JAVA】阿里云百炼平台对接DeepSeek-V3大模型使用详解
  • springboot项目部署脚本
  • 黑马Java面试教程_P5_微服务
  • 使用Fuse-DFS挂载文件存储 HDFS-后端存储ceph
  • 生成式AI项目的生命周期
  • SOC-ATF 安全启动BL1流程分析(1)
  • 游戏引擎学习第127天
  • Grafana使用日志7--开启Sigv4
  • UWB人员定位:精准、高效、安全的智能管理解决方案
  • 二、QT和驱动模块实现智能家居----2、编译支持QT的系统
  • Windows上使用go-ios实现iOS17自动化
  • 越南SD-WAN跨境组网专线助力制造业访问国内 OA、ERP系统难题
  • 【广度优先搜索】图像渲染 岛屿数量
  • Rust学习总结之-枚举
  • Linux下用route命令修改默认网关,不用重启网络
  • Datawhale 数学建模导论二 笔记5 多模数据与智能模型
  • 【练习】【贪心】力扣1005. K 次取反后最大化的数组和
  • python学习七
  • 安全运营的“黄金4小时“:如何突破告警疲劳困局
  • 本地部署Embedding模型API服务的实战教程