向snmp代理注册OIDs

4

我正在尝试使用snmp4j来模拟SNMP代理。 我正在尝试向代理注册MOs。 以下是代码片段:

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的问题。请指导我如何注册oids。请提供具体步骤。

2个回答

1

确实,正如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以验证正确性。


0

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

SMI禁止在另一个OID(实例内)下注册OID。否则,代理中对象的词典排序将无法实现而产生歧义。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接