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

SNMP编程

开发平台:

C/C++

  1. /* $Id: snmpv2cinformreq.src,v 1.4 2002/09/09 05:41:02 parasuraman Exp $ */
  2. /*
  3.  * @(#)snmpv2cinformreq.java
  4.  * Copyright (c) 1996-2003 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.setProtocol(session.TRANSPORT_PROVIDER);    
  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. // Options that will be used for communication. This can be modified by the user 
  76. // according to his need.
  77.     ProtocolOptions params = null;
  78. // Set default remote port to 162 if port is not specified by the user 
  79. if(values[2] != null) {
  80. params = new TcpProtocolOptionsImpl(opt.remArgs[0], Integer.parseInt(values[2]), -1);
  81. }
  82. else {
  83. params = new TcpProtocolOptionsImpl(opt.remArgs[0], 162, -1);
  84. }
  85.         session.setProtocolOptions(params);
  86.     // Build v2c SNMP INFORM_REQ PDU
  87.     SnmpPDU pdu = new SnmpPDU();
  88.     pdu.setCommand( api.INFORM_REQ_MSG );
  89.     
  90.     // Add the sysUpTime variable binding
  91.     SnmpOID oid = new SnmpOID(".1.3.6.1.2.1.1.3.0");
  92.     if (oid.toValue() == null) 
  93. {
  94.       System.err.println("Invalid OID argument: .1.3.6.1.2.1.1.3.0");
  95. }
  96.     else 
  97. {
  98.       SnmpVar var = null ; 
  99.       try {
  100.           var = SnmpVar.createVariable(opt.remArgs[1], SnmpAPI.TIMETICKS);
  101.       }
  102.       catch (SnmpException e) 
  103.   {
  104.         System.err.println("Cannot create variable: " + oid 
  105. +" with value: "+opt.remArgs[1]);
  106.       }
  107.       SnmpVarBind varbind = new SnmpVarBind(oid, var);
  108.       pdu.addVariableBinding(varbind);
  109.     }        
  110.     //Add snmpTrapOid variable bindings
  111.     oid = new SnmpOID(".1.3.6.1.6.3.1.1.4.1.0");
  112.     if (oid.toValue() == null) 
  113. {
  114.   System.err.println("Invalid OID argument: .1.3.6.1.6.3.1.1.4.1.0");
  115. }
  116.     else 
  117. {
  118.       SnmpVar var = null ;
  119.       try {
  120.         var = SnmpVar.createVariable(opt.remArgs[2], SnmpAPI.OBJID);
  121.       }
  122.       catch (SnmpException e) 
  123.   {
  124.         System.err.println("Cannot create variable: " + oid 
  125. +" with value: "+opt.remArgs[2]);
  126.       }
  127.       SnmpVarBind varbind = new SnmpVarBind(oid, var);
  128.       pdu.addVariableBinding(varbind);
  129.     }    
  130.     
  131.     // Add the Variable Bindings
  132.     for (int i=3;i<opt.remArgs.length;) 
  133. {
  134.       if (opt.remArgs.length < i+3) 
  135.   {
  136. opt.usage_error(); //need "{OID type value}"
  137.   }
  138.      
  139.       oid = new SnmpOID(opt.remArgs[i++]);
  140.       if (oid.toValue() == null) 
  141.   {
  142.         System.err.println("Invalid OID argument: " + opt.remArgs[i]);
  143.   }
  144.       else 
  145.   {
  146.         addVarBind(pdu, oid, opt.remArgs[i++], opt.remArgs[i++]);
  147.   }
  148.     }
  149.     try {
  150.       // Open the SNMP Session
  151.       session.open();
  152.       // Send the INFORM_REQ PDU using synchronous send
  153.       pdu = session.syncSend(pdu);
  154.     
  155. // Process PDU on receiving response
  156. if (pdu == null)
  157. {
  158. // Request timed out.
  159. System.out.println ("Request timed out.n");
  160.                 session.close();
  161.              api.close(); 
  162. System.exit(-1);
  163. }
  164. // Response received
  165.      // Check for error in response
  166.      if (pdu.getErrstat() != 0)
  167. {
  168.      System.err.println(pdu.getError());
  169. }
  170.     else 
  171. {
  172.     // print the response pdu varbinds
  173.     System.out.println(pdu.printVarBinds());
  174. }
  175.         
  176. // Print the response
  177.      System.out.println("Response PDU received from " +((TcpProtocolOptionsImpl)(pdu.getProtocolOptions())).getRemoteHost()+
  178.                    ", community: " + pdu.getCommunity());
  179.             
  180. // Close the session
  181. session.close();
  182. // Close the api thread.
  183. api.close();
  184. System.exit(0);
  185.   } 
  186.   catch (SnmpException e) 
  187. {
  188.     System.err.println("Caught exception in sending PDU :"+e.getMessage());
  189.   }
  190. // Close the session
  191. session.close();
  192. // Close the api thread.
  193. api.close();
  194. // Exit the application.
  195. System.exit(0);
  196. }
  197. /* 
  198.  * Adds the varbind  with specified oid, type and value to the pdu 
  199.  */
  200.   static void addVarBind(SnmpPDU pdu, SnmpOID oid, String type, String value)
  201.   {        
  202.     byte dataType ;
  203.     if (type.equals("INTEGER")) 
  204. {
  205.       dataType = SnmpAPI.INTEGER;
  206.     } 
  207. else if (type.equals("STRING")) 
  208. {
  209.       dataType = SnmpAPI.STRING;
  210.     } 
  211. else if (type.equals("GAUGE")) 
  212. {
  213.       dataType = SnmpAPI.GAUGE;
  214.     } 
  215. else if (type.equals("TIMETICKS")) 
  216. {
  217.       dataType = SnmpAPI.TIMETICKS;
  218.     } 
  219. else if (type.equals("OPAQUE")) 
  220. {
  221.       dataType = SnmpAPI.OPAQUE;
  222.     } 
  223. else if (type.equals("IPADDRESS")) 
  224. {
  225.       dataType = SnmpAPI.IPADDRESS;
  226.     } 
  227.   else if (type.equals("COUNTER")) 
  228.   { 
  229.       dataType = SnmpAPI.COUNTER;
  230.     } 
  231. else if (type.equals("OID")) 
  232.       dataType = SnmpAPI.OBJID;
  233.     } 
  234. else 
  235. // Invalid variable type
  236.       System.err.println("Invalid variable type: " + type);
  237.       return;
  238.     }
  239.     SnmpVar var = null;
  240.     try {
  241.       // create variable
  242.       var = SnmpVar.createVariable( value, dataType );
  243.     }
  244.     catch(SnmpException e)
  245. {
  246.       System.err.println("Cannot create variable: " + oid 
  247.    + " with value: " + value);
  248.       return;
  249.     }
  250.     // create varbind
  251.     SnmpVarBind varbind = new SnmpVarBind(oid, var);
  252.     // add variable binding
  253.     pdu.addVariableBinding(varbind);
  254.   }
  255. }