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

news2024/9/21 20:40:19

文章目录

    • 概要
    • 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结果路径
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于微信小程序的民宿短租系统设计与实现(论文+源码)_kaic

摘 要 随着社会的发展,出差、旅游成为常态,也就造成民宿短租市场的兴起。人们新到陌生的环境里找民宿一般都是通过中介。中介虽然可以快速找到合适的民宿但会收取大量的中介费用,这对刚到新环境里的人们来说是一笔大的资金支出。也有一些人通…

Learn OpenGL 26 视差贴图

什么是视差贴图 视差贴图(Parallax Mapping)技术和法线贴图差不多,但它有着不同的原则。和法线贴图一样视差贴图能够极大提升表面细节,使之具有深度感。它也是利用了视错觉,然而对深度有着更好的表达,与法线贴图一起用能够产生难…

AJAX-项目优化(目录、基地址、token、请求拦截器)

目录管理 基地址存储 在utils/request.js配置axios请求基地址 作用&#xff1a;提取公共前缀地址&#xff0c;配置后axios请求时都会baseURLurl 填写API的公共前缀后&#xff0c;将js文件导入到html文件中 <script src"../../utils/request.js"></script&…

寄主机显示器被快递搞坏了怎么办?怎么破?

大家好&#xff0c;我是平泽裕也。 最近&#xff0c;我在社区里看到很多关于开学后弟弟寄来的电脑显示器被快递损坏的帖子。 看到它真的让我感到难过。 如果有人的数码产品被快递损坏了&#xff0c;我会伤心很久。 那么今天就跟大家聊聊寄快递的一些小技巧。 作为一名曾经的…

springcloud微服务项目,通过gateway+nacos实现灰度发布(系统不停机升级)

一、背景 灰度发布的目的是保证系统的高可用&#xff0c;不停机&#xff0c;提升用户体验。在微服务系统中&#xff0c;原有系统不下线&#xff0c;新版系统与原有系统同时在线&#xff0c;通过访问权重在线实时配置&#xff0c;可以让少量用户先应用新版本功能&#xff0c;如…

计算机网络链路层

数据链路 链路是从一个节点到相邻节点之间的物理线路&#xff08;有线或无线&#xff09; 数据链路是指把实现协议的软件和硬件加到对应链路上。帧是点对点信道的数据链路层的协议数据单元。 点对点信道 通信的主要步骤&#xff1a; 节点a的数据链路层将网络层交下来的包添…

考研数学|高效刷透汤家凤《1800》经验分享

当然不需要换老师&#xff0c;如果你在基础阶段连汤老师的课都听不进去&#xff0c;那么换其他老师的话&#xff0c;很大可能也是白搭。 如果你现在对于1800还是一筹莫展的话&#xff0c;那么很明显&#xff0c;这反映出前期基础不扎实&#xff0c;没有真正理解和掌握这部分内…

基于Echarts的超市销售可视化分析系统(数据+程序+论文)

本论文旨在研究Python技术和ECharts可视化技术在超市销售数据分析系统中的应用。本系统通过对超市销售数据进行分析和可视化展示&#xff0c;帮助决策层更好地了解销售情况和趋势&#xff0c;进而做出更有针对性的决策。本系统主要包括数据处理、数据可视化和系统测试三个模块。…

【测试开发学习历程】Python数据类型:字符串-str(上)

目录 1 Python中的引号 2 字符串的声明 3 字符串的切片 4 字符串的常用函数 4.1 len()函数 4.2 ord()函数 4.3 chr()函数 5 字符串的常用方法&#xff08;内置方法/内建方法&#xff09; 5.1 find()方法 5.2 index()方法 5.3 rfind()方法 5.4 rindex()方法 1 Python…

杂货铺 | 使用 Github Pages 和 Hexo 搭建自己的独立博客

文章目录 &#x1f4da;Step1&#xff1a;安装Node.js和Git&#x1f4da;Step2&#xff1a;安装并初始化配置Hexo&#x1f4da;Step3&#xff1a;本地查看效果&#x1f4da;Step4&#xff1a;将博客部署到Github Pages上&#x1f407;创建项目代码库&#x1f407;配置SSH密钥&a…

GPT-1原理-Improving Language Understanding by Generative Pre-Training

文章目录 前言提出动机模型猜想模型提出模型结构模型参数 模型预训练训练的目标训练方式训练参数预训练数据集预训练疑问点 模型微调模型输入范式模型训练微调建议微调疑问点 实验结果分析 前言 首先想感慨一波 这是当下最流行的大模型的的开篇之作&#xff0c;由OpenAI提出。…

.helper勒索病毒的最新威胁:如何恢复您的数据?

导言&#xff1a; 随着信息技术的不断进步&#xff0c;网络安全问题日益突出&#xff0c;其中勒索病毒成为了威胁网络安全的一大隐患。.helper勒索病毒作为近期频繁出现的一种恶意软件&#xff0c;其危害性和传播速度引起了广大用户的深切关注。本文将深入探讨.helper勒索病毒…

OSCP靶场--pyLoader

OSCP靶场–pyLoader 考点(信息收集CVE-2023-0297) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV 192.168.178.26 --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-28 09:14 EDT Nmap scan report for 192.168.178.26 Host is up…

阿里云服务器价格表(2024年最新阿里云服务器租用优惠价格表)

2024年阿里云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网aliyunfuwuqi.com整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新…

macOS Sonoma如何查看隐藏文件

在使用Git进行项目版本控制时&#xff0c;我们可能会遇到一些隐藏文件&#xff0c;比如.gitkeep文件。它通常出现在Git项目的子目录中&#xff0c;主要作用是确保空目录也可以被跟踪。 终端命令 在尝试查看.gitkeep文件时&#xff0c;使用Terminal命令来显示隐藏文件 default…

STM32/GD32的以太网DMA描述符

继续梳理以太网的DMA描述符。 以太网DAM描述符的结构 有两种结构&#xff0c;链式结构和环形结构。 常用的是链式结构。 标准库中&#xff0c;关于DMA描述符的数据结构 以gd32f4xx_enet.c为例。 先说发送描述符。 系统分配了5个发送描述符。每个描述符对应的缓冲区大小为152…

【黑马头条】-day04自媒体文章审核-阿里云接口-敏感词分析DFA-图像识别OCR-异步调用MQ

文章目录 day4学习内容自媒体文章自动审核今日内容 1 自媒体文章自动审核1.1 审核流程1.2 内容安全第三方接口1.3 引入阿里云内容安全接口1.3.1 添加依赖1.3.2 导入aliyun模块1.3.3 注入Bean测试 2 app端文章保存接口2.1 表结构说明2.2 分布式id2.2.1 分布式id-技术选型2.2.2 雪…

镜视界 | DevSecOps CI/CD 管道中数字供应链安全的集成策略

目录 前言 数字供应链&#xff08;DSC&#xff09;的定义 数字供应链安全的重点内容和风险因素 CI/CD管道的安全目标和可信实体 将数字供应链安全集成到CI/CD管道中 结语 本文字数&#xff1a;7715&#xff0c;阅读时长&#xff1a;19分钟 1.前言 在敏捷开发的模式下&…

代码随想录算法训练营第三十六天|435. 无重叠区间,763. 划分字母区间

435. 无重叠区间 题目 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后&#xff0c;剩下…

如何创建纯净版Django项目并启动?——让Django更加简洁

目录 1. Django的基本目录结构 2. 创建APP 2.1 创建app 2.2 配置文件介绍 3. 迁移数据库文件 3.2 连接数据库 3.1 创建迁移文件 3.2 同步数据库 4. 纯净版Django创建 4.1 剔除APP 4.2 剔除中间件 4.3 剔除模板引擎 5. 最终 1. Django的基本目录结构 在我们创建Django项…