snmpv2cinformreq.java
上传用户:aonuowh
上传日期:2021-05-23
资源大小:35390k
文件大小:8k
源码类别:

SNMP编程

开发平台:

C/C++

  1. /* $Id: snmpv2cinformreq.src,v 1.4.2.3 2009/01/28 13:30:31 tmanoj Exp $ */
  2. /*
  3.  * @(#)snmpv2cinformreq.java
  4.  * Copyright (c) 1996-2009 AdventNet, Inc. All Rights Reserved.
  5.  * Please read the associated COPYRIGHTS file for more details.
  6.  */
  7. /**
  8.  * This is an example program to explain how to write an application to send a
  9.  * SNMP v2c INFORM_REQ message using com.adventnet.snmp.snmp2 package of 
  10.  * AdventNetSNMP2 api. The user could run this application by giving any one of
  11.  * the following usage.
  12.  *  
  13.  * java snmpv2cinformreq [options] hostname timeTicks snmpTrapOid-value [OID type 
  14.  * value] ...
  15.  *
  16.  * java snmpv2cinformreq [-d] [-c community] [-p port] host TimeTicksvalue 
  17.  * OIDvalue [OID {INTEGER | STRING | GAUGE | TIMETICKS | OPAQUE | IPADDRESS | 
  18.  * COUNTER | COUNTER64 | UNSIGNED32} value] ...
  19.  * e.g. 
  20.  * java snmpv2cinformreq -p 162 -c public adventnet 1000 1.2.0 1.5.0 STRING advent
  21.  * 
  22.  * If the oid is not starting with a dot (.) it will be prefixed by .1.3.6.1.2.1 .
  23.  * So the entire OID of 1.1.0 will become .1.3.6.1.2.1.1.1.0 . You can also
  24.  * give the entire OID .
  25.  *
  26.  * Options: 
  27.  * [-d]                  - Debug output. By default off.
  28.  * [-c] <community>      - community String. By default "public".
  29.  * [-p] <port>           - remote port no. By default 162.
  30.  * <host>      Mandatory - The RemoteHost (agent).Format (string without double
  31.  * qoutes/IpAddress).
  32.  * <timeticks> Mandatory - the value of object sysUpTime when the event occurred
  33.  * <OID-value> Mandatory - Object Identifier  
  34.  * <OID>                 - Give multiple no. of Object Identifiers with value.
  35.  * <type>                - Type of the object
  36.  * <value>               - object-instance value
  37.  *
  38.  * Note: Thi uses synchronous send mechanism for sending the PDU.
  39.  */
  40. import java.lang.*;
  41. import java.util.*;
  42. import java.net.*;
  43. import com.adventnet.snmp.snmp2.*;
  44. public class snmpv2cinformreq {
  45.   public static void main(String args[]) {
  46.     SnmpAPI api;
  47.             
  48.     // Take care of getting options
  49.     String usage =
  50.     "snmpv2cinformreq [-d] [-c community] [-p port] n" +
  51.     "host TimeTicksvalue OIDvalue [OID {INTEGER | n" +
  52.     "STRING | GAUGE | TIMETICKS | OPAQUE | IPADDRESS | n" +
  53.     "COUNTER | COUNTER64 | UNSIGNED32} value] ...";
  54.     String options[] = { "-d", "-c", "-p"};
  55.     String values[] = { "None", null, null};
  56.         // Parse the input for correct format.
  57.     ParseOptions opt = new ParseOptions(args,options,values, usage);
  58.     if (opt.remArgs.length<3) 
  59.     {   
  60.         opt.usage_error();
  61.     }
  62.                      
  63.     // Start the SNMP API
  64.     api = new SnmpAPI();
  65.         // Check if the debug flag is set or not.
  66.     if (values[0].equals("Set")) 
  67.     {
  68.         api.setDebug (true);
  69.     }
  70.                 
  71.     // Create an SNMP session 
  72.     SnmpSession session = new SnmpSession(api);
  73.     
  74.     // Set v2c version
  75.     session.setVersion(SnmpAPI.SNMP_VERSION_2C) ;
  76.     // Set remote Host
  77.     UDPProtocolOptions ses_opt = new UDPProtocolOptions(opt.remArgs[0]);
  78.     // Set community
  79.     if (values[1] != null) session.setCommunity( values[1] );
  80.         
  81.     // Set default remote port to 162 if port is not specified by the user 
  82.     try {
  83.       if (values[2] != null) 
  84.       {
  85.         ses_opt.setRemotePort( Integer.parseInt(values[2]) );
  86.       }
  87.       else 
  88.       {
  89.         ses_opt.setRemotePort(162);
  90.       }
  91.     }
  92.     catch (NumberFormatException ex) {
  93.         System.err.println("Invalid Integer Arg");
  94.     }
  95.     session.setProtocolOptions(ses_opt);
  96.     // Build v2c SNMP INFORM_REQ PDU
  97.     SnmpPDU pdu = new SnmpPDU();
  98.     pdu.setCommand( api.INFORM_REQ_MSG );
  99.     
  100.     // Add the sysUpTime variable binding
  101.     SnmpOID oid = new SnmpOID(".1.3.6.1.2.1.1.3.0");
  102.     if (oid.toValue() == null) 
  103.     {
  104.       System.err.println("Invalid OID argument: .1.3.6.1.2.1.1.3.0");
  105.     }
  106.     else 
  107.     {
  108.       SnmpVar var = null ; 
  109.       try {
  110.           var = SnmpVar.createVariable(opt.remArgs[1], SnmpAPI.TIMETICKS);
  111.       }
  112.       catch (SnmpException e) 
  113.       {
  114.         System.err.println("Cannot create variable: " + oid 
  115.                                     +" with value: "+opt.remArgs[1]);
  116.       }
  117.       SnmpVarBind varbind = new SnmpVarBind(oid, var);
  118.       pdu.addVariableBinding(varbind);
  119.     }        
  120.     //Add snmpTrapOid variable bindings
  121.     oid = new SnmpOID(".1.3.6.1.6.3.1.1.4.1.0");
  122.     if (oid.toValue() == null) 
  123.     {
  124.           System.err.println("Invalid OID argument: .1.3.6.1.6.3.1.1.4.1.0");
  125.     }
  126.     else 
  127.     {
  128.       SnmpVar var = null ;
  129.       try {
  130.         var = SnmpVar.createVariable(opt.remArgs[2], SnmpAPI.OBJID);
  131.       }
  132.       catch (SnmpException e) 
  133.       {
  134.         System.err.println("Cannot create variable: " + oid 
  135.                                     +" with value: "+opt.remArgs[2]);
  136.       }
  137.             
  138.       SnmpVarBind varbind = new SnmpVarBind(oid, var);
  139.       pdu.addVariableBinding(varbind);
  140.     }    
  141.     
  142.     // Add the Variable Bindings
  143.     for (int i=3;i<opt.remArgs.length;) 
  144.     {
  145.       if (opt.remArgs.length < i+3) 
  146.       {
  147.         opt.usage_error(); //need "{OID type value}"
  148.       }
  149.      
  150.       oid = new SnmpOID(opt.remArgs[i++]);
  151.       if (oid.toValue() == null) 
  152.       {
  153.         System.err.println("Invalid OID argument: " + opt.remArgs[i]);
  154.       }
  155.       else 
  156.       {
  157.         addVarBind(pdu, oid, opt.remArgs[i++], opt.remArgs[i++]);
  158.       }
  159.     }
  160.     try {
  161.       // Open the SNMP Session
  162.       session.open();
  163.       // Send the INFORM_REQ PDU using synchronous send
  164.       pdu = session.syncSend(pdu);
  165.     
  166.             // Process PDU on receiving response
  167.             if (pdu == null)    
  168.             {
  169.                 // Request timed out.
  170.                 System.out.println ("Request timed out.n");
  171.                 System.exit(-1);
  172.             }
  173.     
  174.             // Response received
  175.         // Check for error in response
  176.         if (pdu.getErrstat() != 0)
  177.         {
  178.             System.err.println(pdu.getError());
  179.         }
  180.         else    
  181.         {
  182.             // print the response pdu varbinds
  183.             System.out.println(pdu.printVarBinds());
  184.         }
  185.         
  186.             // Print the response
  187.         System.out.println("Response PDU received from " +
  188.                 pdu.getProtocolOptions().getSessionId() +
  189.                    ", community: " + pdu.getCommunity());
  190.             
  191.             // Close the session
  192.             session.close();
  193.             // Close the api thread.
  194.             api.close();
  195.             System.exit(0);
  196.         } 
  197.         catch (SnmpException e) 
  198.         {
  199.         System.err.println("Caught exception in sending PDU :"+e.getMessage());
  200.         }
  201.         // Close the session
  202.         session.close();
  203.         // Close the api thread.
  204.         api.close();
  205.         // Exit the application.
  206.         System.exit(0);
  207.     }
  208.     /* 
  209.      * Adds the varbind  with specified oid, type and value to the pdu 
  210.      */
  211.   static void addVarBind(SnmpPDU pdu, SnmpOID oid, String type, String value)
  212.   {        
  213.     byte dataType ;
  214.         
  215.     if (type.equals("INTEGER")) 
  216.     {
  217.       dataType = SnmpAPI.INTEGER;
  218.     } 
  219.         else if (type.equals("STRING")) 
  220.     {
  221.       dataType = SnmpAPI.STRING;
  222.     } 
  223.         else if (type.equals("GAUGE")) 
  224.     {
  225.       dataType = SnmpAPI.GAUGE;
  226.     } 
  227.         else if (type.equals("TIMETICKS")) 
  228.     {
  229.       dataType = SnmpAPI.TIMETICKS;
  230.     } 
  231.         else if (type.equals("OPAQUE")) 
  232.     {
  233.       dataType = SnmpAPI.OPAQUE;
  234.     } 
  235.         else if (type.equals("IPADDRESS")) 
  236.     {
  237.       dataType = SnmpAPI.IPADDRESS;
  238.     } 
  239.       else if (type.equals("COUNTER")) 
  240.     { 
  241.       dataType = SnmpAPI.COUNTER;
  242.     } 
  243.         else if (type.equals("OID")) 
  244.     { 
  245.       dataType = SnmpAPI.OBJID;
  246.     } 
  247.         else 
  248.     { 
  249.             // Invalid variable type
  250.       System.err.println("Invalid variable type: " + type);
  251.       return;
  252.     }
  253.     SnmpVar var = null;
  254.     try {
  255.       // create variable
  256.       var = SnmpVar.createVariable( value, dataType );
  257.     }
  258.     catch(SnmpException e)
  259.         {
  260.       System.err.println("Cannot create variable: " + oid 
  261.                                     + " with value: " + value);
  262.       return;
  263.     }
  264.         
  265.     // create varbind
  266.     SnmpVarBind varbind = new SnmpVarBind(oid, var);
  267.     // add variable binding
  268.     pdu.addVariableBinding(varbind);
  269.   }
  270. }