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

SNMP编程

开发平台:

C/C++

  1. /* $Id: snmpv2cinformreq.src,v 1.4.2.3 2009/01/28 13:29:38 prathika 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 = "snmpv2cinformreq [-d] [-c community] [-p port] nhost TimeTicksvalue OIDvalue [OID {INTEGER | STRING | GAUGE | TIMETICKS | OPAQUE | IPADDRESS | COUNTER | COUNTER64 | UNSIGNED32} value] ...";
  50.     String options[] = { "-d", "-c", "-p"};
  51.     String values[] = { "None", null, null};
  52.         // Parse the input for correct format.
  53.     ParseOptions opt = new ParseOptions(args,options,values, usage);
  54.     if (opt.remArgs.length<3) 
  55.     {   
  56.         opt.usage_error();
  57.     }
  58.                      
  59.     // Start the SNMP API
  60.     api = new SnmpAPI();
  61.         // Check if the debug flag is set or not.
  62.     if (values[0].equals("Set")) 
  63.     {
  64.         api.setDebug (true);
  65.     }
  66.                 
  67.     // Create an SNMP session 
  68.     SnmpSession session = new SnmpSession(api);
  69.     session.setTransportProvider("com.adventnet.snmp.snmp2.TcpTransportImpl");
  70.     
  71.     // Set v2c version
  72.     session.setVersion(SnmpAPI.SNMP_VERSION_2C) ;
  73.     // Set community
  74.     if (values[1] != null) session.setCommunity( values[1] );
  75.         
  76.     // Options that will be used for communication. This can be modified by the user 
  77.     // according to his need.
  78.     ProtocolOptions params = null;
  79.     // Set default remote port to 162 if port is not specified by the user 
  80.     if(values[2] != null)   {
  81.         params = new TcpProtocolOptionsImpl(opt.remArgs[0], Integer.parseInt(values[2]), -1);
  82.     }
  83.     else    {
  84.         params = new TcpProtocolOptionsImpl(opt.remArgs[0], 162, -1);
  85.     }
  86.         session.setProtocolOptions(params);
  87.     // Build v2c SNMP INFORM_REQ PDU
  88.     SnmpPDU pdu = new SnmpPDU();
  89.     pdu.setCommand( api.INFORM_REQ_MSG );
  90.     
  91.     // Add the sysUpTime variable binding
  92.     SnmpOID oid = new SnmpOID(".1.3.6.1.2.1.1.3.0");
  93.     if (oid.toValue() == null) 
  94.     {
  95.       System.err.println("Invalid OID argument: .1.3.6.1.2.1.1.3.0");
  96.     }
  97.     else 
  98.     {
  99.       SnmpVar var = null ; 
  100.       try {
  101.           var = SnmpVar.createVariable(opt.remArgs[1], SnmpAPI.TIMETICKS);
  102.       }
  103.       catch (SnmpException e) 
  104.       {
  105.         System.err.println("Cannot create variable: " + oid 
  106.                                     +" with value: "+opt.remArgs[1]);
  107.       }
  108.       SnmpVarBind varbind = new SnmpVarBind(oid, var);
  109.       pdu.addVariableBinding(varbind);
  110.     }        
  111.     //Add snmpTrapOid variable bindings
  112.     oid = new SnmpOID(".1.3.6.1.6.3.1.1.4.1.0");
  113.     if (oid.toValue() == null) 
  114.     {
  115.           System.err.println("Invalid OID argument: .1.3.6.1.6.3.1.1.4.1.0");
  116.     }
  117.     else 
  118.     {
  119.       SnmpVar var = null ;
  120.       try {
  121.         var = SnmpVar.createVariable(opt.remArgs[2], SnmpAPI.OBJID);
  122.       }
  123.       catch (SnmpException e) 
  124.       {
  125.         System.err.println("Cannot create variable: " + oid 
  126.                                     +" with value: "+opt.remArgs[2]);
  127.       }
  128.             
  129.       SnmpVarBind varbind = new SnmpVarBind(oid, var);
  130.       pdu.addVariableBinding(varbind);
  131.     }    
  132.     
  133.     // Add the Variable Bindings
  134.     for (int i=3;i<opt.remArgs.length;) 
  135.     {
  136.       if (opt.remArgs.length < i+3) 
  137.       {
  138.         opt.usage_error(); //need "{OID type value}"
  139.       }
  140.      
  141.       oid = new SnmpOID(opt.remArgs[i++]);
  142.       if (oid.toValue() == null) 
  143.       {
  144.         System.err.println("Invalid OID argument: " + opt.remArgs[i]);
  145.       }
  146.       else 
  147.       {
  148.         addVarBind(pdu, oid, opt.remArgs[i++], opt.remArgs[i++]);
  149.       }
  150.     }
  151.     try {
  152.       // Open the SNMP Session
  153.       session.open();
  154.       // Send the INFORM_REQ PDU using synchronous send
  155.       pdu = session.syncSend(pdu);
  156.     
  157.             // Process PDU on receiving response
  158.             if (pdu == null)    
  159.             {
  160.                 // Request timed out.
  161.                 System.out.println ("Request timed out.n");
  162.                         session.close();
  163.                         api.close();        
  164.                 System.exit(-1);
  165.             }
  166.     
  167.             // Response received
  168.         // Check for error in response
  169.         if (pdu.getErrstat() != 0)
  170.         {
  171.             System.err.println(pdu.getError());
  172.         }
  173.         else    
  174.         {
  175.             // print the response pdu varbinds
  176.             System.out.println(pdu.printVarBinds());
  177.         }
  178.         
  179.             // Print the response
  180.         System.out.println("Response PDU received from " +((TcpProtocolOptionsImpl)(pdu.getProtocolOptions())).getRemoteHost()+
  181.                    ", community: " + pdu.getCommunity());
  182.             
  183.             // Close the session
  184.             session.close();
  185.             // Close the api thread.
  186.             api.close();
  187.             System.exit(0);
  188.         } 
  189.         catch (SnmpException e) 
  190.         {
  191.         System.err.println("Caught exception in sending PDU :"+e.getMessage());
  192.         }
  193.         // Close the session
  194.         session.close();
  195.         // Close the api thread.
  196.         api.close();
  197.         // Exit the application.
  198.         System.exit(0);
  199.     }
  200.     /* 
  201.      * Adds the varbind  with specified oid, type and value to the pdu 
  202.      */
  203.   static void addVarBind(SnmpPDU pdu, SnmpOID oid, String type, String value)
  204.   {        
  205.     byte dataType ;
  206.         
  207.     if (type.equals("INTEGER")) 
  208.     {
  209.       dataType = SnmpAPI.INTEGER;
  210.     } 
  211.         else if (type.equals("STRING")) 
  212.     {
  213.       dataType = SnmpAPI.STRING;
  214.     } 
  215.         else if (type.equals("GAUGE")) 
  216.     {
  217.       dataType = SnmpAPI.GAUGE;
  218.     } 
  219.         else if (type.equals("TIMETICKS")) 
  220.     {
  221.       dataType = SnmpAPI.TIMETICKS;
  222.     } 
  223.         else if (type.equals("OPAQUE")) 
  224.     {
  225.       dataType = SnmpAPI.OPAQUE;
  226.     } 
  227.         else if (type.equals("IPADDRESS")) 
  228.     {
  229.       dataType = SnmpAPI.IPADDRESS;
  230.     } 
  231.       else if (type.equals("COUNTER")) 
  232.     { 
  233.       dataType = SnmpAPI.COUNTER;
  234.     } 
  235.         else if (type.equals("OID")) 
  236.     { 
  237.       dataType = SnmpAPI.OBJID;
  238.     } 
  239.         else 
  240.     { 
  241.             // Invalid variable type
  242.       System.err.println("Invalid variable type: " + type);
  243.       return;
  244.     }
  245.     SnmpVar var = null;
  246.     try {
  247.       // create variable
  248.       var = SnmpVar.createVariable( value, dataType );
  249.     }
  250.     catch(SnmpException e)
  251.         {
  252.       System.err.println("Cannot create variable: " + oid 
  253.                                     + " with value: " + value);
  254.       return;
  255.     }
  256.         
  257.     // create varbind
  258.     SnmpVarBind varbind = new SnmpVarBind(oid, var);
  259.     // add variable binding
  260.     pdu.addVariableBinding(varbind);
  261.   }
  262. }