我已使用TNM4J库(使用SNMP4J库)用Java编写了SNMP侦听器。
侦听器能够读取收到的陷阱,但似乎在表中已建立索引的陷阱除外。
侦听器正在侦听来自爱立信对象的陷阱,这意味着我正在使用ERICSSON-ALARM-MIB和所需的MIB导入。我收到的陷阱是OID为.1.3.6.1.4.1.193.183.4.1.3.5.1.5的eriAlarmActiveManagedObject,但我还使用表中的其他陷阱在本地对其进行了测试,并且发生了相同的错误
如果有人看着https://mibs.observium.org/mib/ERICSSON-ALARM-MIB/:
侦听器无法读取来自此类表的所有陷阱。 它从TNM4J库的MibbleIndexExtractor.java中的extractIndexes方法中给出了索引超出范围的异常。
@Override
public IndexDescriptor[] extractIndexes(String instanceOid) {
String oid = symbol.getValue().toString();
String suboid = instanceOid.substring(oid.length() + 1);
int[] components = oidToArray(suboid);
int offset = 0;
IndexDescriptor[] descriptors = new IndexDescriptor[indexes.length];
for (int i = 0; i < indexes.length; i++) {
SnmpIndex index = indexes[i];
MibValueSymbol indexSymbol = symbol.getMib().getSymbolByOid(index.getValue().toString());
MibType indexType = ((SnmpObjectType) indexSymbol.getType()).getSyntax();
int length = fixedLength(indexType);
boolean implied = length != -1 || index.isImplied();
if (length == -1) {
length = variableLength(indexType, components, offset, index.isImplied());
}
int[] encoded = new int[length];
System.arraycopy(components, offset, encoded, 0, length);
descriptors[i] = new MibbleIndexDescriptor(indexSymbol, encoded, implied);
offset += length;
}
return descriptors;
}
我已经调试了它,这是因为oid String和instanceOid String相同,这当然会导致在创建suboid String时出现异常。
但是,在其他所有陷阱上,它从不调用此extractIndexes方法,而只能正常工作并正确打印出陷阱和oid名称。
关于如何解决此问题的任何建议?
答案 0 :(得分:0)
与TNM4J的开发人员联系后,他对自己的库进行了一些修复。
此后,正确地翻译了爱立信的oid。 oid缺少一些翻译,这是因为MIB的加载顺序。
重新调整这些功能使其正常工作。
对于有兴趣与开发人员进行故障排除过程的任何人都可以在这里查看: https://github.com/soulwing/tnm4j/issues/9