[SNMP4J] Failed to send SNMPv3 Trap with specified engine ID

Pavel Orehov pavel.orehov at gmail.com
Mon Aug 27 07:17:35 CEST 2007


*Hi,*

*I am trying to send SNMPv3 trap with specified by me endine ID in both PDU
and USM data.*
*However, I get an Exception from SNMP4J*.


125 [main] DEBUG org.snmp4j.security.Salt - Initialized Salt to
7dfdc10a2f550541.

141 [main] DEBUG org.snmp4j.security.UsmUserTable - Adding user paveluser =
UsmUser[secName=paveluser,authProtocol=1.3.6.1.6.3.10.1.1.2
,authPassphrase=password1,privProtocol=1.3.6.1.6.3.10.1.2.2
,privPassphrase=password2,localizationEngineID=80:00:00:09:03:00:00:10:7b:aa:31:00]

141 [main] DEBUG org.snmp4j.security.USM -
getUser(engineID=80:00:13:70:01:0a:38:14:7c, securityName=paveluser)
*

org.snmp4j.MessageException*: Message processing model 3 returned error:
1404

at org.snmp4j.MessageDispatcherImpl.sendPdu(Unknown Source)

at org.snmp4j.Snmp.sendMessage(Unknown Source)

at org.snmp4j.Snmp.send(Unknown Source)

at org.snmp4j.Snmp.send(Unknown Source)

at com.cisco.cmpps.netsvc.main.UnitestMain.sendTestTrapV3b(*UnitestMain.java
:299*)

at com.cisco.cmpps.netsvc.main.UnitestMain.main(*UnitestMain.java:60*)
*

org.snmp4j.MessageException*: Message processing model 3 returned error:
1404

at org.snmp4j.MessageDispatcherImpl.sendPdu(Unknown Source)

at org.snmp4j.Snmp.sendMessage(Unknown Source)

at org.snmp4j.Snmp.send(Unknown Source)

at org.snmp4j.Snmp.send(Unknown Source)

at com.cisco.cmpps.netsvc.main.UnitestMain.sendTestTrapV3b(*UnitestMain.java
:299*)

at com.cisco.cmpps.netsvc.main.UnitestMain.main(*UnitestMain.java:60*)

141 [main] DEBUG org.snmp4j.security.USM - USM.getUser - User 'paveluser'
unknown

157 [main] DEBUG org.snmp4j.security.USM - Security name not found for
engineID=80:00:13:70:01:0a:38:14:7c, securityName=70:61:76:65:6c:75:73:65:72

*Here is a code:*

String engineIDStr = "80:00:00:09:03:00:00:10:7b:aa:31:00";

OctetString engineID = OctetString.*fromHexString*(engineIDStr);

UsmUser usmUser = *new* UsmUser(

*new* OctetString("paveluser"),

AuthMD5.*ID*,

*new* OctetString("password1"),

PrivDES.*ID*,

*new* OctetString("password2"),

engineID);

VariableBinding[] vbs = *createLinkDownVBS*();

// additional for V3

VariableBinding vb1 = *new* VariableBinding(*new* OID("1.3.6.1.2.1.1.3.0"),
*new* Integer32(-1547855169));

VariableBinding vb2 = *new* VariableBinding(*new* OID("1.3.6.1.6.3.1.1.4.1.0
"), *new* OID("1.3.6.1.6.3.1.1.5.3"));

VariableBinding vb3 = *new* VariableBinding(*new* OID("1.3.6.1.6.3.18.1.3.0"),
*new* IpAddress("10.222.1.1"));

ScopedPDU pdu = *new* ScopedPDU();

pdu.setContextEngineID(engineID);

pdu.setType(ScopedPDU.*TRAP*);

pdu.add(vb1);

pdu.add(vb2);

pdu.add(vb3);

pdu.addAll(vbs);

UdpAddress targetAddress = *new* UdpAddress(

InetAddress.*getByName*(*targetIP*),

SnmpConstants.*DEFAULT_NOTIFICATION_RECEIVER_PORT*);

UserTarget target = *new* UserTarget();

target.setAddress(targetAddress);

target.setRetries(1);

// set timeout to 500 milliseconds -> 2*500ms = 1s total timeout

target.setTimeout(500);

target.setVersion(SnmpConstants.*version3*);

target.setSecurityModel(SnmpConstants.*version3*);

target.setSecurityLevel(SecurityLevel.*AUTH_NOPRIV*);

target.setSecurityName(*new* OctetString(usmUser.getSecurityName()));

Snmp snmp = *new* Snmp(*new* DefaultUdpTransportMapping());

USM usm = *new* USM(SecurityProtocols.*getInstance*(), engineID, 0);

SecurityModels.*getInstance*().addSecurityModel(usm);

snmp.getUSM().addUser(*new* OctetString(

usmUser.getSecurityName()),

usmUser);

snmp.send(pdu, target);

snmp.close();

*What did I do wrong ?*

*Thanks,*

*Pavel*



More information about the SNMP4J mailing list