我正在使用snmp4j来获得自动增量OID
。主OID
看起来像1.3.6.1.4.1.22420.2.6.3.1.12.1
,并附加了自动增量编号:
1.3.6.1.4.1.22420.2.6.3.1.12.1.158271
1.3.6.1.4.1.22420.2.6.3.1.12.1.158272
1.3.6.1.4.1.22420.2.6.3.1.12.1.158273
1.3.6.1.4.1.22420.2.6.3.1.12.1.158274
1.3.6.1.4.1.22420.2.6.3.1.12.1.158275
1.3.6.1.4.1.22420.2.6.3.1.12.1.158276
首先,如果我们想要获得具有最大数量的OID
,正确的方法是使用GETBULK
方法。我对吗?当我发送如下GETBULK
请求时,结果很奇怪:
PDU p = new PDU();
p.add(new VariableBinding(new OID("1.3.6.1.4.1.22420.2.6.3.1.12.1")));
p.setType(PDU.GETBULK);
p.setMaxRepetitions(200);
ResponseEvent re = snmp.send(p, target);
for (VariableBinding v : re.getResponse().getVariableBindings()) {
System.out.println(v);
}
结果如下:
1.3.6.1.4.1.22420.2.6.3.1.12.1.158273 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.1.158274 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.1.158275 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.1.158276 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.1.158277 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.1.158278 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.1.158279 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.1.158280 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.1.158281 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.2.158273 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.2.158274 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.2.158275 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.2.158276 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.2.158277 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.2.158278 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.2.158279 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.2.158280 = 0
1.3.6.1.4.1.22420.2.6.3.1.12.2.158281 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.1.158273 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.1.158274 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.1.158275 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.1.158276 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.1.158277 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.1.158278 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.1.158279 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.1.158280 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.1.158287 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.2.158273 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.2.158274 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.2.158275 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.2.158276 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.2.158277 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.2.158278 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.2.158279 = 0
1.3.6.1.4.1.22420.2.6.3.1.13.2.158280 = 0
问题是它还包含其他OID
个1.3.6.1.4.1.22420.2.6.3.1.13.2
。难道我做错了什么?没有任何强大而有效的机制来做到这一点?我正在为大量网络交换机执行此操作,并且响应包含许多我不使用的VariableBinding
。
答案 0 :(得分:0)
一种看待这种情况的方法就是告诉设备执行“N' N'对提供的OID进行get-next操作并返回结果。
在这种情况下,当设备到达该特定列的最后一行时,它将移动到该表中的下一列(如果我们在最后一列,则移动到表之后的下一个OID)。
简而言之,答案是你没有做错任何事。
答案 1 :(得分:0)
GETBULK操作与执行多次GETNEXT具有相同的效果
GETNEXT意味着它总是会尝试在已知对象名称的 词典 排序中获得下一个。这就是说它将返回到1.3 .6.1.4.1.22420.2.6.3.1.12.1' 后继者(将整个MIB作为树。)直到它没有得到任何succssors。
对于你的问题:
请尝试以下代码:
for (VariableBinding v : re.getResponse().getVariableBindings()) {
if (!v.getOid().startsWith(startOID))
{
// the startOID = new OID("1.3.6.1.4.1.22420.2.6.3.1.12.1");
//end here, sub tree ends.
break;
}
}