[SNMP4J] How to send synchronous SNMP GET response?

Ivan Mladenović piffta at gmail.com
Fri Apr 9 13:49:53 CEST 2010


Hi, to all

Here is a complete example of how to send get request by using SNMPv2c and
SNMPv3.

* *

*SNMPv2c*

* *

Example of how to send SNMPv2c request contain two parts. First part
contains sending synchronous get request. Second part contains example how
to send get request by using custom command responder implementation.



*Sending SNMPv2c synchronous get request*

* *

TransportMapping transport = *new* DefaultUdpTransportMapping();



Snmp snmp = *new* Snmp(transport);



PDU requestPDU = *new* PDU();

requestPDU.add(*new* VariableBinding(*new* OID("1.3.6.1.2.1.1.1.0")));

requestPDU.setErrorIndex(0);

requestPDU.setErrorStatus(0);

requestPDU.setMaxRepetitions(0);

requestPDU.setType(PDU.*GET*);



Address targetAddress = *new* UdpAddress("127.0.0.1/161");



OctetString community = *new* OctetString("public");



CommunityTarget target = *new* CommunityTarget();

target.setAddress(targetAddress);

target.setCommunity(community);

target.setRetries(0);

target.setTimeout(1000);

target.setVersion(SnmpConstants.*version2c*);



ResponseEvent responseEvent = snmp.send(requestPDU, target);

*if* (responseEvent.getResponse() != *null*) {

    // Processing response...

} *else* {

    // Response timeout...

}


snmp.listen();



snmp.send(requestPDU, target);



transport.close();

snmp.close();**

* *

*Sending SNMPv2c asynchronous get request*

* *

TransportMapping transport = *new* DefaultUdpTransportMapping();



Snmp snmp = *new* Snmp(transport);



PDU requestPDU = *new* PDU();

requestPDU.add(*new* VariableBinding(*new* OID("1.3.6.1.2.1.1.1.0")));

requestPDU.setErrorIndex(0);

requestPDU.setErrorStatus(0);

requestPDU.setMaxRepetitions(0);

requestPDU.setType(PDU.*GET*);



Address targetAddress = *new* UdpAddress("127.0.0.1/161");



OctetString community = *new* OctetString("public");



CommunityTarget target = *new* CommunityTarget();

target.setAddress(targetAddress);

target.setCommunity(community);

target.setRetries(0);

target.setTimeout(1000);

target.setVersion(SnmpConstants.*version2c*);



CommandResponder commandResponder = *new* CommandResponder() {

    @Override

*    public* *void* processPdu(CommandResponderEvent event) {

*        *// Code for processing request.

*    *}

};



snmp.addCommandResponder(commandResponder);



snmp.listen();



snmp.send(requestPDU, target);



transport.close();

snmp.close();**

* *

*SNMPv3*

* *

OctetString userName = *new* OctetString("userName");

OctetString authPW = *new* OctetString("MD5_encoded_string");

OctetString privPW = *new* OctetString("DES_encoded_string");



TransportMapping transport = *new* DefaultUdpTransportMapping();



Snmp snmp = *new* Snmp(transport);



*byte*[] localEngineID = MPv3.*createLocalEngineID*();



SecurityProtocols securityProtocols = SecurityProtocols.*getInstance*();

securityProtocols.addAuthenticationProtocol(*new* AuthMD5());



// Check security level.

USM usm = *new* USM(securityProtocols, *new* OctetString(localEngineID), 0);

usm.removeAllUsers();

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

snmp.setLocalEngine(localEngineID, 0, 0);



// User is authenticated by user name, authentication and privacy passwords.

UsmUser usmUser = *new* UsmUser(userName, AuthMD5.*ID*, authPW, PrivDES.*ID*,
privPW);



usm.addUser(userName, *null*, usmUser);



snmp.getUSM().addUser(userName, usmUser);





ScopedPDU requestPDU = *new* ScopedPDU();

requestPDU.add(*new* VariableBinding(*new* OID("1.3.6.1.2.1.1.1.0")));

requestPDU.setErrorIndex(0);

requestPDU.setErrorStatus(0);

requestPDU.setMaxRepetitions(1);

requestPDU.setType(PDU.*GET*);



Address targetAddress = *new* UdpAddress("127.0.0.1/161");



UserTarget target = *new* UserTarget();

target.setAddress(targetAddress);

target.setRetries(1);

target.setSecurityLevel(SecurityLevel.*AUTH_PRIV*);

target.setSecurityModel(SecurityModel.*SECURITY_MODEL_USM*);

target.setTimeout(1000);

target.setVersion(SnmpConstants.*version3*);



snmp.listen();



ResponseEvent responseEvent = snmp.send(requestPDU, target);



PDU responsePDU = responseEvent.getResponse();

*if* (responsePDU != *null*) {

    // Processing response...

} *else* {

    // Response timeout...

}



transport.close();

snmp.close();**



More information about the SNMP4J mailing list