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

SNMP编程

开发平台:

C/C++

  1. /* $Id: snmpv3informreq.src,v 1.4.2.6 2009/01/28 13:31:27 tmanoj Exp $ */
  2. /*
  3.  * @(#)snmpv3informreq.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.  * 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] [-pp privProtocol(DES/AES-128/AES-192/AES-256/3DES)] [-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 -pp DES
  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 is specified
  31.  * [-pp] <privProtocol>  - The privProtocol(DES/AES-128/AES-192/AES-256/3DES).
  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] [-pp privProtocol(DES/AES-128/AES-192/AES-256/3DES)] host TimeTicksvalue OIDvalue [OID {INTEGER | STRING | GAUGE | TIMETICKS | OPAQUE | IPADDRESS | COUNTER | COUNTER64 | UNSIGNED32} value] ...";
  56. String options[] =
  57. { "-d", "-c",  "-wc", "-p", "-r", "-t", "-m",
  58. "-v", "-u", "-a", "-w", "-s", "-n", "-i",
  59. "-DB_driver", "-DB_url", "-DB_username", "-DB_password", "-pp"
  60. };
  61. String values[] =
  62. {
  63. "None", null, null, null, null, null, "None",
  64.    null, null, null, null, null, null, null,
  65.  null, null, null, null, null
  66. };
  67.     ParseOptions opt = new ParseOptions(args,options,values, usage);
  68.     if (opt.remArgs.length<3) 
  69.     {
  70.         opt.usage_error();
  71.     }
  72.     //Just set the SNMP version so that the generic SetValues works properly
  73.     values[7]="v3";
  74.     
  75.     // Start SNMP API
  76.     SnmpAPI api = new SnmpAPI();
  77.     
  78.         // Check if the debug flag is set or not.
  79.     if (values[0].equals("Set")) 
  80.     {
  81.         api.setDebug( true );
  82.     }
  83.     // Create an SNMP PDU. 
  84.     SnmpPDU pdu = new SnmpPDU(); 
  85.     // Build v3 SNMP INFORM_REQ message
  86.     Snmp3Message msg = (Snmp3Message)(pdu.getMsg());
  87.     pdu.setCommand (api.INFORM_REQ_MSG);
  88.                        
  89.     // Create an SNMP session. 
  90.     SnmpSession session = new SnmpSession(api);
  91.     // Set the values
  92.     SetValues setVal = new SetValues(session, values);
  93.     if(setVal.usage_error) 
  94.     {
  95.         opt.usage_error(); 
  96.     }
  97.         // set remote Host 
  98.         UDPProtocolOptions ses_opt = (UDPProtocolOptions)session.getProtocolOptions();
  99.         if(ses_opt == null)
  100.         {
  101.             ses_opt = new UDPProtocolOptions(opt.remArgs[0]);
  102.         }
  103.         else
  104.         {
  105.             ses_opt.setRemoteHost(opt.remArgs[0]);
  106.         }
  107.     // Set the SNMP version
  108.     session.setVersion(SnmpAPI.SNMP_VERSION_3) ;
  109.     
  110.     // Set default remote port to 162 if port is not specified by the user 
  111.     if (values[3] == null) 
  112.     {
  113.       ses_opt.setRemotePort(162);
  114.     }
  115.     else
  116.     {
  117.         try
  118.         {
  119.             ses_opt.setRemotePort(Integer.parseInt(values[3]));
  120.         }
  121.         catch(Exception exp)
  122.         {
  123.             System.out.println("Invalid port: " + values[3]);
  124.             System.exit(1);
  125.         }
  126.     }
  127.     session.setProtocolOptions(ses_opt);
  128.         // Set the user name
  129.     pdu.setUserName(setVal.userName.getBytes());
  130.     // Build the INFORM REQUEST PDU    
  131.     // Adding the sysUpTime variable binding 
  132.     SnmpOID oid = new SnmpOID(".1.3.6.1.2.1.1.3.0");
  133.     if (oid.toValue() == null) 
  134.     {
  135.       System.err.println("Invalid OID argument: .1.3.6.1.2.1.1.3.0");
  136.     }
  137.     else 
  138.     {
  139.       SnmpVar var = null ; 
  140.       try {
  141.         var = SnmpVar.createVariable(opt.remArgs[1], SnmpAPI.TIMETICKS);
  142.       }
  143.       catch (SnmpException e)
  144.       {
  145.         System.err.println("Cannot create variable: " + oid 
  146.                                     +" with value: "+opt.remArgs[1]);
  147.       }
  148.       SnmpVarBind varbind = new SnmpVarBind(oid, var);
  149.       pdu.addVariableBinding(varbind);
  150.     }        
  151.     // Adding the snmpTrapOID variable binding
  152.     oid = new SnmpOID(".1.3.6.1.6.3.1.1.4.1.0");
  153.     if (oid.toValue() == null) 
  154.     {
  155.             System.err.println("Invalid OID argument: .1.3.6.1.6.3.1.1.4.1.0");
  156.     }
  157.     else 
  158.     {
  159.       SnmpVar var = null ;
  160.       try {
  161.         var = SnmpVar.createVariable(opt.remArgs[2], SnmpAPI.OBJID);
  162.       }
  163.       catch (SnmpException e) {
  164.         System.err.println("Cannot create variable: " + oid 
  165.                                     +" with value: "+opt.remArgs[2]);
  166.       }
  167.       SnmpVarBind varbind = new SnmpVarBind(oid, var);
  168.       pdu.addVariableBinding(varbind);
  169.     }    
  170.     
  171.         // Add Variable Bindings
  172.     for (int i=3;i<opt.remArgs.length;) 
  173.     { 
  174.       if (opt.remArgs.length < i+3) 
  175.       {
  176.         opt.usage_error(); //need "{OID type value}"
  177.       }
  178.      
  179.       oid = new SnmpOID(opt.remArgs[i++]);
  180.       if (oid.toValue() == null)
  181.       {
  182.         System.err.println("Invalid OID argument: " + opt.remArgs[i]);
  183.       }
  184.       else
  185.       {
  186.         addVarBind(pdu, oid, opt.remArgs[i++], opt.remArgs[i++]);
  187.       }
  188.     }
  189.     try {
  190.       // Open the SNMP Session
  191.       session.open();
  192.             // do a dicovery
  193.         try
  194.         {
  195.             USMUtils.init_v3_parameters(
  196.                 setVal.userName,
  197. null,
  198.                 setVal.authProtocol,
  199.                 setVal.authPassword,
  200.                 setVal.privPassword,
  201.                 ses_opt,
  202.                 session,
  203. false,
  204. setVal.privProtocol);
  205.         }
  206.         catch(Exception exp)
  207.         {
  208.             System.out.println(exp.getMessage());
  209.             System.exit(1);
  210.         }
  211.       // Send the INFORM_REQ PDU using synchronous send
  212.      SnmpPDU res_pdu = session.syncSend(pdu);
  213.             // Process PDU on receiving response
  214.             if (res_pdu == null)    
  215.             {
  216.                 // Request timed out.
  217.                 System.out.println ("Request timed out.n");
  218.                 System.exit(1);
  219.             }
  220.             // Response received
  221.         // Check for error in response
  222.         if (res_pdu.getErrstat() != 0)
  223.         {
  224.             System.err.println(res_pdu.getError());
  225.         }
  226.         else    
  227.         {
  228.             // print the response pdu varbinds
  229.             System.out.println(res_pdu.printVarBinds());
  230.         }
  231.     } 
  232.     catch (SnmpException e) {
  233.       System.err.println("Sending PDU"+e.getMessage());
  234.     }
  235.         // Close the session
  236.         session.close();
  237.         // Close the api thread.
  238.         api.close();
  239.         // Exit the application.
  240.         System.exit(0);
  241.   }
  242.     /* 
  243.      * Adds the varbind  with specified oid, type and value to the pdu 
  244.      */
  245.   static void addVarBind(SnmpPDU pdu, SnmpOID oid, String type, String value)
  246.   {
  247.     byte dataType ;
  248.     if (type.equals("INTEGER")) 
  249.     {
  250.       dataType = SnmpAPI.INTEGER;
  251.     } 
  252.     else if (type.equals("STRING")) 
  253.     {
  254.       dataType = SnmpAPI.STRING;
  255.     } 
  256.     else if (type.equals("GAUGE")) 
  257.     {
  258.       dataType = SnmpAPI.GAUGE;
  259.     } 
  260.     else if (type.equals("TIMETICKS")) 
  261.     {
  262.       dataType = SnmpAPI.TIMETICKS;
  263.     } 
  264.     else if (type.equals("OPAQUE")) 
  265.     {
  266.       dataType = SnmpAPI.OPAQUE;
  267.     } 
  268.     else if (type.equals("IPADDRESS")) 
  269.     {
  270.       dataType = SnmpAPI.IPADDRESS;
  271.     } 
  272.     else if (type.equals("COUNTER")) 
  273.     {
  274.       dataType = SnmpAPI.COUNTER;
  275.     } 
  276.     else if (type.equals("OID")) 
  277.     {
  278.       dataType = SnmpAPI.OBJID;
  279.     } 
  280.     else 
  281.     { 
  282.             // Invalid variable type.
  283.       System.err.println("Invalid variable type: " + type);
  284.       return;
  285.     }
  286.         
  287.     SnmpVar var = null;
  288.     try {
  289.       var = SnmpVar.createVariable( value, dataType );
  290.     }
  291.     catch(SnmpException e){
  292.       System.err.println("Cannot create variable: " + oid 
  293.                                     + " with value: " + value);
  294.       return;
  295.     }
  296.     SnmpVarBind varbind = new SnmpVarBind(oid, var);
  297.     pdu.addVariableBinding(varbind);
  298.   }
  299. }