我正在尝试使用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。请指导我如何注册身份证。请提供指示。
发布于 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以验证正确性。
发布于 2018-10-09 19:07:22
来自:http://oosnmp.net/pipermail/snmp4j/2014-September/005416.html
SMI禁止在另一个OID之下注册OID (实例中的实例)。否则,代理中对象的字典排序就无法在没有歧义的情况下实现。
因此,我认为这种OID注册方法是不可能的。您应该尝试使用OID,而不使用像这样的严格子字符串。或者试图扭转注册顺序。
https://stackoverflow.com/questions/23734012
复制相似问题