首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用snmp代理注册OID

使用snmp代理注册OID
EN

Stack Overflow用户
提问于 2014-05-19 09:18:42
回答 2查看 1.2K关注 0票数 4

我正在尝试使用snmp4j模拟SNMP代理。我正试着向代理人登记MOs。下面是代码片段:

代码语言:javascript
复制
static final OID mo1= new OID("1.3.6.1.4.1.1234.1.104");
static final OID mo2= new OID("1.3.6.1.4.1.1234.1.104.1");
static final OID mo3= new OID("1.3.6.1.4.1.1234.1.104.1.1");

agent.registerManagedObject(MOCreator.createReadOnly(mo1,"m1"));
agent.registerManagedObject(MOCreator.createReadOnly(mo2,"m2"));                
agent.registerManagedObject(MOCreator.createReadOnly(mo3,"m3"));


public class MOCreator {

    public static MOScalar createReadOnly(OID oid,Object value ){
        return new MOScalar(oid,
                MOAccessImpl.ACCESS_READ_ONLY,
                getVariable(value));
    }

    private static Variable getVariable(Object value) {
        System.out.println("Value : "+value.toString());

        OctetString octetString = new OctetString((String)value);

        if(value instanceof String) {
            return octetString;
        }
        throw new IllegalArgumentException("Unmanaged Type: " + value.getClass());
    }

}

启动代理时,我会得到DuplicateRegistrationException。请指导我如何注册身份证。请提供指示。

EN

回答 2

Stack Overflow用户

发布于 2018-10-12 09:04:26

事实上,正如Seth所说,OID的选择似乎是无效的。

假设您有一个带有OID 1.3.6.1.4.1.1234.1.104的对象。

以下任一项:

  • 它是一个标量,在这种情况下,它的值是1.3.6.1.4.1.1234.1.104.0,或者
  • 它是一个表,在这种情况下,它有值1.3.6.1.4.1.1234.1.104.<N> (但不注册这些单独的行)。

它也可能是一个对象组,而不是一个像文件夹那样的对象,但是您也不会注册其中的一个。

标量下不能有标量(或表),所以不能向代理注册它们。

如果不知道你的MIB是什么样子的,你想要持有什么样的数据,你想如何组织它,我就不能提出一个具体的建议,但似乎你在这里有一个MIB的设计问题。确保在MIB上运行smilint以验证正确性。

票数 1
EN

Stack Overflow用户

发布于 2018-10-09 19:07:22

来自:http://oosnmp.net/pipermail/snmp4j/2014-September/005416.html

SMI禁止在另一个OID之下注册OID (实例中的实例)。否则,代理中对象的字典排序就无法在没有歧义的情况下实现。

因此,我认为这种OID注册方法是不可能的。您应该尝试使用OID,而不使用像这样的严格子字符串。或者试图扭转注册顺序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23734012

复制
相关文章

相似问题

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