SNMP 侦听器无法从 table 中的条目 OID 中读取陷阱
SNMP Listener can not read trap from OIDs that are entries in a table
我在 Java 中使用 TNM4J 库编写了一个 SNMP 侦听器,该库使用 SNMP4J 库。
侦听器能够读取接收到的陷阱,但似乎在 table 中索引的陷阱除外。
侦听器正在侦听来自 Ericsson 对象的陷阱,这意味着我正在使用 ERICSSON-ALARM-MIB 和它需要的 MIB 导入。我收到的陷阱是 OID 为 .1.3.6.1.4.1.193.183.4.1.3.5.1.5 的 eriAlarmActiveManagedObject,但我也在本地用 table 中的其他陷阱对其进行了测试,同样的错误发生了
如果有人看 https://mibs.observium.org/mib/ERICSSON-ALARM-MIB/ :
像这样来自table的所有陷阱都无法被侦听器读取。
它给出了 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 名称。
关于如何解决这个问题有什么建议吗?
在与 TNM4J 的开发人员联系后,他对他的库进行了一些修复。
之后,Ericsson oids 被正确翻译。 oid 中缺少一些翻译,这是因为 MIB 的加载顺序。
重新调整这些使其工作。
任何对开发人员的故障排除过程感兴趣的人都可以在此处查看:
https://github.com/soulwing/tnm4j/issues/9
我在 Java 中使用 TNM4J 库编写了一个 SNMP 侦听器,该库使用 SNMP4J 库。
侦听器能够读取接收到的陷阱,但似乎在 table 中索引的陷阱除外。
侦听器正在侦听来自 Ericsson 对象的陷阱,这意味着我正在使用 ERICSSON-ALARM-MIB 和它需要的 MIB 导入。我收到的陷阱是 OID 为 .1.3.6.1.4.1.193.183.4.1.3.5.1.5 的 eriAlarmActiveManagedObject,但我也在本地用 table 中的其他陷阱对其进行了测试,同样的错误发生了
如果有人看 https://mibs.observium.org/mib/ERICSSON-ALARM-MIB/ :
像这样来自table的所有陷阱都无法被侦听器读取。 它给出了 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 名称。
关于如何解决这个问题有什么建议吗?
在与 TNM4J 的开发人员联系后,他对他的库进行了一些修复。
之后,Ericsson oids 被正确翻译。 oid 中缺少一些翻译,这是因为 MIB 的加载顺序。
重新调整这些使其工作。
任何对开发人员的故障排除过程感兴趣的人都可以在此处查看: https://github.com/soulwing/tnm4j/issues/9