当前位置: 首页 > 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]查看远程…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇

根据 QYResearch 发布的市场报告显示&#xff0c;全球市场规模预计在 2031 年达到 9848 万美元&#xff0c;2025 - 2031 年期间年复合增长率&#xff08;CAGR&#xff09;为 3.7%。在竞争格局上&#xff0c;市场集中度较高&#xff0c;2024 年全球前十强厂商占据约 74.0% 的市场…...

k8s从入门到放弃之Pod的容器探针检测

k8s从入门到放弃之Pod的容器探针检测 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;容器探测是指kubelet对容器执行定期诊断的过程&#xff0c;以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...