我使用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。
发布于 2015-01-18 02:20:37
一种方法是告诉设备对提供的OID执行'N‘get-next操作并返回结果。
在这种情况下,当设备到达该特定列的最后一行时,它将移动到该表中的下一列(如果我们在最后一列,则移动到该表之后的下一个OID )。
简而言之,答案是你没有做错任何事情。
发布于 2016-08-11 10:30:09
GETBULK操作与多次执行GETNEXT具有相同的效果。
GETNEXT意味着它将总是尝试获取已知对象名的lexicographical排序中的下一个,也就是说它将返回
1.3.6.1.4.1.22420.2.6.3.1.12.1的后继器(将整个MIB当作一棵树),直到它没有得到任何后继器。
对于您的问题:尝试以下代码:
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;
}
}https://stackoverflow.com/questions/27997086
复制相似问题