GETBULK请求返回指定的OID以外的OID

时间:2015-01-17 07:03:18

标签: java snmp snmp4j

我正在使用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

问题是它还包含其他OID1.3.6.1.4.1.22420.2.6.3.1.13.2。难道我做错了什么?没有任何强大而有效的机制来做到这一点?我正在为大量网络交换机执行此操作,并且响应包含许多我不使用的VariableBinding

2 个答案:

答案 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;
            }
        }