Я написал слушатель SNMP на Java, используя библиотеку TNM4J, которая использует библиотеку SNMP4J.
Слушатель может читать полученные ловушки, за исключением ловушек, которые, по-видимому, проиндексированы в таблице.
Слушатель прослушивает прерывания от объекта Ericsson, что означает, что я использую ERICSSON-ALARM-MIB, и MIB импортирует, что ему нужно. Ловушка, которую я получаю, это eriAlarmActiveManagedObject с OID .1.3.6.1.4.1.193.183.4.1.3.5.1.5, но я также проверил его локально с другими ловушками в таблице, и такая же ошибка возникает
Если посмотреть на https://mibs.observium.org/mib/ERICSSON-ALARM-MIB/:
Все ловушки из такой таблицы не могут быть прочитаны слушателем.
Это дает индекс из связанной исключительной ситуации из метода extractIndexes в MibbleIndexExtractor.java в библиотеке TNM4J.
@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 идентичны, что, конечно, вызывает исключение, когда создается подчиненная строка.
Однако во всех других ловушках он никогда не вызывает этот метод extractIndexes, а просто отлично работает и правильно выводит имя ловушки и oid.
Есть предложения о том, как решить эту проблему?