GetBulk() 方法
GetBulk()方法是对GetNext()方法的二度封装,GetNext()方法返回的是传入的oid的下一个对象,而GetBulk方法则是返回传入的oid的接下来的N个对象。
通过GetBulk传入的oid,SNMP代理会根据传入的参数去循环取值,构造PDU,但是,如果符合传入的oid的对象的数量超过了一个PDU所能容纳的限度,SNMP代理会截断数据包,换言之返回的数据就不全。
为了获取完整的数据,就要对单个PDU装不下这种情况进行循环处理,但由于其实际上是使用了GetNext()方法,所以还需要调用者给一个循环结束的标识,控制循环在取到所有预期的数据后及时break,否则调用GetBulk()的循环可以一直无限循环,直到整棵树都被被遍历完为止。
package mainimport ("fmt"// "log""time""github.com/gosnmp/gosnmp"
)
// 定义一个自己的Init函数
func InitSnmpPoller(TargetIP string) gosnmp.GoSNMP {g := gosnmp.GoSNMP{}g.Target = TargetIPg.Community = "public"g.Version = gosnmp.Version2cg.Transport = "udp"g.Timeout = 2 * time.Secondg.Retries = 3g.MaxOids = gosnmp.MaxOidsg.Port = 161return g
}// 处理返回结果的函数
func processSNMPResults(pdu gosnmp.SnmpPDU) error {switch pdu