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

SNMP编程

开发平台:

C/C++

  1. /* $Id: snmpv3informreq.src,v 1.4 2002/09/09 05:36:52 parasuraman Exp $ */
  2. /*
  3.  * @(#)snmpv3informreq.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.  * v3 Inform request message using com.adventnet.snmp.snmp2 package of 
  10.  * AdventNetSNMP2 api.
  11.  * The user could run this application by giving any one of the following usage.
  12.  *  
  13.  * java snmpv3informreq [-d] [-p port] [-u user] 
  14.  * [-a auth_protocol] [-w auth_password] [-s priv_password] [-i context_id] 
  15.  * host TimeTicksvalue OIDvalue [OID {INTEGER | STRING | GAUGE | TIMETICKS | 
  16.  * OPAQUE | IPADDRESS | COUNTER | COUNTER64 | UNSIGNED32} value] ...
  17.  * e.g.
  18.  * java snmpv3informreq -u intial2 -a MD5 -w initial2Pass -i initial 
  19.  * 10.3.2.120 16352 .1.3.6.1.4.1.2162.1000.2 .1.3.6.1.4.1.2162.1001.21.0 STRING 
  20.  * InformReqTest
  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.  * [-p] <port>           - remote port no. By default 162.
  29.  * [-u] <username>       - The v3 principal/userName
  30.  * [-a] <autProtocol>    - The authProtocol(MD5/SHA). Mandatory if authPassword
  31.  * is specified
  32.  * [-w] <authPassword>   - The authentication password.
  33.  * [-s] <privPassword>   - The privacy protocol password. Must be accompanied 
  34.  * with auth password and authProtocol fields.
  35.  * [-n] <contextName>    - The contextName to be used for the v3 pdu.
  36.  * [-i] <contextID>      - The contextID to be used for the v3 pdu.
  37.  * <timeticks> Mandatory - the value of object sysUpTime when the event occurred
  38.  * <OID-value> Mandatory - Object Identifier
  39.  * <host>      Mandatory - The RemoteHost.Format (string without double
  40.  * quotes/IpAddress).
  41.  * <OID>       Mandatory - Object Identifier.
  42.  * <value>     Mandatory - The object instance value to be set.
  43.  *
  44.  * Note: Here the Engine Id need not be specified since this application will do
  45.  * a discovery initially.
  46.  */
  47. import java.lang.*;
  48. import java.util.*;
  49. import java.net.*;
  50. import com.adventnet.snmp.snmp2.*;
  51. import com.adventnet.snmp.snmp2.usm.*;
  52. public class snmpv3informreq {
  53.   public static void main(String args[]) {
  54.     // Take care of getting options
  55.     String usage = "snmpv3informreq [-d] [-p port] [-u user] [-a auth_protocol] [-w auth_password] [-s priv_password] [-n contextName] [-i contextID] nhost TimeTicksvalue OIDvalue [OID {INTEGER | STRING | GAUGE | TIMETICKS | OPAQUE | IPADDRESS | COUNTER | COUNTER64 | UNSIGNED32} value] ...";
  56.     String options[] = { "-d", "-c",  "-wc", "-p", "-r", "-t", "-m", "-v", "-u", "-a", "-w", "-s", "-n", "-i"};
  57.     String values[] = { "None", null, null, null, null, null, null, null, null, null, null, null, null, null, null };
  58.    
  59.     ParseOptions opt = new ParseOptions(args,options,values, usage);
  60.     if (opt.remArgs.length<3) 
  61. {
  62. opt.usage_error();
  63. }
  64.     //Just set the SNMP version so that the generic SetValues works properly
  65.     values[7]="v3";
  66.     
  67.     // Start SNMP API
  68.     SnmpAPI api = new SnmpAPI();
  69. // Check if the debug flag is set or not.
  70.     if (values[0].equals("Set")) 
  71. {
  72. api.setDebug( true );
  73. }
  74.     // Create an SNMP PDU. 
  75.     SnmpPDU pdu = new SnmpPDU(); 
  76.     // Build v3 SNMP INFORM_REQ message
  77.     Snmp3Message msg = (Snmp3Message)(pdu.getMsg());
  78.     pdu.setCommand (api.INFORM_REQ_MSG);
  79.                        
  80.     // Create an SNMP session. 
  81.     SnmpSession session = new SnmpSession(api);
  82.     // Set Remote Host
  83.     session.setPeername( opt.remArgs[0] );
  84.     // Set the values
  85.     SetValues setVal = new SetValues(session, values);
  86.     if(setVal.usage_error) 
  87. {
  88. opt.usage_error(); 
  89. }
  90.     // Set the SNMP version
  91.     session.setVersion(SnmpAPI.SNMP_VERSION_3) ;
  92.     
  93.     // Set default remote port to 162 if port is not specified by the user 
  94.     if (values[3] == null) 
  95. {
  96.       session.setRemotePort(162);
  97. }
  98. // Set the user name
  99. pdu.setUserName(setVal.userName.getBytes());
  100.     // Build the INFORM REQUEST PDU    
  101.     // Adding the sysUpTime variable binding 
  102.     SnmpOID oid = new SnmpOID(".1.3.6.1.2.1.1.3.0");
  103.     if (oid.toValue() == null) 
  104. {
  105.       System.err.println("Invalid OID argument: .1.3.6.1.2.1.1.3.0");
  106. }
  107.     else 
  108. {
  109.       SnmpVar var = null ; 
  110.       try {
  111.         var = SnmpVar.createVariable(opt.remArgs[1], SnmpAPI.TIMETICKS);
  112.       }
  113.       catch (SnmpException e)
  114.   {
  115.         System.err.println("Cannot create variable: " + oid 
  116. +" with value: "+opt.remArgs[1]);
  117.       }
  118.       SnmpVarBind varbind = new SnmpVarBind(oid, var);
  119.       pdu.addVariableBinding(varbind);
  120.     }        
  121.     // Adding the snmpTrapOID variable binding
  122.     oid = new SnmpOID(".1.3.6.1.6.3.1.1.4.1.0");
  123.     if (oid.toValue() == null) 
  124. {
  125. System.err.println("Invalid OID argument: .1.3.6.1.6.3.1.1.4.1.0");
  126. }
  127.     else 
  128. {
  129.       SnmpVar var = null ;
  130.       try {
  131.         var = SnmpVar.createVariable(opt.remArgs[2], SnmpAPI.OBJID);
  132.       }
  133.       catch (SnmpException e) {
  134.         System.err.println("Cannot create variable: " + oid 
  135. +" with value: "+opt.remArgs[2]);
  136.       }
  137.       SnmpVarBind varbind = new SnmpVarBind(oid, var);
  138.       pdu.addVariableBinding(varbind);
  139.     }    
  140.     
  141. // Add Variable Bindings
  142.     for (int i=3;i<opt.remArgs.length;) 
  143.       if (opt.remArgs.length < i+3) 
  144.   {
  145. opt.usage_error(); //need "{OID type value}"
  146.   }
  147.      
  148.       oid = new SnmpOID(opt.remArgs[i++]);
  149.       if (oid.toValue() == null)
  150.   {
  151.         System.err.println("Invalid OID argument: " + opt.remArgs[i]);
  152.   }
  153.       else
  154.   {
  155.         addVarBind(pdu, oid, opt.remArgs[i++], opt.remArgs[i++]);
  156.   }
  157.     }
  158.     try {
  159.       // Open the SNMP Session
  160.       session.open();
  161. // do a dicovery
  162.      USMUtils.init_v3_params(setVal.userName, setVal.authProtocol, setVal.authPassword, setVal.privPassword, session.getPeername(),session.getRemotePort(),session);
  163.       // Send the INFORM_REQ PDU using synchronous send
  164.       pdu = session.syncSend(pdu);
  165. // Process PDU on receiving response
  166. if (pdu == null)
  167. {
  168. // Request timed out.
  169. System.out.println ("Request timed out.n");
  170. System.exit(1);
  171. }
  172. // Response received
  173.      // Check for error in response
  174.      if (pdu.getErrstat() != 0)
  175. {
  176.      System.err.println(pdu.getError());
  177. }
  178.     else 
  179. {
  180.     // print the response pdu varbinds
  181.     System.out.println(pdu.printVarBinds());
  182. }
  183.     } 
  184.     catch (SnmpException e) {
  185.       System.err.println("Sending PDU"+e.getMessage());
  186.     }
  187. // Close the session
  188. session.close();
  189. // Close the api thread.
  190. api.close();
  191. // Exit the application.
  192. System.exit(0);
  193.   }
  194. /* 
  195.  * Adds the varbind  with specified oid, type and value to the pdu 
  196.  */
  197.   static void addVarBind(SnmpPDU pdu, SnmpOID oid, String type, String value)
  198.   {
  199.     byte dataType ;
  200.     if (type.equals("INTEGER")) 
  201. {
  202.       dataType = SnmpAPI.INTEGER;
  203.     } 
  204. else if (type.equals("STRING")) 
  205. {
  206.       dataType = SnmpAPI.STRING;
  207.     } 
  208. else if (type.equals("GAUGE")) 
  209. {
  210.       dataType = SnmpAPI.GAUGE;
  211.     } 
  212. else if (type.equals("TIMETICKS")) 
  213. {
  214.       dataType = SnmpAPI.TIMETICKS;
  215.     } 
  216. else if (type.equals("OPAQUE")) 
  217. {
  218.       dataType = SnmpAPI.OPAQUE;
  219.     } 
  220. else if (type.equals("IPADDRESS")) 
  221. {
  222.       dataType = SnmpAPI.IPADDRESS;
  223.     } 
  224. else if (type.equals("COUNTER")) 
  225. {
  226.       dataType = SnmpAPI.COUNTER;
  227.     } 
  228. else if (type.equals("OID")) 
  229. {
  230.       dataType = SnmpAPI.OBJID;
  231.     } 
  232. else 
  233. // Invalid variable type.
  234.       System.err.println("Invalid variable type: " + type);
  235.       return;
  236.     }
  237.         
  238.     SnmpVar var = null;
  239.     try {
  240.       var = SnmpVar.createVariable( value, dataType );
  241.     }
  242.     catch(SnmpException e){
  243.       System.err.println("Cannot create variable: " + oid 
  244.    + " with value: " + value);
  245.       return;
  246.     }
  247.     SnmpVarBind varbind = new SnmpVarBind(oid, var);
  248.     pdu.addVariableBinding(varbind);
  249.   }
  250. }