Я пытаюсь создать отдельное Java-приложение для отправки ловушек SNMP v3 вместе с engineId.
Я использую snmp4j 2.5.3 и Java 1.8
Ниже приведен фрагмент кодакоторый я использую.
Когда я предоставляю engineId во время addUser, он выдает «Ошибка обработки сообщения 3 модели: Неизвестное имя безопасности».
Когда я удаляю, он работает нормально.Но мой SNMP-менеджер не распознает ловушку.
// Sample code snippet
Address targetAddress = GenericAddress.parse("udp:" + ipAddress + "/" + port);
TransportMapping<?> transport = new DefaultUdpTransportMapping();
Snmp snmp = new Snmp(transport);
USM usm = new USM(SecurityProtocols.getInstance().addDefaultProtocols(),
new OctetString(MPv3.createLocalEngineID(new OctetString(engineId))), 0);
SecurityProtocols.getInstance().addPrivacyProtocol(new PrivAES192());
SecurityProtocols.getInstance().addPrivacyProtocol(new PrivAES256());
SecurityProtocols.getInstance().addPrivacyProtocol(new Priv3DES());
SecurityModels.getInstance().addSecurityModel(usm);
switch (securityLevel) {
case SecurityLevel.NOAUTH_NOPRIV:
snmp.getUSM().addUser(new OctetString(username), new OctetString(engineId), new UsmUser(new OctetString(username), null,
null, null, null));
break;
case SecurityLevel.AUTH_NOPRIV:
snmp.getUSM().addUser(new OctetString(username), new OctetString(engineId), new UsmUser(new OctetString(username), auth,
new OctetString(authpassPhrase), null, null));
break;
case SecurityLevel.AUTH_PRIV:
snmp.getUSM().addUser(new OctetString(username), new OctetString(engineId), new UsmUser(new OctetString(username), auth,
new OctetString(authpassPhrase), privacy, new OctetString(privacypassPhrase)));
break;
default:
System.err.println("Undefined Security level for SNMP v3");
System.exit(1);
}
UserTarget target = new UserTarget();
target.setAddress(targetAddress);
target.setRetries(1);
target.setTimeout(5000);
target.setVersion(SnmpConstants.version3);
target.setSecurityLevel(securityLevel);
target.setSecurityName(new OctetString(username));
ScopedPDU pdu = new ScopedPDU();
pdu.setType(ScopedPDU.NOTIFICATION);
pdu.setRequestID(new Integer32(1234));
pdu.add(new VariableBinding(SnmpConstants.sysUpTime));
pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID, SnmpConstants.linkDown));
pdu.add(new VariableBinding(new OID(Oid), new Integer32(123)));
snmp.send(pdu, target);
System.out.println("Sending Trap to (IP:Port)=> " + ipAddress + ":" + port);
snmp.close();
Я ожидаю, что SNMP-менеджер должен распознать ловушку, и она должна быть получена в SNMP Manager.
Что мне здесь не хватает?
Заранее спасибо.