synchronousManager.Java

import javax.management.snmp.SnmpDefinitions;
import javax.management.snmp.SnmpOid;
import javax.management.snmp.SnmpVarBindList;
import javax.management.snmp.manager.SnmpPeer;
import javax.management.snmp.manager.SnmpParameters;
import javax.management.snmp.manager.SnmpRequest;
import javax.management.snmp.manager.SnmpSession;
//import javax.management.snmp.manager.SnmpEventReportDispatcher;
import com.sun.jdmk.Trace;
import com.sun.jdmk.snmp.SnmpOidTableSupport;

/**
 * To use the SNMP agent provided as part of JDMK, use port 8085. */

public class SynchronousManager {
    /**
     * The main entry point. When calling the program, the      command
     * line must contain:
     * 1) operation: GET, GETNEXT.
     * 2) target: IP address or DNS name of the remote agent
     * 3) community: string for the operation
     * 4) OID: the OID of interest
     * 5) value: Object instance value (for set operations)
     * 6) port: port number to use
     */

    public static void main(String argv[]) {

        final int numParameters = 6;

        if (argv.length != numParameters) {
            usage();
            java.lang.System.exit(1);
        }

        String snmpOp = argv[0];
        String host = argv[1];
        String community = argv[2];
        String requiredOid = argv[3];
        String oidValue = argv[4];
        String port = argv[5];

        try {
            /* Initialize the JDMK SNMP Manager API.
               Specify the OidTable containing the SNMP MIB II data.
               Use the OidTable generated by mibgen after compiling MIB II. */
            SnmpOidTableSupport oidTable = new RFC1213_MIBOidTable();
            SnmpOid.setSnmpOidTable(oidTable);

            // Create a SnmpPeer object for representing the remote entity.
            SnmpPeer agent = new SnmpPeer(host, Integer.parseInt(port));

            // Create required parameters for the remote entity.
            // We expect the remote agent to support a public and private community
            SnmpParameters params = new SnmpParameters(community, "private");

            // Associate the parameters with the remote agent.
            agent.setSnmpParam(params);

            // Create the session for controlling the request.
            SnmpSession session= new SnmpSession("SyncManager session");

            // A default peer (agent) is now associated with an SnmpSession.
            session.setDefaultPeer(agent);

            // Build the varbind list.
            SnmpVarBindList list = new SnmpVarBindList("SyncManager varbind list");

            list.addVarBind(requiredOid);

            // Issue the required SNMP request and wait for the result.
            issueRequest(agent, snmpOp, list, session, host, port);

            // Destroy the session
            session.destroySession();

            java.lang.System.exit(0);

        } catch(Exception e) {
            java.lang.System.err.println("Exception occurred:" + e );
            e.printStackTrace();
        }
    }

    /**
     * Return command line usage of the program.
     */
    public static void usage()
    {
        java.lang.System.out.println("java SynchronousManager <op> <host> <community> <OID> <value> <port>");
        java.lang.System.out.println("where");
        java.lang.System.out.println("\t-op: required SNMP operation.");
        java.lang.System.out.println("\t-host: hostname or IP address of the SNMP agent.");
        java.lang.System.out.println("\t-community: string for the operation.");
        java.lang.System.out.println("\t-OID: required object instance identifier.");
        java.lang.System.out.println("\t-value: of the object instance (for set only).");
        java.lang.System.out.println("\t-port: port number for the remote agent.");
    }

   /**
     * Issue the required SNMP message.
     */
    public static void issueRequest(SnmpPeer agent, String operation,
                SnmpVarBindList list, SnmpSession session,
                String host, String port)
    {
        final String GEToperation = "GET";
        final String GETNEXToperation = "GETNEXT";
        final String SEToperation = "SET";
        SnmpRequest request = null;

        try {
         // Make the SNMP request and wait for the result.
         if (operation.compareToIgnoreCase(GEToperation) == 0)
         {
         request = session.snmpGetRequest(null, list);
         }
         else
           if (operation.compareToIgnoreCase(GETNEXToperation) == 0)
           {
           request = session.snmpGetNextRequest(null, list);
           }
           else
           {
             java.lang.System.out.println("Unknown operation. Exiting...");
             java.lang.System.exit(0);
           }

            java.lang.System.out.println("Sent " + operation + " request to agent on " + host + " port " + port);
            boolean completed = request.waitForCompletion(10000);

            // Check for a timeout of the request.
            if (completed == false) {
                java.lang.System.out.println("Request timed out. Check reachability of agent");

                // Print request.
                java.lang.System.out.println("Request: " + request.toString());
                java.lang.System.exit(0);
            }

            // Check if the response contains an error.
            int errorStatus = request.getErrorStatus();
            if (errorStatus != SnmpDefinitions.snmpRspNoError) {
                java.lang.System.out.println("Error status = " + SnmpRequest.snmpErrorToString(errorStatus));
                java.lang.System.out.println("Error index = " + request.getErrorIndex());
                java.lang.System.exit(0);
            }

            // Display the result.
            SnmpVarBindList result = request.getResponseVarBindList();
            java.lang.System.out.println("Result: \n" + result);

        } catch(Exception e) {
            java.lang.System.err.println("Exception occurred:" + e );
            e.printStackTrace();
        }
    }
}