[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