首先我们把前面mib2c生成的文件修改 下面重新做了个简单点的MIB树

--
-- 
-- MIB generated by MG-SOFT Visual MIB Builder Version 6.0  Build 88
-- Saturday, July 26, 2025 at 09:24:54
--ARHANGELSK-GLOBAL-REG DEFINITIONS ::= BEGINIMPORTSenterprises, OBJECT-TYPE, MODULE-IDENTITY			FROM SNMPv2-SMI;-- 1.3.6.1.4.1.2arhangelskNode1 MODULE-IDENTITY LAST-UPDATED "202507251837Z"		-- July 25, 2025 at 18:37 GMTORGANIZATION "Organization."CONTACT-INFO "Contact-info."DESCRIPTION "Description."::= { enterprises 2 }--
-- Node definitions
---- 1.3.6.1.4.1.2.1arhangelskNode0 OBJECT-TYPESYNTAX INTEGERMAX-ACCESS read-writeSTATUS currentDESCRIPTION"Description."::= { arhangelskNode1 1 }END--
-- 
--

只有一个int型的值 可读写

然后我们使用mib2c生成对应的框架代码 ,这里只有标量 所以只需要生成一次,生成之后我们把对应的c文件改成如下:

/** Note: this file originally auto-generated by mib2c* using mib2c.scalar.conf*/#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include "arhangelskNode1.h"/* 定义标量节点的 OID 和存储变量 */
#define ARHANGELSKNODE0_OID "1.3.6.1.4.1.2.1"
static int arhangelskNode0_value = 42;  // 初始值
/** Initializes the arhangelskNode1 module */
void
init_arhangelskNode1(void)
{const oid arhangelskNode0_oid[] = { 1,3,6,1,4,1,2,1 };DEBUGMSGTL(("arhangelskNode1", "Initializing\n"));netsnmp_register_scalar(netsnmp_create_handler_registration("arhangelskNode0", handle_arhangelskNode0,arhangelskNode0_oid, OID_LENGTH(arhangelskNode0_oid),HANDLER_CAN_RWRITE));
}int
handle_arhangelskNode0(netsnmp_mib_handler *handler,netsnmp_handler_registration *reginfo,netsnmp_agent_request_info   *reqinfo,netsnmp_request_info         *requests)
{int ret;int new_value;/* We are never called for a GETNEXT if it's registered as a"instance", as it's "magically" handled for us.  *//* a instance handler also only hands us one request at a time, sowe don't need to loop over a list of requests; we'll only get one. */switch(reqinfo->mode) {case MODE_GET:/* 返回当前值 */snmp_set_var_typed_value(requests->requestvb,ASN_INTEGER,  // 数据类型(u_char*)&arhangelskNode0_value,  // 数据指针sizeof(arhangelskNode0_value)     // 数据长度);break;/** SET REQUEST** multiple states in the transaction.  See:* http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg*/case MODE_SET_RESERVE1:/* 验证输入类型 */ret = netsnmp_check_vb_type(requests->requestvb, ASN_INTEGER);if (ret != SNMP_ERR_NOERROR) {netsnmp_set_request_error(reqinfo, requests, ret);return ret;}break;case MODE_SET_RESERVE2:/* 分配临时存储(非必需,此处省略) */break;case MODE_SET_FREE:/* 释放临时资源(此处省略) */break;case MODE_SET_ACTION:/* 更新值并验证范围 */new_value = *(int*)requests->requestvb->val.string;if (new_value < 0 || new_value > 100) {return SNMP_ERR_WRONGVALUE;  // 值越界}arhangelskNode0_value = new_value;break;break;case MODE_SET_COMMIT:/* 提交变更(此处省略) */break;case MODE_SET_UNDO:/* 回滚变更(此处省略) */break;default:/* we should never get here, so this is a really bad error */snmp_log(LOG_ERR, "unknown mode (%d) in handle_arhangelskNode0\n", reqinfo->mode );return SNMP_ERR_GENERR;}return SNMP_ERR_NOERROR;
}

这里主要修改了设置和获取值时候的逻辑

修改完之后 我们就可以把这些代码集成到net-snmp

我们先从官网下载net-snmp

Net-SNMP

这里我下载的是net-snmp-5.9.4

先安装依赖环境

apt install -y build-essential libssl-dev libperl-dev pkg-config

然后解压源码包,解压后:

把我们前面mib2c生成的.c .h文件拷贝到源码目录agent/mibgroup下面

然后进行配置 configure后面接的是我们的模块名

./configure --with-mib-modules="arhangelskNode1"

然后就是 编译生成 make 、make install

完成之后 会在 snmpd 会拷贝到 /usr/local/sbin/snmpd

源码编译之后没有snmpd.conf 自己可以从其他地方拷贝一个 或者vi新建一个

然后就可以通过 如下命令启动snmpd snmpd.conf在当前目录下

snmpd -c snmpd.conf 

如果提示

snmpd: error while loading shared libraries: libnetsnmpagent.so.40: cannot open shared object file: No such file or directory

实际这个文件存在

这个时候需要ldconfig就好了

有其他文件我们可以通过snmpd -c /etc/snmp/snmpd.conf -f -Le -d 命令调试启动过程中遇到的问题

启动之后我们就可以测试了

假设我们的配置文件snmpd.conf如下:

# 创建用户时指定不同密码
createUser test MD5 "12345678" DES "123456789"
rwuser test# 视图配置
view SystemView included .1.3.6.1.4.1.2
view SystemView included .1.3.6.1.2.1.25.1# 访问控制
rocommunity public default -V SystemView

然后我们启动snmpd 测试结果如下

注意最后一项 不能省略后面的.0 不然会提示有问题 这里也可以看到 DES没有用 具体我也不知道为什么 但是如果带了des参数的话不能太短 应该是对密码长度有要求

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【动态规划-斐波那契数列模型】理解动态规划:斐波那契数列的递推模型

算法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;动态规划是一种解决最优化问题的强大技术&#xff0c;通过将问题分解为子问题并逐步求解来实现高效计算。斐波那契数列是动态规划中经典的应用之一&#xff0c;其递推关系非常适合用动态规划进行优化。通过动态…

微信小程序 自定义带图片弹窗

1. 微信小程序 自定义带图片弹窗1.1. 实现思路使用官方组件实现图片模态弹窗。首先找到官方文档&#xff1a;​显示模态弹窗的API wx.showModal(OBJECT)wx.showModal参数介绍发现并没有设置图片的参数&#xff0c;但是这是一个API&#xff0c;但是组件呢&#xff1f;我并没有在…

私有化大模型架构解决方案构建指南

内容概要本指南旨在为企业提供私有化大模型架构解决方案的全面构建路径&#xff0c;帮助其在保障数据隐私的同时提升业务效率。我们将系统解析关键环节&#xff0c;包括安全部署策略设计、模型训练核心技术、持续优化机制构建以及知识管理实践路径。此外&#xff0c;指南还涵盖…

面试150 查找和最小的K对数字

思路1 超时法&#xff1a;通过两个循环记录三元组[num1,num2,num1num2]然后通过num1num2从小到大进行排序&#xff0c;然后返回前K个对数中的前两个数即可。 class Solution:def kSmallestPairs(self, nums1: List[int], nums2: List[int], k: int) -> List[List[int]]:if n…

vscode目录,右键菜单加入用VSCode打开文件和文件夹(快速解决)(含删除)(脚本)

1.创建文本文件 在桌面右键单击&#xff0c;选择“新建” > “文本文档”&#xff0c;将其命名为“vscode.txt”2.复制代码内容3.修改文件扩展名 右键单击“vscode.txt”文件&#xff0c;选择“重命名”&#xff0c;将文件扩展名从.txt改为.reg&#xff0c;使其成为“vscode…

Chart.js 柱形图详解

Chart.js 柱形图详解 引言 在数据可视化领域&#xff0c;柱形图是一种非常常见的图表类型&#xff0c;它能够直观地展示不同类别或组的数据之间的比较。Chart.js 是一个基于 HTML5 Canvas 的开源库&#xff0c;它提供了一系列的图表绘制功能&#xff0c;其中包括柱形图。本文将…

沉浸式文旅新玩法-基于4D GS技术的真人数字人赋能VR体验升级

线下沉浸式剧场与 LBE VR 相结合&#xff0c;会碰撞出什么样的火花&#xff1f;本次 PICO 视频、东方演艺集团与火山引擎一起&#xff0c;将沉浸式演出《只此周庄》的部分场景复刻到了 VR 世界&#xff0c;让用户在虚拟的古代周庄夜市里&#xff0c;体验了古老的故事以及精彩纷…

C程序内存布局详解

C程序内存布局详解 1. 内存布局概述 C程序在内存中分为以下几个主要区域&#xff08;从低地址到高地址&#xff09;&#xff1a; 代码段&#xff08;.text&#xff09;只读数据段&#xff08;.rodata&#xff09;初始化数据段&#xff08;.data&#xff09;未初始化数据段&…

新手向:Git下载全攻略

Git 的安装与重要性在现代软件开发中&#xff0c;版本控制是必不可少的工具&#xff0c;而 Git 是目前最流行的分布式版本控制系统。无论是个人开发者还是大型团队&#xff0c;Git 都能高效管理代码变更&#xff0c;确保项目历史清晰可追溯。安装 Git 是开发者入门的第一步&…

linux中如何清除history命令

写在前面 使用ssh远程连接客户端连接上linux后操作的命令多了&#xff0c;有时候需要清除对应的历史命令记录&#xff0c;可以通过下面几种方式实现。第一种方法 通过修改.bash_history文件 这是最简单直接的方法&#xff0c;但是只会影响当前用户的历史记录。执行以下命令即可…

PHP插件开发中的一个错误:JSON直接输出导致网站首页异常

问题描述 最近在使用步数统计插件&#xff08;WeFootStep&#xff09;时&#xff0c;发现网站首页完全变成了一段JSON数据&#xff0c;而不是正常的HTML页面。具体表现为首页显示如下内容&#xff1a; {"results":"<li><a href\"https:\/\/blog…

落霞归雁的思维框架:十大经典思维工具的源头活水

在当今复杂多变的世界中&#xff0c;思维框架成为了解决问题、优化决策和提升效率的重要工具。提到思维框架&#xff0c;人们往往会想到那些被广泛认可和应用的十大经典思维工具&#xff1a;金字塔原理、黄金圈法则、5W1H分析法、SWOT分析、SCQA模型、STAR法则、PDCA循环、六顶…

spring Could 高频面试题

一、基础概念Spring Cloud 的核心组件有哪些&#xff1f; 答案&#xff1a;Eureka/Nacos&#xff08;服务注册发现&#xff09;、Ribbon/LoadBalancer&#xff08;负载均衡&#xff09;、Feign/OpenFeign&#xff08;声明式HTTP客户端&#xff09;、Hystrix/Sentinel&#xff0…

从零开始的云计算生活——番外6,使用zabbix对中间件监控

目录 一.网络设备监控 1、GNS模拟器的使用 创建路由 创建交换机 2.构建网络 3.添加Cisco路由器的监控 二.中间件监控 1、MySQL数据库监控 1.1、拷贝自定义的监控脚本到指定目录 1.2、添加监控用户 1.3、重启zabbix-agent服务 1.4、在zabbix-server服务端测试数据 1…

haproxy七层均衡

一.haproxy的安装和服务信息1.1实验环境ip实验设备172.25.254.100haproxy172.25.254.10RS1172.25.254.20RS2172.25.254.111client1.2软件安装及配置haproxy主机上配置#下载#进入此文件进行编辑#关闭防火墙RS1主机上配置#下载#生成默认文件#重启#关闭防火墙RS2主机上配置#下载#生…

分类预测 | MATLAB实现CPO-SVM冠豪猪算法优化支持向量机分类预测

分类预测 | MATLAB实现CPO-SVM冠豪猪算法优化支持向量机分类预测 目录 分类预测 | MATLAB实现CPO-SVM冠豪猪算法优化支持向量机分类预测 分类效果 基本介绍 算法步骤 参数设定 运行环境 应用场景 程序设计 参考资料 分类效果 基本介绍 该MATLAB代码实现了基于冠豪猪优化算法(…

【MySQL 数据库】MySQL基本查询(第二节)

文章目录&#x1f4dd;Update&#x1f309; 将孙悟空同学的数学成绩变更为 80 分&#x1f309; 将曹孟德同学的数学成绩变更为60分&#xff0c;语文成绩变更为70分&#x1f309; 将总成绩倒数前三的3位同学的数学成绩加上30分&#x1f309;将所有同学的语文成绩更新为原来的2倍…

Axios 响应拦截器

1.定义&#xff1a;响应拦截器&#xff08;Response Interceptor&#xff09;是一个可以在 axios 接收到服务器响应后&#xff0c;响应数据交给 .then() 处理之前执行的函数。你可以用它来统一处理响应数据&#xff0c;进行错误处理&#xff0c;或者对返回的数据做格式化和转换…

k8s的nodeport和ingress

1.流量转发图targerport转发到实际的容器端口containerPort&#xff08;后端端口&#xff09;nodeportingress2.配置场景总结字段作用对象必填示例值何时配置containerPort容器否80需明确记录容器端口时&#xff08;推荐&#xff09;targetPortPod是80定义 Service 转发规则时p…

VLA:自动驾驶的“新大脑”?

&#x1f525; 什么是 VLA&#xff1f;为什么突然火了&#xff1f;在自动驾驶圈子里&#xff0c;最近一个词特别火&#xff1a;VLA。它不是某个新车的型号&#xff0c;也不是某家公司的新品牌&#xff0c;而是一种全新的智能架构&#xff0c;被称为“自动驾驶的大脑2.0”。&…