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

SNMP编程

开发平台:

C/C++

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