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

snmp 自定义子代理mib库

 测试环境:centos8

1、安装软件

yum install -y net-snmp net-snmp-utils 
yum install -y net-snmp-perl net-snmp-devel net-snmp-libs

2、创建用户

net-snmp-create-v3-user
输入用户名 soft
输入密码 123456
输入密码 654321

service snmpd restart

3、创建mib文件

cd /usr/local/share/snmp/mibs

vim TEST-MIB.txt

--开始
TEST-MIB DEFINITIONS ::= BEGIN--引入部分
IMPORTSDisplayString,TestAndIncr,PhysAddress,MacAddress,DateAndTime,RowStatus,TEXTUAL-CONVENTIONFROM SNMPv2-TCenterprisesFROM RFC1155-SMIMODULE-IDENTITY,OBJECT-TYPE,NOTIFICATION-TYPE,Integer32,IpAddress,TimeTicks,Unsigned32FROM SNMPv2-SMI;
--引用结束,用分号--定义节点
--enterprises的OID是1.3.6.1.4
testMib    OBJECT IDENTIFIER ::= { enterprises 20001 }system OBJECT IDENTIFIER ::= { testMib  1 }--set节点
systemAlarmSet OBJECT IDENTIFIER ::= { system 3 }setMemThreshold  OBJECT-TYPE
SYNTAX      TestAndIncr
MAX-ACCESS  read-write
STATUS      current
DESCRIPTION "set cpu Threshold"
::= { systemAlarmSet 1 }setCpuThreshold OBJECT-TYPE
SYNTAX      DisplayString
MAX-ACCESS  read-write
STATUS      current
DESCRIPTION "set cpu Threshold"
::= { systemAlarmSet 2}--结束定义
END

生成.c和.h文件

sudo env MIBS="+/usr/share/snmp/mibs/TEST-MIB.txt" mib2c testMib

选择
2
1
y

查看mib树

snmptranslate -Tp -IR TEST-MIB::testMib

修改.c文件

vim testMib.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 "testMib.h"long  value = 0;
char *value2 = 0;/** Initializes the testMib module */
void
init_testMib(void)
{const oid setMemThreshold_oid[] = { 1,3,6,1,4,1,20001,1,3,1 };const oid setCpuThreshold_oid[] = { 1,3,6,1,4,1,20001,1,3,2 };DEBUGMSGTL(("testMib", "Initializing\n"));netsnmp_register_scalar(netsnmp_create_handler_registration("setMemThreshold", handle_setMemThreshold,setMemThreshold_oid, OID_LENGTH(setMemThreshold_oid),HANDLER_CAN_RWRITE));netsnmp_register_scalar(netsnmp_create_handler_registration("setCpuThreshold", handle_setCpuThreshold,setCpuThreshold_oid, OID_LENGTH(setCpuThreshold_oid),HANDLER_CAN_RWRITE));
}int
handle_setMemThreshold(netsnmp_mib_handler *handler,netsnmp_handler_registration *reginfo,netsnmp_agent_request_info   *reqinfo,netsnmp_request_info         *requests)
{int ret;/* 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 *) &value/* XXX: a pointer to the scalar's data */,sizeof(value)/* XXX: the length of the data in bytes */);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:/* or you could use netsnmp_check_vb_type_and_size instead */ret = netsnmp_check_vb_type(requests->requestvb, ASN_INTEGER);if ( ret != SNMP_ERR_NOERROR ) {netsnmp_set_request_error(reqinfo, requests, ret );}break;case MODE_SET_RESERVE2:/* XXX malloc "undo" storage buffer */if (0/* XXX if malloc, or whatever, failed: */) {netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_RESOURCEUNAVAILABLE);}break;case MODE_SET_FREE:/* XXX: free resources allocated in RESERVE1 and/orRESERVE2.  Something failed somewhere, and the statesbelow won't be called. */break;case MODE_SET_ACTION:/* XXX: perform the value change here *///memcpy(&value, setValue, sizeof(setValue));value = *(requests->requestvb->val.integer);if (0/* XXX: error? */) {netsnmp_set_request_error(reqinfo, requests, 0/* some error */);}break;case MODE_SET_COMMIT:/* XXX: delete temporary storage */value = *(requests->requestvb->val.integer);if (0/* XXX: error? */) {/* try _really_really_ hard to never get to this point */netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_COMMITFAILED);}break;case MODE_SET_UNDO:/* XXX: UNDO and return to previous value for the object */if (0/* XXX: error? */) {/* try _really_really_ hard to never get to this point */netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_UNDOFAILED);}break;default:/* we should never get here, so this is a really bad error */snmp_log(LOG_ERR, "unknown mode (%d) in handle_setMemThreshold\n", reqinfo->mode );return SNMP_ERR_GENERR;}return SNMP_ERR_NOERROR;
}
int
handle_setCpuThreshold(netsnmp_mib_handler *handler,netsnmp_handler_registration *reginfo,netsnmp_agent_request_info   *reqinfo,netsnmp_request_info         *requests)
{int ret;/* 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 *) value2/* XXX: a pointer to the scalar's data */,strlen(value2 + 1 )/* XXX: the length of the data in bytes */);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:/* or you could use netsnmp_check_vb_type_and_size instead */ret = netsnmp_check_vb_type(requests->requestvb, ASN_INTEGER);if ( ret != SNMP_ERR_NOERROR ) {netsnmp_set_request_error(reqinfo, requests, ret );}break;case MODE_SET_RESERVE2:/* XXX malloc "undo" storage buffer */if (0/* XXX if malloc, or whatever, failed: */) {netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_RESOURCEUNAVAILABLE);}break;case MODE_SET_FREE:/* XXX: free resources allocated in RESERVE1 and/orRESERVE2.  Something failed somewhere, and the statesbelow won't be called. */break;case MODE_SET_ACTION:/* XXX: perform the value change here */if (0/* XXX: error? */) {netsnmp_set_request_error(reqinfo, requests, 0/* some error */);}break;case MODE_SET_COMMIT:/* XXX: delete temporary storage */free(value2);value2 = strdup((char*)requests->requestvb->val.string);if (0/* XXX: error? */) {/* try _really_really_ hard to never get to this point */netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_COMMITFAILED);}break;case MODE_SET_UNDO:/* XXX: UNDO and return to previous value for the object */if (0/* XXX: error? */) {/* try _really_really_ hard to never get to this point */netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_UNDOFAILED);}break;default:/* we should never get here, so this is a really bad error */snmp_log(LOG_ERR, "unknown mode (%d) in handle_setCpuThreshold\n", reqinfo->mode );return SNMP_ERR_GENERR;}return SNMP_ERR_NOERROR;
}

修改配置

vim /etc/snmp/snmpd.conf

master agentx
rwcommunity public

代理加载
net-snmp-config --compile-subagent testMib testMib.c

./testMib

重启服务

service snmpd restart

测试

snmpwalk -v3 -u soft -A 123456 -a MD5 -l authPriv  -X 654321 -x DES localhost 1.3.6.1.4.1.20001.1.3.1.0

snmpset -v3 -u soft -A 123456 -a MD5 -l authPriv  -X 654321 -x DES localhost 1.3.6.1.4.1.20001.1.3.1.0 i 20

snmpwalk -v3 -u soft -A 123456 -a MD5 -l authPriv  -X 654321 -x DES localhost 1.3.6.1.4.1.20001.1.3.2.0

snmpset -v3 -u soft -A 123456 -a MD5 -l authPriv  -X 654321 -x DES localhost 1.3.6.1.4.1.20001.1.3.2.0 s 'hello'

 

 

相关文章:

snmp 自定义子代理mib库

测试环境&#xff1a;centos8 1、安装软件 yum install -y net-snmp net-snmp-utils yum install -y net-snmp-perl net-snmp-devel net-snmp-libs 2、创建用户 net-snmp-create-v3-user 输入用户名 soft 输入密码 123456 输入密码 654321 service snmpd restart 3、创建…...

一文说透安全沙箱技术

在数字经济的东风中&#xff0c;数据安全至关重要。目前已经颁布了包括《数据安全法》、《个人信息保护法》和《数据安全管理办法》在内的国家政策&#xff0c;以促进整个数据要素的发展。 而近年来&#xff0c;随着移动应用程序的普及和小程序技术的崛起&#xff0c;安全沙箱…...

Java多线程基础面试总结(二)

创建三种线程的方式对比 使用实现Runnable、Callable接口的方式创建多线程。 优势 Java的设计是单继承的设计&#xff0c;如果使用继承Thread的方式实现多线程&#xff0c;则不能继承其他的类&#xff0c;而如果使用实现Runnable接口或Callable接口的方式实现多线程&#xf…...

NS32F407VGT6 NS32F407VET6软硬件通用STM32F407VGT6 407VET6

NS32F407VGT6 NS32F407VET6 器件基于高性能的 ARM Cortex-M4 32 位 RISC 内核&#xff0c;工作频率高达 168MHz 。 Cortex-M4 内核带有单精度浮点运算单元 (FPU) &#xff0c;支持所有 ARM 单精度数据处理指令和数据类型。它还 具有一组 DSP 指令和提高应用安全性的一…...

Openstack: network: ovs: dpif/show 实例分析:interface

[TOC 实例 [cbis-adminovercloud–13 (overcloudrc) ~]$ sudo ovs-appctl dpif/show systemovs-system: hit:75198007884 missed:109924265 br-ex: br-ex 65534/3: (internal) ,65534 是port number; OpenFlow port number&#xff1b; 3 是 ofp_port_to_odp_port(ofproto, o…...

必要的项目管理软件因素

什么样的项目管理软件好&#xff1f;对于一个项目团队来说&#xff0c;从项目开始到项目结束&#xff0c;需要多个部门的配合。每个成员可能会参与一个以上的项目&#xff0c;这通常需要并行的多个项目。据介绍&#xff0c;国外90%以上的项目是用软件管理的&#xff0c;而中国只…...

大学刚毕业,用10000小时,走进字节跳动拿了offer

前言&#xff1a; 没有绝对的天才&#xff0c;只有持续不断的付出。对于我们每一个平凡人来说&#xff0c;改变命运只能依靠努力幸运&#xff0c;但如果你不够幸运&#xff0c;那就只能拉高努力的占比。 2020年7月&#xff0c;我有幸成为了字节跳动的一名测试开发&#xff0c…...

docker 安装 redis

搜索镜像 docker search redis 拉取最新版本 Docker pull redis Docker挂载配置文件 docker run --restartalways --log-opt max-size100m --log-opt max-file2 -p 6379:6379 --name myredis -v /opt/myredis/redis.conf:/etc/redis/redis.conf -v /opt/myredis/data:/d…...

Ceph常见问题

1. CephFS问题诊断 1.1 无法创建 创建新CephFS报错Error EINVAL: pool ‘rbd-ssd’ already contains some objects. Use an empty pool instead&#xff0c;解决办法&#xff1a; ceph fs new cephfs rbd-ssd rbd-hdd --force1.2 mds.0 is damaged 断电后出现此问题。MDS进…...

Android---Jetpack之Paging

目录 Paging 组件的意思 Paging 支持的架构类型 Paging 的工作原理 PositionalDataSource PagekeyedDataSource ItemKeyedDataSource BoundaryCallback Paging 组件的意思 分页加载是在应用程序开发过程中十分常见的需求&#xff0c;Paging 就是 Google 为了方便 Andr…...

gensim.models.word2vec() 参数详解

1. Word2vec简介 Word2vec是一个用来产生词向量的模型。是一个将单词转换成向量形式的工具。 通过转换&#xff0c;可以把对文本内容的处理简化为向量空间中的向量运算&#xff0c;计算出向量空间上的相似度&#xff0c;来表示文本语义上的相似度。 2.Word2vec参数详解 class…...

光栅和矢量图像处理SDK:Graphics Mill 11.7Crack

Graphics Mill 是适用于 .NET 和 ASP.NET 开发人员的最强大的成像工具集。它允许用户轻松地向 .NET 应用程序添加复杂的光栅和矢量图像处理功能。 光栅图形 加载和保存 JPEG、PNG PSD 和其他 8 种图像格式 调整大小、裁剪、自动修复、色度键和 30 多种其他图像处理 使用任何维度…...

阿里云的客服 锻炼你心性的 一种方式 !!!

阿里云的产品&#xff0c;非常棒&#xff0c;开发的同学非常棒&#xff0c;专家们更棒&#xff0c;但&#xff0c;一切的开始就怕一个但字&#xff0c;但我还的说&#xff0c;但&#xff0c;阿里云的客服&#xff0c;OMG &#xff0c;我已经忍耐了 1年了&#xff0c;是在忍不住…...

Linux常用的网络命令有哪些?快速入门!

在Linux系统中&#xff0c;有许多常用的网络命令可以用来进行网络配置和故障排除。这些命令可以帮助我们了解网络的状态和性能&#xff0c;并且可以快速诊断和解决网络问题。在本文中&#xff0c;我们将介绍一些常用的Linux网络命令&#xff0c;并提供一些案例来帮助您更好地理…...

PMP认证价值在哪?这个证书有什么用?

PMP证书是全球最权威的项目管理证书之一&#xff0c;获得该证书可以证明持证者具备高水平的项目管理知识和技能&#xff0c;拥有广泛的项目管理经验&#xff0c;并且符合全球项目管理行业的标准和规范。PMP证书的作用主要体现在以下几个方面&#xff1a; 1. 提升竞争力 在全球…...

一条更新语句的执行流程又是怎样的呢?

当一个表上有更新的时候&#xff0c;跟这个表有关的查询缓存会失效&#xff0c;所以这条语句就会把表T上所有缓存结果都清空。这也就是我们一般不建议使用查询缓存的原因。 接下来&#xff0c;分析器会通过词法和语法解析知道这是一条更新语句。优化器决定要使用ID这个索引。然…...

promise异步编程指南

promise 是什么 Promise 是异步编程的一种解决方案&#xff0c;可以替代传统的解决方案–回调函数和事件。ES6 统一了用法&#xff0c;并原生提供了 Promise 对象。作为对象&#xff0c;Promise 有以下两个特点&#xff1a; (1)对象的状态不受外界影响。 (2)一旦状态改变了就不…...

20230411----重返学习-网易云音乐首页案例-git远程仓库

day-047-forty-seven-20230411-网易云音乐首页案例-git远程仓库 网易云音乐首页案例 事件委托 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>2.事件委托</title><style>.parent-box…...

Ansys Zemax | 模拟 AR 系统中的全息光波导:第二部分

AR 系统通常使用全息图将光耦合到波导中。本文展示了如何继续改进 本系列文章的第一部分 &#xff08;点击查看&#xff09;中建模的初步设计。&#xff08;联系我们获取文章附件&#xff09; 简介 AR 是一种允许屏幕上的虚拟世界与现实场景结合并交互的技术。 本文演示了如何…...

常用Git命令

整理了一些常用的git命令&#xff0c;备忘 查看仓库状态 git status查看提交记录 git log创建本地分支 git branch [branch name]创建远程分支 git push origin [branch name]查看本地分支 git branch -v查看远程分支 git branch -a切换分支 git checkout [branch name]查看远程…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

WebRTC调研

WebRTC是什么&#xff0c;为什么&#xff0c;如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...