大佬教程收集整理的这篇文章主要介绍了SNMP代理简单开发,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
1、 参照网上到处能下到的《net-snmp安装配置手册》编译安装net-snmp5.4.2,并参照《net-snmp安装配置手册》进行相应配置。
2、 根据ASN.1语法编写@H_893_3@mIB库BAMBOO-MIB.txt。内容如下:
BAMBOO-MIB DEFINITIONS ::= BEGIN
IMPORTS
TimeTicks FROM SNMPv2-SMI
enterprises FROM SNMPv2-SMI
OBjeCT-GROUP,NOTIFICATION-GROUP FROM SNMPv2-CONF
OBjeCT-TYPE,Integer32,Gauge32,MODULE-IDENTITY NOTIFICATION-TYPE FROM SNMPv2-SMI
TEXTUAL-CONVENTION FROM SNMPv2-Tc;
cdut OBjeCT IDENTIFIER ::= { enterprises 8888 }
ce OBjeCT IDENTIFIER ::= { cdut 8 }
FY0404 OBjeCT IDENTIFIER ::= { ce 4 }
FY04040019 OBjeCT IDENTIFIER ::= { FY0404 19 }
@H_524_78@myVersion OBjeCT-TYPE
SYNTAX OCTET StriNG (SIZE (0..64))
@H_524_78@mAX-ACCESS read-only
STATUS current
DESCRIPTION
"sofware version"
::= { FY04040019 1 }
@H_524_78@mySysResetNo OBjeCT-TYPE
SYNTAX Integer32
@H_524_78@mAX-ACCESS read-write
STATUS current
DESCRIPTION
"if mySysResetNo=1,restart system"
END
3、 在/usr/local/net-snmp/share/snmp下创建snmp.conf,用于配置@H_893_3@mIB库。
在snmp.conf中添加如下内容来加载要添加的@H_893_3@mIB库: @H_783_5@mib +BAMBOO-MIB
再次运行#snmpd –c snmpd.conf –c snmp.conf使配置文件生效。
查看@H_893_3@mIB库是否加载:
# snmptranslate -IR -Tp cdut
+--cdut(8888)
|
+--ce(8)
|
@H_496_450@ +--FY0404(4)
@H_496_450@ |
@H_496_450@ +--FY04040019(19)
@H_496_450@ |
@H_496_450@ +-- -R-- String @H_783_5@myVersion(1)
@H_496_450@ | Size: 0..64
@H_496_450@ +-- -RW- Integer32 mySysResetNo(2)
4、 下面利用@H_893_3@mib2c来生成.c和.h文件(因为该@H_893_3@mIB库中的变量含有String类型,所以选用@H_893_3@mib2c.scalar.conf作为模版)
#mib2c –c mib2c.scalar.conf FY04040019
将生成FY04040019.c和FY04040019.h文件。
5、 修改FY04040019.c文件:
添加以下定义:
#define STRLENGTH 64
char myVersion[STRLENGTH] = "bamboo-1.00";
unsigned mySysResetNo = 0;
添加代码(蓝色部分为添加的代码):
int handle_myVersion(……)
@H_496_450@ ……
case MODE_GET:
@H_496_450@ snmp_set_var_typed_value(requests->requestvb,ASN_OCTET_STR,
(u_char *)myVersion, //++ by Bamboo
sizeof(myVersion) //++ by Bamboo
break;
@H_496_450@ }
@H_496_450@ int handle_mySysResetNo(……)
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb,ASN_IntegeR,
(u_char *)&mySysResetNo, //++ by Bamboo
sizeof(mySysResetNo) //++ bu Bamboo
break;
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:
if (0) { //++by Bamboo
@H_496_450@ netsnmp_set_request_error(reqinfo,
SNMP_ERR_resourcEUNAVAILABLE);
@H_496_450@ }
break;
@H_496_450@ @H_496_450@ case MODE_SET_FREE:
break;
@H_496_450@ case MODE_SET_ACTION:
@H_496_450@ @H_720_756@mySysResetNo = *(requests->requestvb->val.Integer); //++ by Bamboo
if (@H_720_756@mySysResetNo > 1) { //++ by Bamboo
netsnmp_set_request_error(reqinfo,0/* some error */
@H_496_450@ }
break;
case MODE_SET_COMMIT:
@H_496_450@ if (0 ) { //++ by Bamboo
netsnmp_set_request_error(reqinfo,
SNMP_ERR_COMMITFAILED);
@H_496_450@ }
break;
case MODE_SET_UNDO:
if (0) { //++ by Bamboo
/*
* try _really_really_ hard to never get to this point
*/
netsnmp_set_request_error(reqinfo,
SNMP_ERR_UNDOFAILED);
}
break;
……
@H_496_450@ }
6、 下面准备重新编译net-snmp-5.4.2:
将FY04040019.c和FY04040019.h文件拷贝到net-snmp-5.4.2/agent/mibgroup下。
然后重新配置configure文件:
(当前目录为net-snmp-5.4.2)
#./configure –with-mib-modules=”FY04040019” 其他略(其他配置参数参考《net-snmp安装配置手册》)
进行编译和安装(安装目录为net-snmp)#make && make install
再次启动snmp:#snmpd –c snmpd.conf –c snmp.conf
到此@H_893_3@mIB库的扩展以成功了,下面进行验证。
7、 查看@H_893_3@myVersion对象的实例(访问实例一定要在对象后面加“.0”)
# snmpget -v2c -c public 192.168.16.3 1.3.6.1.4.1.8888.8.4.19.1.0
BAMBOO-MIB::myVersion.0 = Hex-StriNG: 62 61 6D 62 6F 6F 2D 31 2E 30 30 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
OK, get成功
设置mySysResetNo的值
# snmpset -v2c -c public localhost 1.3.6.1.4.1.8888.8.4.19.2.0 i 1 //设置为整形数1
BAMBOO-MIB::mySysResetNo.0 = IntegeR: 1
查看@H_893_3@mySysResetNo的值
snmpget -v2c -c public localhost 1.3.6.1.4.1.8888.8.4.19.2.0
BAMBOO-MIB::mySysResetNo.0 = IntegeR: 1
目前存在有待解决的问题:
snmpget -v2c -c public 192.168.16.3 1.3.6.1.4.1.8888.8.4.19.2.0
BAMBOO-MIB::mySysResetNo.0 = IntegeR: 1 //用ip地址来get,是可以的
snmpset -v2c -c public 192.168.16.3 1.3.6.1.4.1.8888.8.4.19.2.0 i 1
Error in packet.
Reason: noAccess
Failed object: BAMBOO-MIB::mySysResetNo.0 //用ip地址来set就不行了
以上是大佬教程为你收集整理的SNMP代理简单开发全部内容,希望文章能够帮你解决SNMP代理简单开发所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。