[SNMP4J] Unable to send V3 Trap with authoritative engine ID
N, Ravikiran
ravikiran.n at hpe.com
Sun Sep 6 18:50:10 CEST 2015
HI All,
I am using the below snippet code for sending the SNMPv3 trap with Authoritative Engine ID. I am getting the exception as " Message processing model 3 returned error: Unknown security name".
While debugging snmp4j jar I have identified mismatch between Engine ID inserted into the UsmUserTable and EngineId used for retrieval of UsmUser from the UsmUserTable. Please help me through this problem.
My Code for sending V3 trap is as below:
byte[] localEngineIdInBytes = MPv3.createLocalEngineID();
USM usm = new USM(SecurityProtocols.getInstance(),
new OctetString(localEngineIdInBytes), 0); //Local Engine Id
ScopedPDU pdu = new ScopedPDU();
pdu.setContextName(new OctetString("ContextName"));
pdu.setContextEngineID(new OctetString(localEngineIdInBytes)); // Context Engine ID
pdu.setType(ScopedPDU.TRAP);
long sysUpTime = (System.currentTimeMillis() - start) / 10;
pdu.add(new VariableBinding(new OID(trapOid + ".7"), new TimeTicks(sysUpTime)));
pdu.add(new VariableBinding(new OID(trapOid + ".8"), new OID(trapOid)));
pdu.add(new VariableBinding(new OID(trapOid + ".1"), new OctetString("ssid")));
pdu.add(new VariableBinding(new OID(trapOid + ".2"), new OctetString("1234")));
pdu.add(new VariableBinding(new OID(trapOid + ".3"), new OctetString("CRI")));
pdu.add(new VariableBinding(new OID(trapOid + ".4"), new OctetString("PROCESS")));
pdu.add(new VariableBinding(new OID(trapOid + ".5"), new OctetString(new Date().toString())));
pdu.add(new VariableBinding(new OID(trapOid + ".6"), new OctetString("message")));
TransportMapping transport = new DefaultUdpTransportMapping();
Address targetAddress = GenericAddress.parse("udp:127.0.0.1/" + port);
UserTarget comtarget = new UserTarget();
comtarget.setVersion(SnmpConstants.version3);
comtarget.setAddress(targetAddress);
comtarget.setRetries(2);
comtarget.setTimeout(5000);
comtarget.setSecurityName(new OctetString("abhi"));
comtarget.setSecurityModel(3);
comtarget.setSecurityLevel(SecurityLevel.AUTH_PRIV);
SecurityModels.getInstance().addSecurityModel(usm);
SNMP snmp = new Snmp(transport);
snmp.getUSM().addUser(new OctetString("abhi"), new OctetString(localEngineIdInBytes),), // Authoratative Engine ID
new UsmUser(new OctetString("abhi"), AuthSHA.ID,
new OctetString("12345678"), PrivDES.ID,
new OctetString("12345678")));
snmp.send(pdu, comtarget);
snmp.close();
Regards,
Ravikiran N
More information about the SNMP4J
mailing list