首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GETBULK请求返回指定OID以外的OID

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

Stack Overflow用户
提问于 2015-01-17 15:03:18
回答 2查看 793关注 0票数 0

我使用snmp4j获取一个自动递增的OID。主OID看起来像1.3.6.1.4.1.22420.2.6.3.1.12.1,并附加了自动增量编号:

代码语言:javascript
复制
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请求时,结果很奇怪:

代码语言:javascript
复制
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);
}

结果如下:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2015-01-18 02:20:37

一种方法是告诉设备对提供的OID执行'N‘get-next操作并返回结果。

在这种情况下,当设备到达该特定列的最后一行时,它将移动到该表中的下一列(如果我们在最后一列,则移动到该表之后的下一个OID )。

简而言之,答案是你没有做错任何事情。

票数 0
EN

Stack Overflow用户

发布于 2016-08-11 10:30:09

GETBULK操作与多次执行GETNEXT具有相同的效果。

GETNEXT意味着它将总是尝试获取已知对象名的lexicographical排序中的下一个,也就是说它将返回

1.3.6.1.4.1.22420.2.6.3.1.12.1的后继器(将整个MIB当作一棵树),直到它没有得到任何后继器。

对于您的问题:尝试以下代码:

代码语言:javascript
复制
       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;
            }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27997086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档