snmp安装及自定义mib
生活随笔
收集整理的這篇文章主要介紹了
snmp安装及自定义mib
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
準備工作 CentOS7, net-snmp-5.7.2
1.snmp安裝及配置
安裝snmp
- net-snmp: snmp服務端
- net-snmp-utils:snmp客戶端工具集
- net-snmp-perl:snmp mib庫編譯工具
配置snmp
...#com2sec notConfigUser default public # 配置允許訪問agent的地址 com2sec notConfigUser 192.168.51.0/24 public # 這兩行注釋 #view systemview included .1.3.6.1.2.1.1 #view systemview included .1.3.6.1.2.1.25.1.1# 新增,表示可以查看所有的信息 view all included .1 view systemview included .1 # 修改read為all access notConfigGroup "" any noauth exact all none none ...啟動并驗證snmp
# 192.168.52.104 systemctl start snmpd systemctl enable snmpd# snmpwalk -v 2c -c public 192.168.51.104 sysName.0 SNMPv2-MIB::sysName.0 = STRING: work12.mib編寫及加載
自定義mib
# TEST-MIB.txt -- TEST-MIB.txtTEST-MIB DEFINITIONS ::= BEGINIMPORTSOBJECT-GROUP, MODULE-COMPLIANCE, NOTIFICATION-GROUPFROM SNMPv2-CONFenterprises, Integer32, Unsigned32, OBJECT-TYPE, MODULE-IDENTITY,NOTIFICATION-TYPEFROM SNMPv2-SMIDisplayStringFROM SNMPv2-TC;Test MODULE-IDENTITYLAST-UPDATED "202204061450Z" --必須以Z結尾ORGANIZATION""CONTACT-INFO""DESCRIPTION"Video's Server MIB."::= { enterprises 30000 }Time OBJECT IDENTIFIER ::= { Test 1 }GetTime OBJECT-TYPESYNTAX DisplayStringMAX-ACCESS read-onlySTATUS currentDESCRIPTION"Example : 2022/4/6"::= { Time 1 }END -- TEST-MIB.txt移動TEST-MIB.txt到SNMP mibs
mv TEST-MIB.txt usr/share/snmp/mibs/新建目錄并將mib文件轉化為c文件
mkdir mib_test cd mib_test env MIBS="+/usr/share/snmp/mibs/TEST-MIB.txt" mib2c Test #執行完成會生成 Test.h Test.c編譯自定義mib
補全Test.c
/** Note: this file originally auto-generated by mib2c using* $*/#include <net-snmp/net-snmp-config.h> #include <net-snmp/net-snmp-includes.h> #include <net-snmp/agent/net-snmp-agent-includes.h> #include "Test.h"/** Initializes the Test module */ void init_Test(void) {const oid GetTime_oid[] = { 1,3,6,1,4,1,30000,1,1 };DEBUGMSGTL(("Test", "Initializing\n"));netsnmp_register_scalar(netsnmp_create_handler_registration("GetTime", handle_GetTime,GetTime_oid, OID_LENGTH(GetTime_oid),HANDLER_CAN_RONLY)); }int handle_GetTime(netsnmp_mib_handler *handler,netsnmp_handler_registration *reginfo,netsnmp_agent_request_info *reqinfo,netsnmp_request_info *requests) {/* 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. */time_t t;switch(reqinfo->mode) {case MODE_GET:time(&t);char szTime[100];snprintf(szTime,100,"%s",ctime(&t));snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,/* XXX: a pointer to the scalar's data */szTime,/* XXX: the length of the data in bytes */strlen(szTime));break;default:/* we should never get here, so this is a really bad error */snmp_log(LOG_ERR, "unknown mode (%d) in handle_GetTime\n", reqinfo->mode );return SNMP_ERR_GENERR;}return SNMP_ERR_NOERROR; }編寫makefile
CC=gcc FLAGS=-I. `net-snmp-config --cflags` -g DLFLAGS=-shared -fPIC -gTest.so: Test.c$(CC) $(CFLAGS) $(DLFLAGS) -c -o Test.o Test.c$(CC) $(CFLAGS) $(DLFLAGS) -o Test.so Test.o.PHONY : clean clean :rm -f *.so *.o執行編譯
make makefile # 執行完畢會生成Test.so配置snmp加載Test.so
# 配置snmp /etc/snmp/snmpd.conf# 最后添加 dlmod Test /root/aa/Test.so重新啟動snmp
systemctl restart snmpd systemctl status snmpd #查看snmpd是否正常啟動3.驗證自定義的mib是否生效
snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.30000.1.1 SNMPv2-SMI::enterprises.30000.1.1.0 = STRING: "Wed Apr 6 10:20:53 2022 "4.mib的添加方式
常見的snmp添加自定義mib庫的方式有以下3種
靜態加載
將生成的.c和.h文件加入到相應的位置,重新編譯snmp庫,優點是不需要修改配置文件,缺點是每次添加都得重新編譯,方式如下。
# 把Test.c和Test.h復制到net-snmp源碼中 net-snmp-5.7.2/agent/mibgroup,然后編譯安裝./configure --prefix=/usr/local/snmp --with-mib-modules=Test,make && make install動態加載
將生成的.c和.h文件再編譯成.so庫,修改snmpd.conf配置文件,優點是每次添加不需要重新編譯,缺點是必須支持dlmod命令。
子代理擴展
將生成的.c和.h文件編譯成可執行程序,運行該程序和snmpd即可,優點是操作簡單,缺點是需要運行兩個程序才行,方式如下。
# 生成Test程序: net-snmp-config --compile-subagent Test Test.c # 啟動snmpd,Test systemctl start snmpd ./Test總結
以上是生活随笔為你收集整理的snmp安装及自定义mib的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于SNMP网络管理系统的实现
- 下一篇: SNMP-简单网络管理协议