Wireshark自定义协议解析器插件C语言开发

文章目录

    • 概要
    • Wireshark 软件整体架构
    • 基本概念
    • 解析器实现逻辑
    • 解析器编译环境搭建
    • 软件编译过程

概要

Wireshark是一款全球使用与开发维护人数最多的遵循GPL协议开源的网络协议分析软件,全球开发者为Wireshark编写了数千种协议的解析插件。
在实际的工作中,往往需要分析某些私有协议的报文,或者用到官方wireshark没有提供的某些功能,或者需要将Wireshark的报文解析功能移植到自己的特定应用场景中……这一切,都需要我们在理解Wireshark工作原理的基础上,对其进行二次开发。
Wireshark的两大特点使二次开发比较容易:
● 代码是遵循GPL协议开源的,任何人无论出于私人还是商业目的,都可以下载并且使用 Wireshark。
● 提供了插件plugins机制,可基于C或Lua语言进行二次开发

本文编写于2024年3月,参考版本wireshark-4.2.3,QT6.6.3 community ,cmake3.29.0

Wireshark 软件整体架构

wireshark的基本软件框架如下。
软件框架
其中有几个重要的依赖库,
● glib, libpcap, Qt 是 Wireshark 的重要第三方依赖库
● wiretap, wsutil, epan 实现为动态库, epan 的库文件名是 libwireshark.so
● tshark 和 wireshark 是可执行程序, 其中 wireshark 带有图形界面, 它是通过 Qt 实现的, 而 tshark 为命令行程序

基本概念

  • C 解析器可分为内置解析器和插件(plugins)解析器
  • 注册register
  • 交接handoff
  • 解析dissector

解析器实现逻辑

Wireshark 协议解析器dissector负责解析报文中与当前协议相关的部分,然后把后面数据的解析权交给下一个解析器subdissector。解析器流程总是先从一个名为"Frame"的伪协议解析器开始,之后根据像 TCP/IP 这样的协议层依次推进解析, 直到表示协议数据的"Data"解析器,然后解析过程又回退,最后又回到 Frame 解析器,基本上就是一个解嵌套字节过程。下图演示了一个以太网典型报文的解析过程.
在这里插入图片描述
要与 Wireshark 主框架交互, 解析器插件必须要做三件事:
● 注册(register). 声明要处理的协议名, 要处理的协议字段等
● 交接(handoff). 声明与其他解析器如何交接
● 解析(dissect). 对协议数据的解析
注册和交接发生在 Wireshark 启动阶段,当某一插件存在异常wireshark都将崩溃无法打开,而解析发生在用户打开离线报文, 抓包, 或者点击报文列表(Packet List)中某一项等时候。
协议解析器的解析结果存放在协议树(Proto Tree)中,在Wireshark UI 正是通过一个树型控件来展示的:
在这里插入图片描述

解析器编译环境搭建

● 阅读 Wireshark 开发手册
https://www.wireshark.org/docs/wsdg_html_chunked/index.html
● 准备一份 Wireshark 代码, 官方仓库是 https://gitlab.com/wireshark/wireshark/-/tree/master
● 在你所需的系统上成功编译 WIreshark 原始代码,至少一次。
● 了解 Wireshark 编码规范, 协议解析器的基本原理, 解析器插件的实现方法. 这三个文档分别位于 Wireshark 源码的 doc/README.developer, doc/README.dissector 和 doc/README.plugins. doc 目录下的其他 README 文件也对你的开发很有帮助。这些文件都很长, 如果急于开发功能, 可以简要阅读,直接使用example。
● Wireshark 使用 EditorConfig 来规范代码格式, 如果用 VSCode 可以安装 EditorConfig for VS Code插件来让自己的代码符合规范。

必要的安装环境:

  • Micosoft Visual Studio 2019/2022
  • QT6或QT5.12版本以上
  • Cmake
  • python3
  • winflexbison

软件编译过程

Wireshark 4.2.3 源码放在 D:\wiresharkdev\wireshark-4.2.3, 在 D:\wiresharkdev\wireshark-build目录中存放CMAKE编译内容, 并把编译过程中下载的依赖项放在D:\wiresharkdev\wireshark-win64-libs-4.2目录
在这里插入图片描述
为了便于设置环境变量, 在编译路径文件夹建立一个批处理文件 setenv.bat, 内容如下
在这里插入图片描述
若安装的是QT5,在执行CMAKE编译过程需要进行说明。具体在下面补充。

1.当前环境切换到环境设置脚本路径,设置环境变量

在这里插入图片描述
2.执行cmake生成解决方案,结果在编译路径。
若使用QT5,则需执行下面这句禁掉QT6。

cmake -G "Visual Studio 16 2019" -A x64 -DUSE_qt6=OFF ..\wireshark

在这里插入图片描述

3.执行cmake 构建生成exe及插件dll
在这里插入图片描述
4.插件dll结果路径
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/498296.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件工程学习笔记10——开发编码篇2

开发编码篇 一、软件工程师的核心竞争力1、学习能力2、解决问题的能力(1)发现问题(2)分析问题(1)解决问题 3、影响力4、总结 二、如何提升软件工程师的核心竞争力1、如何提升学习能力2、如何提高解决问题的…

【python 数据可视化】 WordCloud词云图

目录 词云简介 准备工作 安装方法一: 安装方法二: 生成词云步骤 数据预处理: 分词: 统计词频出现的次数: 去除词语: 生成词云: 显示词云: 保存词云: 完整代码 词…

Docker搭建LNMP环境实战(07):安装nginx

1、模拟应用场景描述 假设我要搭建一个站点,假设虚拟的域名为:api.test.site,利用docker实现nginxphp-fpmmariadb部署。 2、目录结构 2.1、dockers根目录 由于目前的安装是基于Win10VMWareCentOS虚拟机,同时已经安装了VMWareT…

状态压缩DP【蒙德里安的梦想】

题目描述 输入样例 1 2 1 3 1 4 2 2 2 3 2 4 2 11 4 11 0 0输出样例 1 0 1 2 3 5 144 51205题目链接 https://www.acwing.com/problem/content/293/ 分析 总方案数即为横放的方案数,因为横放完后列填补只会出现一种情况1表示横放,0表示竖放如果合并…

实验2-spark编程

实验目的 (1)通过实验掌握Spark的基本编程方法; (2)熟悉RDD到DataFrame的转化方法; (3)熟悉利用Spark管理来自不同数据源的数据。 实验内容 1.Spark基本操作 请参照…

OpenPLC_Editor 在Ubuntu 虚拟机安装记录

1. OpenPLC_Editor在虚拟机上费劲的装了一遍,有些东西已经忘了,主要还是python3 的缺失库版本对应问题,OpenPLC_Editor使用python3编译的,虚拟机的Ubuntu 18.4 有2.7和3.6两个版本,所以需要注意。 2. OpenPLC_Editor …

自动发卡平台源码优化版,支持个人免签支付

源码下载地址:自动发卡平台源码优化版.zip 环境要求: php 8.0 v1.2.6◂ 1.修复店铺共享连接时异常问题 2024-03-13 23:54:20 v1.2.5 1.[新增]用户界面硬币增款扣款操作 2.[新增]前台对接库存信息显示 3.[新增]文件缓存工具类[FileCache] 4.[新增]库存同…

基于单片机技术的门禁系统硬件设计研究

摘要:门禁系统在工业领域的应用十分广泛,如何利用单片机技术对门禁系统中的硬件进行管理与控制已经成为相关单位十分重要的研究课题之一。因此,文章设计了一套基于单片机技术的门禁系统硬件方案,旨在充分发挥单片机设备在自动化控制方面的优势,提高门禁系统的自动化水平。…

车载以太网AVB交换机 gptp透明时钟 5口 全千兆 SW1500

全千兆车载以太网交换机 一、产品简要分析 5端口千兆车载以太网交换机,包含4个通道的1000BASE-T1接口使用罗森博格H-MTD和泰科MATEnet双接口,1个通道1000BASE-T标准以太网(RJ45接口),可以实现车载以太网多通道交换,千兆和百兆车载…

【数据结构】带头双向链表的实现

👑个人主页:啊Q闻 🎇收录专栏:《数据结构》 🎉道阻且长,行则将至 前言 带头双向链表是链表的一种,相较于单链表的实现,其更为简单 一.初识带头双向循环链表 带头…

【漏洞分析】浅析android手游lua脚本的加密与解密(二)

反编译本人用到的是luajit-decomp,这里需要注意,luajit-decomp默认的lua版本为5.1,luajit版本为2.0.2,我们需要下载对应lua和luajit的版本,编译后替换luajit-decomp下的lua51.dll、luajit.exe、jit文件夹。反编译时需要注意的文件和文件夹: 这里需要下载版本为2.1.0-bet…

用 AI 编程-释放ChatGPT的力量

最近读了本书,是 Sean A Williams 写的,感觉上还是相当不错的。一本薄薄的英文书,还真是写的相当好。如果你想看,还找不到,可以考虑私信我吧。 ChatGPT for Coders Unlock the Power of AI with ChatGPT: A Comprehens…

SAP-CO主数据之统计指标创建-<KK01>

公告:周一至周五每日一更,周六日存稿,请您点“关注”和“在看”,后续推送的时候不至于看不到每日更新内容,感谢。 目录 一、背景: 成本中心主数据创建:传送门 成本要素主数据创建&#xff1…

OpenHarmony实战开发-滑动容器组件Swiper的使用

介绍 本篇Codelab主要介绍了滑动容器组件Swiper的几种常见的应用场景,包括顶部导航、轮播图以及视频滑动播放。 相关概念 Swiper:滑动容器,提供子组件切换滑动的能力。Stack:堆叠容器,子组件按照顺序依次入栈&#x…

康耐视visionpro-CogFindLineTool工具详细说明

CogFindeLineTool功能说明: 检测图像的直线边缘,实现边缘的定位、测量。 CogFindeLineTool操作说明: ①.打开工具栏,双击或点击鼠标拖拽添加CogFindLineTool工具 ②.添加输入图像,点击鼠标右键“链接到”选择输入图像或以连线拖拽的方式选择相应输入图像 ③. 所选空间名…

振弦采集仪在预防地质灾害监测中的作用与应用前景

振弦采集仪在预防地质灾害监测中的作用与应用前景 振弦采集仪(String Vibrating Sensor,简称SVM)是一种用于地质灾害监测的重要仪器,它通过测量地面振动信号来预测和预警地质灾害的发生。SVM的作用在于提供实时、准确的地质灾害监…

威联通安装Kafka

最近在学习 Kafka 的知识,遇到一些问题网上搜到的信息不全。想要在本地安装一个 Kafka 进行验证,想到了之前买的 Nas 就开始折腾。 用 Docker 的方式安装 Kafka 现在的 Nas 很多都支持 Docker,我买的也支持。威联通的 Docker 叫 Container S…

AugmentedReality之路-通过蓝图启动AR相机(2)

本文实现打开AR相机和关闭AR相机功能,在主界面点击Start AR按钮后打开AR相机,在主界面点击Stop AR按钮后关闭AR相机 1、启动AR相关插件 通过Edit->Plugins启用AugmentedReality下面的所有插件 2、自定义Pawn 在Content->ARBase目录右键&…

如何降低 BlueNRG-LPS 的开机峰值电流

1. 前言 BlueNRG 系列存在开机瞬间会出现很大的峰值电流的现象,预计有 20ma 左右。针对此现象,经常有客户询问该峰值电流会不会导致设备工作异常?会不会导致电池使用寿命缩短(考虑到一般纽扣电池能承受的峰值电流大概在 15ma 左右…

B64843-4M 1553B总线 控制时序、寄存器介绍。

B64843-4M系统架构 注: 1 、 CPU ADDRESS LATCH 信号由带地址 / 数据复用总线的处理器提供,对不带地址 / 数据复用总线的处理器,CPU ADDRESS LATCH 信号与 3.3V 信号连接。 2、如果 POLARITY_SEL="1" , RD/信号为高时读使能,为低时写使POLARITY_S…