SNMP GetNext接口规范

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SNMP GetNext接口规范相关的知识,希望对你有一定的参考价值。

这里我们可以把范围限定在SNMP V1.0之内。
粗浅找了一些SNMP的资料,对于GetNext接口这一块,大多只是一些描述,并无深入解说。

GetNext只是SNMP获取对象值的其中一种方式,它获取的,传入OID点之后的那个OID点的值
例如,有三个OID依次相邻的对象 a b c
想要通过GetNext获取对像b的值,需要传入a对象的OID作参数;
同理,想要通过GetNext接口获取对象c的值,需要对象b的OID作参数。

那下面我的问题就来了:
用GetNext接口,传入对象a的OID作为参数,本意是想获取b的值;
那么当b的值由于一些原因获取不到时,GetNext接口应该返回什么?
是返回获取失败,还是返回b之后的c的值,或是返回a之后最近的一个取值成功的点的值?

请从SNMP规范的角度来解答,即SNMP规范里面GetNext的接口是怎样的,而不是某个厂家或某个公司的实现机制是怎样的。
如能在SNMP V2.0 V3.0之外再纵向比较,则答案会更全面更令人满意。

关于snmp编程的资料其实很多。我建议你下载net-snmp开发包,看看里面的代码!他是用C语言编写的,编译后可以linux系统上测试。现成api是没有,不过你可以在这个开发包找到很多有用的函数。你可以重点看一下asn.c(有关ber编码文件)snmp_api.c(解析封装snmp包的)。你把这些文件好好整理一下,就可以得到自己的api,这就是最好的列子。
我自己动手写过snmp协议,实现get、getnext、set、snmptrap命令。代码不会很长,只有几千行。
如果有问题发邮件到wmz303@126.com进行交流
参考技术A 关于snmp编程的资料其实很多。我建议你下载net-snmp开发包,看看里面的代码!他是用C语言编写的,编译后可以linux系统上测试。现成api是没有,不过你可以在这个开发包找到很多有用的函数。你可以重点看一下asn.c(有关ber编码文件)snmp_api.c(解析封装snmp包的)。你把这些文件好好整理一下,就可以得到自己的api,这就是最好的列子。
我自己动手写过snmp协议,实现get、getnext、set、snmptrap命令。代码不会很长,只有几千行。
如果有问题发邮件到wmz303@126.com进行交流

snmpwalk

什么是snmpwalk?
snmpwalk是一个SNMP小程序,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户。

snmpwalk的作用?
可使用snmpwalk查看支持SNMP协议的设备的一些信息,如cisco交换机或路由器IP地址等,也可用来协助开发SNMP功能。

snmpwalk -v 1或2(代表SNMP版本) -c SNMP读密码 IP地址 OID(对象标示符)
(1) -v: 指定snmp的版本, 1或者2;
(2) -c: 指定连接设备SNMP读密码;
(3) IP: 指定要walk的设备的IP地址;
(4) Oid:代表要获取设备的指标oid;

用法举例:
例如获取cisco设备100.100.0.1的接口类型
Snmpwalk –v 2c –c public 100.100.0.1 1.3.6.1.2.1.2.2.1.3
Snmpwalk –v 2c –c public 100.100.0.1 1.3.6.1.2.1.2.2.1.10 查看in
Snmpwalk –v 2c –c public 100.100.0.1  1.3.6.1.2.1.2.2.1.16 查看out
Snmpwalk –v 2c –c public 100.100.0.1  ifDescr  查看对应的接口

以上是关于SNMP GetNext接口规范的主要内容,如果未能解决你的问题,请参考以下文章

ResultSet.getNext() 不适用于 PreparedStatement

snmpwalk

SNMP信息泄露漏洞

zabbix

从链表中的 getNext()、getPrev() 或 getData() 函数返回 NULL

snmp 学习记录