向snmp代理注册OID

向snmp代理注册OID,snmp,snmp4j,Snmp,Snmp4j,我正在尝试使用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

我正在尝试使用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。 请指导我如何注册OID。 请提供方向

来自:

SMI禁止在另一个OID(实例)下注册OID 在实例中)。否则,在 如果没有歧义,代理就无法实现


所以我认为这种OID注册方法是不可能的。您应该尝试使用OID而不使用像这样严格的子字符串。或者尝试颠倒注册顺序。

确实,正如赛斯所说,选择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.
    (但您不注册这些单独的行)
它也可以是一个对象组,而不是一个对象,如文件夹,但您也不注册其中一个

标量下不能有标量(或表),因此不能向代理注册它们

如果不知道您的MIB看起来像什么、您想要保存什么类型的数据以及您想要如何组织它,我无法给出具体的建议,但似乎您在这里遇到了一个MIB设计问题。确保在MIB上运行
smilint
,以验证正确性