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

Wireshark 插件开发实战指南

Wireshark 插件开发实战指南

环境搭建流程图

开始
使用 TortoiseSVN 获取 Wireshark 源码
配置编译MSVC, Python 等工具链
验证依赖库与工具链完整性
环境搭建完成

一、开发环境与工具准备

(一)开发语言选择

在 Wireshark 插件开发中,选择合适的开发语言是至关重要的第一步。不同的语言有其各自的优势和适用场景。

Lua 脚本语言是一种轻量级的编程语言,它的语法简洁明了,学习曲线平缓,非常适合快速开发和原型设计。对于那些希望快速验证想法、构建简单协议解析器的开发者来说,Lua 是一个不错的选择。通过掌握 Lua 的基础语法和数据结构,开发者可以迅速上手并实现基本的功能。例如,在 Lua 中,表(table)是一种强大的数据结构,可以用来存储和操作协议中的各种字段数据。开发者可以利用 Lua 的灵活性,快速定义协议字段的结构和解析逻辑,从而在短时间内构建出一个可运行的插件原型。

然而,对于一些对性能要求较高或者需要处理复杂协议解析的场景,C 语言则更为适合。C 语言具有高效的执行速度和强大的系统级操作能力,能够直接访问内存和硬件资源。在 Wireshark 插件开发中,如果涉及到高性能的数据处理或者复杂的协议解析算法,使用 C 语言可以充分发挥其优势。不过,使用 C 语言开发需要配置较为复杂的编译环境,例如 Cygwin 或 Wireshark 源码环境。Cygwin 是一个在 Windows 系统上提供类 Unix 环境的软件,通过它可以使用 GNU 编译器工具链来编译 C 语言代码。而 Wireshark 源码环境则需要开发者具备一定的配置经验,以确保编译过程顺利进行。

(二)环境搭建

搭建一个稳定且完整的开发环境是进行 Wireshark 插件开发的基础。首先,开发者需要使用 TortoiseSVN 获取 Wireshark 源码。TortoiseSVN 是一个方便易用的 SVN 客户端,通过它可以轻松地从 Wireshark 的官方代码仓库中获取最新的源码版本。在获取源码后,需要配置编译工具链,这可能包括 MSVC(Microsoft Visual C++ Compiler)和 Python 等。MSVC 是微软提供的 C/C++ 编译器,用于编译 Windows 平台上的 C 语言代码。Python 则可能在一些脚本处理和自动化构建过程中发挥作用。配置工具链时,需要确保各个组件的版本兼容性,避免因版本不匹配导致的编译错误。

同时,验证依赖库与工具链的完整性也是环境搭建过程中不可忽视的一步。Wireshark 插件开发可能会依赖一些第三方库,如 Qt 库用于图形界面相关的功能。开发者需要逐一检查这些依赖库是否正确安装,并且与工具链协同工作。例如,在编译过程中,如果缺少某个依赖库,可能会出现链接错误,导致编译失败。因此,通过仔细的验证,确保所有依赖库和工具链都完整无误,可以为后续的开发工作提供一个良好的基础。

(三)开发者工具推荐

在开发过程中,合适的工具能够大大提高开发效率和调试的便捷性。Wireshark 自带的内置调试器(Protocol Dissection Debugger)是一个非常有用的工具。它可以帮助开发者在调试协议解析器时设置断点,逐步执行代码,观察程序的运行状态和变量的值。通过这种方式,开发者可以深入了解协议解析的每一个细节,及时发现和修复潜在的问题。例如,在解析一个复杂的协议数据包时,通过在关键的解析函数处设置断点,可以检查数据包的各个字段是否被正确解析和处理。

此外,日志输出也是一个常用的调试手段。在代码中插入 print() 函数,可以将关键变量的值和程序的运行状态输出到控制台。这对于定位问题非常有帮助,尤其是在程序运行出现异常或者结果不符合预期时。通过查看日志输出,开发者可以快速定位到问题发生的代码位置,从而有针对性地进行修复。

二、核心开发技巧

(一)熟悉 Wireshark API

Wireshark 提供了一系列丰富的 API,供开发者在插件开发中使用。其中,Dissector 对象是协议解析的核心部分。它定义了协议解析的逻辑,包括如何处理数据包的结构和字段解析。开发者需要通过 Wireshark 的 API 来创建和操作 Dissector 对象,以实现对特定协议的解析。例如,在解析一个自定义协议时,可以通过 Dissector 对象来指定如何从数据包中提取协议的各个字段,并将其显示在 Wireshark 的协议树中。

ProtoField 类则是用于描述协议字段的显示名称、数据类型及过滤规则的重要工具。通过定义 ProtoField,开发者可以告诉 Wireshark 如何显示协议字段,以及如何在过滤器中使用这些字段。例如,如果一个协议字段是一个 16 位无符号整数,开发者可以使用 FT_UINT16 来定义其数据类型。同时,还可以为该字段设置一个显示名称,方便用户在 Wireshark 界面中识别和使用。

协议解析器开发流程图

注册协议与字段
使用 `proto_register_protocol`
使用 `proto_register_field_array`
数据包处理函数
解析 `tvbuff_t` 缓冲区
构建协议树

(二)协议解析器(Dissector)开发

开发一个协议解析器是 Wireshark 插件开发的核心任务之一。首先,需要通过 proto_register_protocol 函数注册协议。在这个函数中,开发者需要指定协议的名称、描述和缩写等信息。这些信息将在 Wireshark 界面中显示,帮助用户识别和选择该协议。接着,使用 proto_register_field_array 函数注册协议的字段。在这个函数中,需要传入之前定义的 ProtoField 数组,以便 Wireshark 知道该协议有哪些字段以及它们的属性。

然后,需要实现数据包处理函数,通常命名为 dissect_myprotocol。在这个函数中,开发者需要解析 tvbuff_t 缓冲区的内容。tvbuff_t 是 Wireshark 中用于表示数据包缓冲区的结构,它包含了数据包的数据和一些相关的元信息。开发者可以通过 Wireshark 的 API 从 tvbuff_t 缓冲区中提取数据,并根据协议的定义进行解析。解析完成后,需要构建协议树,将解析出的字段按照一定的结构显示在 Wireshark 的协议树中。例如,可以使用 proto_tree_add_uint 函数将一个整数字段添加到协议树中。

(三)插件入口与注册

为了让 Wireshark 能够识别和加载开发的插件,需要定义插件入口和注册函数。plugin_register 函数是插件的入口函数,在这个函数中,开发者可以进行一些插件的初始化工作,如注册协议解析器等。而 plugin_reg_handoff 函数则用于完成协议解析器的动态加载与注册。通过在这个函数中调用相关的注册函数,可以将开发的协议解析器与 Wireshark 的解析流程结合起来,使得 Wireshark 能够在解析数据包时调用插件中的解析器。

三、调试与测试技巧

(一)调试方法

在开发过程中,调试是必不可少的环节。利用 Wireshark 的内置调试器,开发者可以方便地设置断点,逐步检查数据包解析逻辑。例如,在解析一个复杂的数据包时,可以在解析函数的关键位置设置断点,然后通过调试器逐步执行代码,观察程序的运行状态和变量的值。这样可以及时发现解析过程中出现的问题,如数据提取错误、字段解析不正确等。

同时,通过控制台日志输出关键变量值也是一种有效的调试方法。在代码中插入日志输出语句,可以将程序运行过程中的关键信息输出到控制台。例如,在解析一个字段后,可以通过日志输出该字段的值,以便检查其是否符合预期。通过结合使用内置调试器和日志输出,开发者可以更全面地了解程序的运行情况,快速定位和解决问题。

测试策略流程图

多样化测试环境
覆盖不同网络条件
覆盖不同数据包类型
自动化测试脚本
验证插件功能
提升迭代效率

(二)测试策略

为了确保开发的插件能够稳定可靠地运行,制定合理的测试策略非常重要。首先,需要在多样化的测试环境中进行测试。不同的网络条件和数据包类型可能会对插件的性能和功能产生不同的影响。例如,在测试一个支持多种网络协议的插件时,需要在不同的网络拓扑结构、不同的网络延迟和丢包率等条件下进行测试,以确保插件在各种环境下都能正常工作。同时,还需要测试各种类型的数据包,包括正常数据包、异常数据包、分片数据包、加密流量等,以验证插件对不同数据包的处理能力。

其次,编写自动化测试脚本可以提高测试的效率和覆盖率。通过使用自动化测试工具,如 Python 的 unittest 框架,开发者可以编写测试脚本来模拟各种测试场景,自动运行测试并生成测试报告。这样可以节省大量的手动测试时间,同时确保测试的全面性和一致性。例如,可以编写一个测试脚本,自动发送各种类型的数据包到 Wireshark,并检查插件的解析结果是否正确。

四、性能优化与维护

(一)性能提升

在 Wireshark 插件开发中,性能是一个重要的考虑因素。为了提高插件的性能,可以采取一些优化措施。首先,减少内存分配与重复计算是提高性能的有效方法。频繁的内存分配和重复计算会消耗大量的系统资源,降低程序的运行速度。通过使用缓存技术,可以将一些常用的计算结果或数据存储起来,避免重复计算和分配。例如,在解析一个频繁出现的协议字段时,可以将其解析结果缓存起来,下次遇到相同的数据时直接从缓存中获取,而不需要重新计算。

其次,避免过度解析也是提高性能的一个重要方面。在解析数据包时,只处理必要的字段,避免对无关的数据进行解析。这样可以减少程序的运行时间,降低资源消耗。例如,在解析一个大型数据包时,如果只需要其中的几个关键字段,可以只解析这些字段,而跳过其他无关的部分。

(二)代码维护与扩展

随着时间和需求的变化,插件的代码需要不断地进行维护和扩展。良好的文档化是代码维护和扩展的基础。通过详细记录协议解析逻辑与接口设计,开发者可以方便地理解代码的功能和结构,为后续的维护和扩展提供指导。例如,在代码中添加详细的注释,说明每个函数的作用、参数和返回值,以及协议解析的流程和关键点,可以帮助其他开发者快速上手。

同时,定期更新插件以兼容新版 Wireshark 及协议规范变更也是维护工作的重要部分。Wireshark 和各种网络协议都在不断发展和更新,插件需要及时跟进这些变化,以确保其能够正常运行并满足用户的需求。例如,当 Wireshark 发布新版本时,需要检查插件是否与新版本兼容,如有必要,进行相应的修改和测试。

五、参考资源与社区支持

(一)官方示例与源码

Wireshark 官方提供了许多示例和源码,这些资源对于开发者来说是非常宝贵的。通过参考 Wireshark 内置插件的实现,如 plugins/m2m 的 WiMax 协议实现,开发者可以学习到许多实用的开发技巧和最佳实践。这些示例通常包含了完整的插件开发流程,从协议解析器的开发到插件的注册和加载,开发者可以从中了解到如何组织代码、如何使用 Wireshark 的 API 等。

参考资源流程图

graph TDA[官方示例与源码] --> B[参考 Wireshark 内置插件]C[社区与文档] --> D[加入 Wireshark 开发者论坛]C --> E[查阅开发者指南 (WSDG)]

(二)社区与文档

Wireshark 的开发者社区是一个活跃的交流平台,开发者可以在这里找到许多有用的信息和帮助。通过加入 Wireshark 开发者论坛,开发者可以与其他开发者交流经验,学习到许多解决问题的方法和技巧。同时,社区中还经常分享一些实际的开发案例和解决方案,这些都可以为开发者提供参考和借鉴。

此外,查阅开发者指南(WSDG)与 API 文档也是获取知识的重要途径。开发者指南详细介绍了 Wireshark 插件开发的各个方面,包括开发环境的搭建、API 的使用、插件的调试和测试等。API 文档则提供了 Wireshark 各个 API 的详细说明和使用示例,开发者可以通过查阅这些文档,深入了解 Wireshark 的功能和使用方法。

六、常见问题与解决方案

(一)协议分片与重组流程图

参考 TCP/UDP 示例
处理分片数据包
重组分片数据

(一)协议分片与重组

在协议解析过程中,经常会遇到数据包分片的情况。当一个数据包被分片后,需要将各个分片重新组合起来,才能正确解析出完整的协议数据。对于这种情况,可以参考 TCP/UDP 协议的分片处理示例。TCP 和 UDP 协议都支持数据包的分片传输,在 Wireshark 中,它们的解析器能够正确处理分片数据包的重组。开发者可以借鉴这些示例,实现自己协议的分片处理逻辑。例如,可以通过记录各个分片的信息,如序列号、长度等,然后根据这些信息将分片组合起来,形成完整的数据包。

隧道协议解析流程图

结合现有VPN 协议等插件
实现多层协议嵌套解析
解析外层协议
解析内层协议

(二)隧道协议解析

隧道协议是一种将一种协议封装在另一种协议中的技术,在网络通信中广泛应用。对于隧道协议的解析,需要结合现有插件的实现。例如,在解析 VPN 协议时,可以参考相关的 VPN 插件,了解如何处理多层协议嵌套的情况。通常,隧道协议的解析需要先解析外层协议,然后根据外层协议中的信息,找到内层协议的数据部分,再对内层协议进行解析。通过这种方式,可以逐步解开隧道协议的嵌套结构,正确解析出各个协议层的数据。

相关文章:

Wireshark 插件开发实战指南

Wireshark 插件开发实战指南 环境搭建流程图 #mermaid-svg-XpNibno7BIyfzNn5 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-XpNibno7BIyfzNn5 .error-icon{fill:#552222;}#mermaid-svg-XpNibno7BIyfzNn5 .error-t…...

【大模型➕知识图谱】大模型结合医疗知识图谱:解锁智能辅助诊疗系统新范式

【大模型➕知识图谱】大模型结合医疗知识图谱:解锁智能辅助诊疗系统新范式 大模型结合医疗知识图谱:解锁智能辅助诊疗系统新范式引言一、系统架构1.1 系统架构图1.2 架构模块说明1.2.1 用户输入1.2.2 大模型(语义理解与意图识别)1.2.3 Agent(问题解析与任务分配)1.2.4 问…...

大模型应用落地具体规划方案

摘要 本篇文章主要探讨大模型应用落地的具体规划方案,包含六点内容的分享,分别是: 大模型本地部署架构 大模型应用交互场景 基于阿里云RAG 项目的实现方案 大模型推荐落地场景方案 大模型应用落地发展规划 大模型开源架构选型推荐 在阅…...

【Qt】MVC设计模式

目录 一、搭建MVC框架 二、创建数据库连接单例类SingleDB 三、数据库业务操作类model设计 四、control层,关于model管理类设计 五、view层即为窗口UI类 一、搭建MVC框架 里面的bin、lib、database文件夹以及sqlite3.h与工程后缀为.pro文件的配置与上次发的文章…...

python量化交易——金融数据管理最佳实践——qteasy创建本地数据源

文章目录 qteasy金融历史数据管理总体介绍本地数据源——DataSource对象默认数据源查看数据表查看数据源的整体信息最重要的数据表其他的数据表 从数据表中获取数据向数据表中添加数据删除数据表 —— 请尽量小心,删除后无法恢复!!总结 qteas…...

深入探索Python机器学习算法:监督学习(线性回归,逻辑回归,决策树与随机森林,支持向量机,K近邻算法)

文章目录 深入探索Python机器学习算法:监督学习一、线性回归二、逻辑回归三、决策树与随机森林四、支持向量机五、K近邻算法 深入探索Python机器学习算法:监督学习 在机器学习领域,Python凭借其丰富的库和简洁的语法成为了众多数据科学家和机…...

word转换为pdf后图片失真解决办法、高质量PDF转换方法

1、安装Adobe Acrobat Pro DC 自行安装 2、配置Acrobat PDFMaker (1)点击word选项卡上的Acrobat插件,(2)点击“首选项”按钮,(3)点击“高级配置”按钮(4)点…...

【MATLAB例程】三维下的IMM(交互式多模型),模型使用CV(匀速)和CA(匀加速)

给出三维下的交互式多模型(IMM)matlab例程,模型使用匀速运动CV和匀加速运动CA,滤波使用EKF(扩展卡尔曼滤波) 文章目录 代码运行结果程序结构 代码讲解模型定义:轨迹生成:IMM核心流程…...

千峰React:Hooks(下)

useLayoutEffect useLayoutEffect在useEffect之前触发 这样会闪屏,因为是异步的,两次都渲染了 import {useEffect,useState } from react;function App() {const [msg,setMsg] useState(hello App)useEffect(() > {setMsg(hello useEffect)});retu…...

突破网络壁垒:实现 Mac SSH 访问 Windows WSL Ubuntu 的最佳实践20250301

突破网络壁垒:实现 Mac SSH 访问 Windows WSL Ubuntu 的最佳实践 背景与痛点 在现代开发环境中,开发者通常会面临不同操作系统之间的协同工作。例如: 主要开发环境位于 Windows 的 WSL Ubuntu 子系统需要从局域网内的 Mac 设备进行远程访问…...

【开源-鸿蒙土拨鼠大理石系统】鸿蒙 HarmonyOS Next App+微信小程序+云平台

✨本人自己开发的开源项目:土拨鼠充电系统 ✨踩坑不易,还希望各位大佬支持一下,在GitHub给我点个 Start ⭐⭐👍👍 ✍GitHub开源项目地址👉:https://github.com/lusson-luo/HarmonyOS-groundhog-…...

RAG 阿里云

RAG-阿里云Spring AI Alibaba官网官网 RAG-阿里云Spring AI Alibaba官网官网 AI应用跑起来,取消一下航班的操作666...

python -ssh学习

def exe_sshcmd(ip,username,userpswd,port,cmd): """ 功能:SSH登录到指定设备,并执行对应的命令 入参:前四项为ssh登录shell的ip和port,具备管理员权限的用户名和密码, cmd可以…...

【Java学习】内部类

面向对象系列六 一、类级别 1.静态成员 2.非静态成员与方法 二、类的创建与成员管理 1.类的创建 2.类的成员管理 三、常见的内部类 1.非静态内部类 2.静态内部类 3.匿名内部类 4.局部内部类 一、类级别 1.1静态成员 静态成员是类级别的是能一路直属都是在类层面的&…...

养生,开启健康生活之门

在这个快节奏的时代,人们在忙碌奔波中,往往忽略了自身健康。养生保健,不再是老年人的专属,而是各个年龄段维持良好生活状态的关键,它是我们开启健康生活的一把钥匙。 规律作息是养生的基石。人体就像一台精密的仪器&am…...

1-3压缩命令

文章目录 1. tar1.1 压缩(.tar.gz .tgz .tar.bz2 )1.2 解压缩(.tar.gz .tgz .tar.bz2 ) 2.zip2.1 压缩(.zip)2.2 解压缩 3.xz3.1 压缩(.tar.xz)3.2 解压缩 1. tar 1.1 压缩(.tar.gz .tgz .tar.bz2 ) c…...

Dify使用和入门

第一步:了解 Dify 在开始之前,先简单了解一下 Dify 是什么: Dify 是一个开源的 LLM 应用开发平台,专注于帮助开发者快速构建生产级的生成式 AI 应用。它支持知识库集成、RAG(检索增强生成)技术、复杂工作…...

AcWing 5933:爬楼梯 ← 递归 / 递推 / 高精度

【题目来源】 https://www.acwing.com/problem/content/5936/ 【题目描述】 树老师爬楼梯,他可以每次走 1 级或者 2 级,输入楼梯的级数,求不同的走法数。 例如:楼梯一共有 3 级,他可以每次都走一级,或者第…...

WebGL 渲染器 WebGLRenderer

目录 Three.js封装的渲染器 .domElement属性 .setSize(width, height)方法 帧缓冲区的相关封装 渲染器方法.clear(color,depth,stencil) 渲染器方法.clearDepth() 渲染器属性.autoClear Three.js封装的渲染器 .domElement属性 如果想通过WebGL渲染一个三维场景&#…...

基于Three.js的3D赛车游戏开发实战详解

目录 一、项目效果预览二、核心技术架构2.1 三维场景构建2.2 赛道与车辆模型2.3 光照系统三、核心运动系统3.1 车辆运动控制3.2 物理模拟公式3.3 边界限制四、摄像机控制系统4.1 第三人称视角数学原理4.2 鼠标交互实现五、星空背景特效5.1 点云生成算法5.2 动态闪烁效果六、性能…...

⭐算法OJ⭐位操作实战【计数】(C++ 实现)

191. Number of 1 Bits Given a positive integer n, write a function that returns the number of set bits in its binary representation (also known as the Hamming weight). int hammingWeight(uint32_t n) {int count 0;while (n) {count n & 1; // 检查最低位…...

【通俗讲解电子电路】——从零开始理解生活中的科技(一)

导言:电子电路为什么重要? ——看不见的“魔法”,如何驱动你的生活? 清晨,当你的手机闹钟响起时,你可能不会想到,是电子电路在精准控制着时间的跳动;当你用微波炉加热早餐时&#…...

浏览器JS打不上断点,一点就跳到其他文件里。浏览器控制台 js打断点,指定的位置打不上断点,一打就跳到其他地方了。

关闭JavaScript 源代码映射,F12开发者模式 设置->偏好设置->源代码/来源->JavaScript 源代码映射。 肯定不是这个原因导致的,但这个办法可以暂时解决问题,点完这个东西就隐藏了webpack,有懂的来讲讲。 又浪费一个小时…...

浅谈人工智能之Windows安装llama factory

浅谈人工智能之Windows安装llama factory Llama Factory 是一个强大的工具,旨在帮助用户轻松管理和优化Llama模型的训练和部署。在某些情况下,您可能需要在部分互联网连接的环境中安装和使用Llama Factory。本文将详细介绍如何在Windows系统上这种情况下…...

mac电脑中使用无线诊断.app查看连接的Wi-Fi带宽

问题 需要检查连接到的Wi-Fi的AP硬件支持的带宽。 步骤 1.按住 Option 键,然后点击屏幕顶部的Wi-Fi图标;2.从下拉菜单中选择 “打开无线诊断”(Open Wireless Diagnostics);3.你可能会看到一个提示窗口,…...

Python--内置模块和开发规范(下)

2. 开发规范 2.1 单文件应用 文件结构示例 # 文件注释 import os import jsonDB_PATH "data.json" # 常量放顶部def load_data():"""函数注释:加载数据"""if os.path.exists(DB_PATH):with open(DB_PATH, "r"…...

vue3配置端口,比底部vue调试

import { fileURLToPath, URL } from ‘node:url’ import { defineConfig } from ‘vite’ import vue from ‘vitejs/plugin-vue’ import vueJsx from ‘vitejs/plugin-vue-jsx’ // 关闭vue底部调试模式 // import vueDevTools from ‘vite-plugin-vue-devtools’ // htt…...

代码随想录day51

647. /** lc appleetcode.cn id647 langcpp** [647] 回文子串*/// lc codestart #include<iostream> #include<vector> #include<string> using namespace std; class Solution { public:int countSubstrings(string s) {vector<vector<bool>> …...

B2B2C多语言电商系统代销逻辑设计和开发

随着全球电商市场的快速发展&#xff0c;B2B2C&#xff08;Business-to-Business-to-Consumer&#xff09;模式逐渐成为企业拓展业务的重要方式。特别是在多语言、多文化的国际市场环境中&#xff0c;B2B2C多语言电商系统的代销功能为企业提供了灵活的业务模式&#xff0c;帮助…...

示波器探头衰减值:简单来说就是“信号缩小器

一、什么是衰减值 衰减值就是探头把信号“缩小”多少倍再传给示波器。比如&#xff1a; 1X衰减&#xff1a;信号原样传输&#xff08;不缩小&#xff09;&#xff0c;适合测小电压&#xff08;比如手机电池3.7V&#xff09;。 10X衰减&#xff1a;信号缩小10倍&#xff0c;适…...

Nginx系列06(Nginx 缓存配置、SSL/TLS 配置)

目录 Nginx 缓存配置 SSL/TLS 配置 Nginx 缓存配置 概念&#xff1a;Nginx 缓存配置允许服务器将频繁访问的资源&#xff08;如网页、图片、脚本等&#xff09;存储在内存或磁盘中&#xff0c;当再次接收到相同请求时&#xff0c;直接从缓存中读取并返回&#xff0c;减少对后…...

JavaScript——前端基础3

目录 JavaScript简介 优点 可做的事情 运行 第一个JavaScript程序 搭建开发环境 安装的软件 操作 在浏览器中使用JavaScript文件 分离JS 使用node运行JS文件 语法 变量与常量 原生数据类型 模板字符串 字符串的内置方法 数组 对象 对象数组和JSON if条件语…...

操作系统知识点12

1.在操作系统的结构设计中&#xff0c;采用层次结构的操作系统其最大优点是把整体问题局部化 2.非特权指令是指操作系统和用户均可以使用的指令 3.向处理器发出的中断信号称为中断请求 4.轮转法RR是单纯基于时间片考虑的 5.当进程处于就绪状态时&#xff0c;表示进程已获得…...

(七)趣学设计模式 之 适配器模式!

目录 一、 啥是适配器模式&#xff1f;二、 为什么要用适配器模式&#xff1f;三、 适配器模式的实现方式1. 类适配器模式&#xff08;继承插座 &#x1f468;‍&#x1f469;‍&#x1f467;‍&#x1f466;&#xff09;2. 对象适配器模式&#xff08;插座转换器 &#x1f50c…...

RBF神经网络+NSGAII多目标优化算法,工艺参数优化、工程设计优化(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.RBF神经网络NSGAII多目标优化算法&#xff08;Matlab完整源码和数据&#xff09; 多目标优化是指在优化问题中同时考虑多个目标的优化过程。在多目标优化中&#xff0c;通常存在多个冲突的目标&#xff0c;即改善一…...

IP段转CIDR:原理Java实现

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

工会考试知识点分享

工会考试涵盖工会基础知识、劳动法及相关法律法规、时政等内容&#xff0c;以下是一些常见的知识点分享&#xff1a; 工会基础知识 工会的性质与职能&#xff1a;工会是职工自愿结合的工人阶级的群众组织&#xff0c;基本职责是维护职工合法权益&#xff0c;同时还具有组织、…...

Java进阶——Stream流以及常用方法详解

本文详细介绍了 Java Stream 流的重要知识点。包括数据源与操作分离&#xff08;不存储数据&#xff0c;不可复用&#xff09;、惰性求值与短路优化&#xff1b;以及流的创建方式&#xff0c;如集合创建、数组 / 值创建、文件创建&#xff1b;然后介绍中间操作&#xff0c;像过…...

数据如何安全“过桥”?分类分级与风险评估,守护数据流通安全

信息化高速发展&#xff0c;数据已成为企业的核心资产&#xff0c;驱动着业务决策、创新与市场竞争力。随着数据开发利用不断深入&#xff0c;常态化的数据流通不仅促进了信息的快速传递与共享&#xff0c;还能帮助企业快速响应市场变化&#xff0c;把握商业机遇&#xff0c;实…...

Kubernetes LimitRange对于pod 的 update 事件会不会处理?

在 Kubernetes 中&#xff0c;LimitRange 是一个用于限制命名空间中 Pod 或容器资源使用的对象。它主要限制资源请求&#xff08;requests&#xff09;和资源限制&#xff08;limits&#xff09;&#xff0c;如 CPU 和内存。LimitRange 影响的是 Pod 或容器的创建&#xff08;c…...

服务器禁止操作汇总(Server Prohibits 0peration Summary)

服务器禁止操作汇总 一、禁忌操作TOP10 1. 直接断电关机 &#x1f4a5; 血泪案例&#xff1a;某物流公司运维拔电源强制关机&#xff0c;导致数据库事务中断&#xff0c;20万订单状态丢失。 &#x1f4cc; 技术解析&#xff1a; • 直接断电可能引发&#xff1a; ✅ 文件系统…...

Android Studio 新版本Gradle通过JitPack发布Maven仓库示例

发布本地仓库示例&#xff1a;https://blog.csdn.net/loutengyuan/article/details/145938967 以下是基于 Android Studio 24.2.2&#xff08;Gradle 8.10.2 AGP 8.8.0 JDK17&#xff09; 的通过JitPack发布Maven仓库示例&#xff0c;包含aar和jar的不同配置&#xff1a; 1.…...

Spring Boot 测试:单元、集成与契约测试全解析

一、Spring Boot 分层测试策略 Spring Boot 应用采用经典的分层架构&#xff0c;不同层级的功能模块对应不同的测试策略&#xff0c;以确保代码质量和系统稳定性。 Spring Boot 分层架构&#xff1a; Spring Boot分层架构 A[客户端] -->|HTTP 请求| B[Controller 层] …...

一个便捷的web截图库~

随着时间的发展&#xff0c;前端开发的范围越来越广&#xff0c;能够实现的功能也越来越多&#xff0c;要实现的功能也五花八门&#xff0c;今天就给大家介绍一个web截图库,让前端也能实现截图功能—— js-web-screen-shot js-web-screen-shot js-web-screen-shot 是一个基于 …...

【HTML— 快速入门】HTML 基础

准备工作 vscode下载 百度网盘 Subline Text 下载 Sublime Text下载 百度网盘 vscode 下载 Sublime Text 是一款轻量好用的文本编辑器&#xff0c;我们在写前端代码时&#xff0c;使用 Sublime Text 打开比使用记事本打开&#xff0c;得到的代码体验更好&#xff0c;比 vscode…...

github操作

在本地创建一个 Git 仓库并将其上传到 GitHub 的整个流程可以分为以下几个步骤。以下是详细的说明和对应的命令&#xff1a; 1. 安装 Git 确保你的系统已经安装了 Git。如果未安装&#xff0c;可以通过以下方式安装&#xff1a; Windows: 下载 Git for Windows 并安装。macOS…...

基于ArcGIS Pro、R、INVEST等多技术融合下生态系统服务权衡与协同动态分析实践应用

文章目录 前言第一章、生态系统服务第二章、平台基础一、ArcGIS Pro介绍二、R环境配置与基础操作 第三章、数据获取与预处理第四章、生态系统服务估算第五章、生态系统服务权衡与协同第六章、空间统计分析第七章、论文撰写与图表复现了解更多 ————————————————…...

Python Cookbook-2.18 从指定的搜索路径寻找文件

任务 给定一个搜索路径(一个描述目录信息的字符串)&#xff0c;需要根据这个路径和请求的文件名找到第一个符合要求的文件。 解决方案 需要循环指定的搜索路径中的目录: import os def search_file(filename,search path&#xff0c;pathsepos.pathsep): """…...

遗传算法详解及在matlab中的使用

遗传算法分析 一 遗传算法概述1 算法概念2 基本特点3 启发式算法 二 原理与方法1 实现步骤1.1 个体编码1.2 种群初始化1.3 适应度计算1.4 选择运算1.5 交叉运算1.6 变异运算 2 总结 三 应用实例1 GA工具使用教程2 设置目标函数3 搜索最小值4 搜索最大值 一 遗传算法概述 本章简…...

智能AI替代专家系统(ES)、决策支持系统(DSS)?

文章目录 前言一、专家系统&#xff08;ES&#xff09;是什么&#xff1f;二、决策支持系统&#xff08;DSS&#xff09;是什么&#xff1f;1.决策支持系统定义2.决策系统的功能与特点3.决策支持系统的组成 三、专家系统&#xff08;ES&#xff09;与决策支持系统&#xff08;D…...