I have been working on an application which requires messages to be sent
to NMS GUIs using SNMP Version 3 TRAP/INFORMs.  I have been having
problems getting the application to work the same as the existing
netsnmp command line tools.  I have gotten both authenticated and
non-authenticated messaging to work using the command line tools.  I am
not able to get either to work using snmp4J API.  I am sure there is
additional logic in either the tool or API which makes the results
differ.  I would greatly appreciate some expertise to quickly look over
what I have built - sure that the problem is obvious to an expert !  I
have included snippets of both solutions, the resulting exception stack
and dump of vital objects all included below.

 

Here is an authenticated  INFORM/TRAP working example using snmptrap (
to send), and snmptrapd ( to receive ) - INFORM excludes red text; TRAP
includes red text.  I believe that the only configuration being used is
in the file I have specified:

 

snmptrapd -d -Lf /tmp/snmp.out -Os -f -C -c <file name>

 

   where <file name>is :

      createUser -e 0x8000000001022434 collector MD5 authpass DES
privpass

      authuser log collector

 

snmptrap  -Ci -e 0x8000000001022434  -v 3  -u collector  -a MD5  -x DES
-A authpass  -X privpass  -l authPriv  -r 3  -t 2  <ipaddress>  0
1.1.1.44  1.1.1.44.1  s  "it works"

 

 

Here is the attempt to simulate the above for both TRAP/INFORM using
snmp4J ( Trap requires red text below ):

 

try

      {

       TransportMapping transport = new DefaultUdpTransportMapping();

       Snmp snmp = new Snmp(transport);

 

        // assumes localEngineID is ok to create; bootCount = 0;

        byte[] localEngineID =

 
((MPv3)snmp.getMessageProcessingModel(MessageProcessingModel.MPv3)).crea
teLocalEngineID();

        USM usm = new USM(SecurityProtocols.getInstance(),

                          new OctetString(localEngineID), 0);

        SecurityModels.getInstance().addSecurityModel(usm);

 

        snmp.getUSM().addUser ( secOctetString,   // "collector"

                               new UsmUser (secOctetString,   //
"collector"

                                            authID,
// AuthMD5.ID

                                            authOctetString,
// "authpass"

                                            privID,
//  PrivDES.ID

                                            privOctetString ));
//  "privpass"

 

        this.target = new UserTarget();

        this.target.setAddress(udpAddress);              //
<ipaddress/162>

        this.target.setRetries(this.numRetries);       // 2

        this.target.setTimeout(this.timeout);           // 1000

        this.target.setVersion(SnmpConstants.version3);

        this.target.setSecurityLevel(securityLevel);
//SecurityLevel.AUTH_PRIV

        this.target.setSecurityName(secOctetString);   // "collector"

 

        this.snmp.listen();

 

        ScopedPDU pdu = new ScopedPDU();

        

        pdu.setType(PDU.INFORM/TRAP);

        pdu.add( new VariableBinding( SnmpConstants.sysUpTime, new
TimeTicks( 0 ) ) );

        pdu.add( new VariableBinding( SnmpConstants.snmpTrapOID, new
OctetString (this.mib) ) );

 

       // fill in remainder of the data here

 

        ResponseEvent response = snmp.send(pdu, this.target);

 

TRAP/INFORM - reply:  

org.snmp4j.MessageException: Message processing model 3 returned error:
Encryption error

        at
org.snmp4j.MessageDispatcherImpl.sendPdu(MessageDispatcherImpl.java:494)

        at org.snmp4j.Snmp.sendMessage(Snmp.java:1005)

        at org.snmp4j.Snmp.send(Snmp.java:885)

        at org.snmp4j.Snmp.send(Snmp.java:878)

        at org.snmp4j.Snmp.send(Snmp.java:843)

        at EMSAdminSnmp4J.sendMsgToAdmin(EMSAdminSnmp4J.java:285)

        at
EMSMessageCollector$EMSMessageSender.run(EMSMessageCollector.java:38)

        at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.jav
a:1110)

        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.ja
va:603)

        at java.lang.Thread.run(Thread.java:636)

 

Here is the debug information to show above objects: 

 

USM User:
UsmUserEntry[userName=collector,usmUser=UsmUser[secName=collector,authPr
otocol=1.3.6.1.6.3.10.1.1.2,authPassphrase=authpass,privProtocol=1.3.6.1
.6.3.10.1.2.2,privPassphrase=privpass,localizationEngineID=null]]

 

TARGET: 

UserTarget[address=<ipaddress>/162,version=3,timeout=2000,retries=2,secu
rityLevel=3,securityModel=3,securityName=collector,preferredTransports=n
ull,authoritativeEngineID=]

 

PDU:

INFORM/TRAP[reqestID=0, errorStatus=0, errorIndex=0,
VBS[1.3.6.1.2.1.1.3.0 = 0:00:00.00; 1.3.6.1.6.3.1.1.4.1.0 = 1.1.1.44;
1.1.1.44.1 = JMTest1; 1.1.1.44.2 = will found ; 1.1.1.44.3 = LogWatcher;
1.1.1.44.4 = /home/jmarcolla/test.app.log1; 1.1.1.44.5 = 1336163302;
1.1.1.44.7 = 0; 1.1.1.44.8 = 24; 1.1.1.44.6 = 3]]

 

I am curious what I need to do to match the results of the command line
snmptrap above.  Are there other configs/setting that I am not aware of
which will affect this as well ?

Specifically - why does this not properly encrypt ?

 

Thanks - looking forward to some expertise on this.

Have a great weekend.

John

 

 

_______________________________________________
SNMP4J mailing list
SNMP4J@agentpp.org
http://lists.agentpp.org/mailman/listinfo/snmp4j

Reply via email to