[SNMP4J] Empty SNMP Packets send to Agent

Daniel Frank d.frank at dnws-payment.com
Fri Dec 4 06:28:47 CET 2015


Hi,

 

I’m trying to create a SNMP manager which retrieves informations from a
network device via

snmp v3. Unfortunately the sent SNMP packets are empty. I would appreciate
your help to find

my mistake.

 

The Manager code looks like this:

public class SNMPTest {

 

       public static void main(String[] args) throws Exception {

             

             LogFactory.setLogFactory(new Log4jLogFactory());

 

             Snmp snmp = null;

        try {

             String Username = "ProvisionTest";

            PDU pdu = new ScopedPDU();

            USM usm = new USM(SecurityProtocols.getInstance(), new
OctetString(MPv3.createLocalEngineID()), 0);

            SecurityModels.getInstance().addSecurityModel(usm);

            snmp = new Snmp(new DefaultUdpTransportMapping());

            snmp.getUSM().addUser(new OctetString(Username), new UsmUser(new
OctetString(Username), AuthSHA.ID, new OctetString(Username), PrivAES128.ID,
new OctetString(Username)));

 

            VariableBinding varBind = new VariableBinding(new
OID("1.3.6.1.4.1.14179.2.2.1.1.30"));

 

            ScopedPDU scopedPDU = (ScopedPDU) pdu;

            scopedPDU.setType(PDU.GET);

            scopedPDU.add(varBind);

            UserTarget target = new UserTarget();

            target.setAddress(new UdpAddress("172.16.0.1/161"));

            target.setVersion(SnmpConstants.version3);

            target.setRetries(1);

            target.setTimeout(5000);

            target.setSecurityLevel(SecurityLevel.AUTH_PRIV);

            target.setSecurityName(new OctetString(Username));

            snmp.listen();

            ResponseEvent response = snmp.send(scopedPDU, target);

            if (response.getResponse() != null) {

                PDU responsePDU = response.getResponse();

                if (responsePDU != null) {

                    if (responsePDU.getErrorStatus() == PDU.noError) {

                        return;

                    }

                    throw new Exception("Error: Request Failed, "

                            + "Error Status = " +
responsePDU.getErrorStatus()

                            + ", Error Index = " +
responsePDU.getErrorIndex()

                            + ", Error Status Text = " +
responsePDU.getErrorStatusText());

                }

            }

            throw new Exception("Error: Agent Timeout... ");

        } catch (IOException e) {

            throw new Exception(e.getMessage(), e);

 

        } finally {

            if (snmp != null) {

                try {

                    snmp.close();

                } catch (IOException ex) {

                    System.out.println(ex.getMessage());

                }

            }

        }

       }

}

 

The debugging information from SNMP4J is this:

06:19:24.032 [main] DEBUG org.snmp4j.security.Salt - Initialized Salt to
45c5884912795475.

06:19:24.036 [main] DEBUG org.snmp4j.security.UsmUserTable - Adding user
ProvisionTest =
UsmUser[secName=ProvisionTest,authProtocol=1.3.6.1.6.3.10.1.1.3,authPassphra
se=ProvisionTest,privProtocol=1.3.6.1.6.3.10.1.2.4,privPassphrase=ProvisionT
est,localizationEngineID=null]

06:19:24.040 [DefaultUDPTransportMapping_0.0.0.0/0] DEBUG
org.snmp4j.transport.DefaultUdpTransportMapping - UDP receive buffer size
for socket 0.0.0.0/0 is set to: 8192

06:19:24.046 [main] DEBUG org.snmp4j.security.USM - RFC3414 §3.1.4.b
Outgoing message is not encrypted

06:19:24.047 [main] DEBUG org.snmp4j.mp.MPv3 - Adding cache entry:
StateReference[msgID=425278116,pduHandle=PduHandle[758631372],securityEngine
ID=,securityModel=org.snmp4j.security.USM at 23e028a9,securityName=ProvisionTes
t,securityLevel=1,contextEngineID=,contextName=,retryMsgIDs=null]

06:19:24.047 [main] DEBUG org.snmp4j.Snmp - Running pending sync request
with handle PduHandle[758631372] and retry count left 1

06:19:24.048 [main] DEBUG org.snmp4j.transport.DefaultUdpTransportMapping -
Sending message to 172.16.0.1/161 with length 61:
30:3b:02:01:03:30:11:02:04:19:59:3a:a4:02:03:00:ff:ff:04:01:04:02:01:03:04:1
0:30:0e:04:00:02:01:00:02:01:00:04:00:04:00:04:00:30:11:04:00:04:00:a0:0b:02
:01:00:02:01:00:02:01:00:30:00

06:19:29.047 [Timer-0] DEBUG org.snmp4j.security.USM - RFC3414 §3.1.4.b
Outgoing message is not encrypted

06:19:29.048 [Timer-0] DEBUG org.snmp4j.mp.MPv3 - Adding cache entry:
StateReference[msgID=425278117,pduHandle=PduHandle[758631372],securityEngine
ID=,securityModel=org.snmp4j.security.USM at 23e028a9,securityName=ProvisionTes
t,securityLevel=1,contextEngineID=,contextName=,retryMsgIDs=null]

06:19:29.048 [Timer-0] DEBUG org.snmp4j.mp.MPv3 - Adding previous message
IDs [425278116]  to new entry
StateReference[msgID=425278117,pduHandle=PduHandle[758631372],securityEngine
ID=,securityModel=org.snmp4j.security.USM at 23e028a9,securityName=ProvisionTes
t,securityLevel=1,contextEngineID=,contextName=,retryMsgIDs=null]

06:19:29.048 [Timer-0] DEBUG org.snmp4j.Snmp - Running pending sync request
with handle PduHandle[758631372] and retry count left 0

06:19:29.049 [Timer-0] DEBUG org.snmp4j.transport.DefaultUdpTransportMapping
- Sending message to 172.16.0.1/161 with length 61:
30:3b:02:01:03:30:11:02:04:19:59:3a:a5:02:03:00:ff:ff:04:01:04:02:01:03:04:1
0:30:0e:04:00:02:01:00:02:01:00:04:00:04:00:04:00:30:11:04:00:04:00:a0:0b:02
:01:00:02:01:00:02:01:00:30:00

06:19:34.049 [Timer-0] DEBUG org.snmp4j.Snmp - Request timed out: 758631372

06:19:34.050 [main] DEBUG org.snmp4j.Snmp - Removed pending request with
handle: PduHandle[758631372]

06:19:34.051 [main] DEBUG org.snmp4j.transport.DefaultUdpTransportMapping -
Terminated worker task:
org.snmp4j.transport.DefaultUdpTransportMapping$ListenThread

06:19:34.051 [main] DEBUG org.snmp4j.transport.DefaultUdpTransportMapping -
Interrupting worker task:
org.snmp4j.transport.DefaultUdpTransportMapping$ListenThread

06:19:34.052 [DefaultUDPTransportMapping_0.0.0.0/0] DEBUG
org.snmp4j.transport.DefaultUdpTransportMapping - Worker task
stopped:org.snmp4j.transport.DefaultUdpTransportMapping$ListenThread

06:19:34.053 [main] DEBUG org.snmp4j.transport.DefaultUdpTransportMapping -
Joining worker task:
org.snmp4j.transport.DefaultUdpTransportMapping$ListenThread

 

And the snmp part of the packet sent to the agent looks like this in
wireshark:

 

Simple Network Management Protocol

    msgVersion: snmpv3 (3)

    msgGlobalData

        msgID: 425278117

        msgMaxSize: 65535

        msgFlags: 04

            .... .1.. = Reportable: Set

            .... ..0. = Encrypted: Not set

            .... ...0 = Authenticated: Not set

        msgSecurityModel: USM (3)

    msgAuthoritativeEngineID: <MISSING>

    msgAuthoritativeEngineBoots: 0

    msgAuthoritativeEngineTime: 0

    msgUserName: 

    msgAuthenticationParameters: <MISSING>

    msgPrivacyParameters: <MISSING>

    msgData: plaintext (0)

        plaintext

            contextEngineID: <MISSING>

            contextName: 

            data: get-request (0)

                get-request

                    request-id: 0

                    error-status: noError (0)

                    error-index: 0

                    variable-bindings: 0 items

 

 

Would be perfect if someone could help.

 

Best regards,

 

Daniel

 

 

 




More information about the SNMP4J mailing list