[SNMP4J] Problem with V3 get
J B
moatas at gmail.com
Mon Feb 1 23:47:28 CET 2010
I can execute the following command successfully:
snmpget -v 3 -u jmb -l authNoPriv -a MD5 -A snmpv3Eight localhost
1.3.6.1.2.1.1.1.0
But I can not get the following code to run properly:
import org.snmp4j.PDU;
import org.snmp4j.ScopedPDU;
import org.snmp4j.Snmp;
import org.snmp4j.UserTarget;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.MPv3;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.security.AuthMD5;
import org.snmp4j.security.PrivDES;
import org.snmp4j.security.SecurityLevel;
import org.snmp4j.security.SecurityModels;
import org.snmp4j.security.SecurityProtocols;
import org.snmp4j.security.USM;
import org.snmp4j.security.UsmUser;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.AbstractTransportMapping;
import org.snmp4j.transport.DefaultUdpTransportMapping;
public class SNMPGet {
public static void main(String[] args) throws Exception {
AbstractTransportMapping transport = new DefaultUdpTransportMapping();
Snmp snmp = new Snmp(transport);
System.out.println(snmp);
USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3
.createLocalEngineID()), 0);
SecurityModels.getInstance().addSecurityModel(usm);
snmp.getUSM().addUser(
new OctetString("jmb"),
new UsmUser(new OctetString("jmb"), AuthMD5.ID,
new OctetString("snmpv3Eight"), PrivDES.ID, null));
UserTarget target = new UserTarget();
target.setSecurityLevel(SecurityLevel.AUTH_NOPRIV);
target.setSecurityName(new OctetString("jmb"));
target.setAddress(new UdpAddress("localhost/161"));
target.setRetries(1);
target.setTimeout(5000);
target.setVersion(SnmpConstants.version3);
snmp.listen();
PDU request = new ScopedPDU();
ScopedPDU scopedPDU = (ScopedPDU) request;
scopedPDU.setType(PDU.GET);
scopedPDU.add(new VariableBinding(new OID("1.3.6.1.2.1.1.1.0")));
ResponseEvent responseEvent;
long startTime = System.currentTimeMillis();
responseEvent = snmp.send(request, target);
if (responseEvent != null) {
PDU response = responseEvent.getResponse();
System.out.println("Received response after "
+ (System.currentTimeMillis() - startTime) + " millis");
System.out.println(response);
}
}
}
I get the following stack trace:
Exception in thread "Timer-0" java.lang.NullPointerException
at org.snmp4j.security.AuthGeneric.passwordToKey(AuthGeneric.java:205)
at org.snmp4j.security.SecurityProtocols.passwordToKey(SecurityProtocols.java:303)
at org.snmp4j.security.USM.getUser(USM.java:271)
at org.snmp4j.security.USM.generateResponseMessage(USM.java:355)
at org.snmp4j.security.USM.generateRequestMessage(USM.java:215)
at org.snmp4j.mp.MPv3.prepareOutgoingMessage(MPv3.java:767)
at org.snmp4j.MessageDispatcherImpl.sendPdu(MessageDispatcherImpl.java:438)
at org.snmp4j.Snmp.sendMessage(Snmp.java:1063)
at org.snmp4j.Snmp$PendingRequest.run(Snmp.java:1606)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
Can anyone provide any pointers?
Thanks!
Birch
More information about the SNMP4J
mailing list