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

SNMP编程

开发平台:

C/C++

  1. /* $Id: snmpset.src,v 1.6.2.6 2009/01/28 13:23:40 tmanoj Exp $ */
  2. /*
  3.  * @(#)snmpset.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 do
  9.  * the basic SNMP operation SET 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 snmpset [options] hostname oid value [oid value] ...
  14.  *
  15.  * v1 request: 
  16.  * java snmpset [-d] [-c community] [-wc writeCommunity] [-p port] [-t timeout] [-r retries] host [OID {INTEGER | STRING | GAUGE | TIMETICKS | OPAQUE | IPADDRESS | COUNTER | OID } value] ...
  17.  * e.g. 
  18.  * java snmpset -p 161 -c public adventnet 1.1.0 advent-machine 1.4.0 contact-advent
  19.  *
  20.  * v2c request:  
  21.  * java snmpset [-d] [-v version(v1,v2)] [-c community] [-wc writeCommunity] [-p port] [-t timeout] [-r retries] host [OID {INTEGER | STRING | GAUGE | TIMETICKS | OPAQUE | IPADDRESS | COUNTER | OID } value] ...
  22.  * e.g. For v1 request give -v v1 or drop the option -v .
  23.  * java snmpset -p 161 -v v2 -c public adventnet 1.7.0 76
  24.  * 
  25.  * v3 request:
  26.  * java snmpset [-d] [-v version(v1,v2,v3)] [-c community] [-p port] [-r retries] [-t timeout] [-u user] [-a auth_protocol] [-w auth_password] [-s priv_password] [-i context_id]  [-pp privProtocol(DES/AES-128/AES-192/AES-256/3DES)]  host [OID {INTEGER | STRING | GAUGE | TIMETICKS | OPAQUE | IPADDRESS | COUNTER | OID } value] ...
  27.  * e.g.
  28.  * java snmpset -v v3 -u initial2 -w initial2Pass -a MD5 10.3.2.120 1.5.0 STRING whatever
  29.  * 
  30.  * If the oid is not starting with a dot (.) it will be prefixed by .1.3.6.1.2.1 .
  31.  * So the entire OID of 1.1.0 will become .1.3.6.1.2.1.1.1.0 . You can also
  32.  * give the entire OID .
  33.  *
  34.  * Options:
  35.  * [-d]                - Debug output. By default off.
  36.  * [-c] <community>    - community String. By default "public".
  37.  * [-wc] <community>   - write community String. By default "public".
  38.  * [-p] <port>         - remote port no. By default 161.
  39.  * [-t] <Timeout>      - Timeout. By default 5000ms.
  40.  * [-r] <Retries>      - Retries. By default 0.      
  41.  * [-v] <version>      - version(v1 / v2 / v3). By default v1.
  42.  * [-u] <username>     - The v3 principal/userName
  43.  * [-a] <autProtocol>  - The authProtocol(MD5/SHA). Mandatory if authPassword is specified
  44.  * [-pp]<privProtocol  - The privProtocol(AES/DES)
  45.  * [-w] <authPassword> - The authentication password.
  46.  * [-s] <privPassword> - The privacy protocol password. Must be accompanied with auth password and authProtocol fields.
  47.  * [-n] <contextName>  - The contextName to be used for the v3 pdu.
  48.  * [-i] <contextID>    - The contextID to be used for the v3 pdu.
  49.  * <host> Mandatory    - The RemoteHost (agent).Format (string without double qoutes/IpAddress).
  50.  * <OID>  Mandatory    - Give multiple no. of Object Identifiers with type and value.
  51.  * <type> Mandatory    - object type
  52.  * <value> Mandatory   - The object instance value to be set .
  53.  */
  54. import java.lang.*;
  55. import java.util.*;
  56. import java.net.*;
  57. import com.adventnet.snmp.snmp2.*;
  58. import com.adventnet.snmp.snmp2.usm.*;
  59.  
  60. public class snmpset
  61. {
  62.     public static void main(String args[])
  63.     {
  64.         // Take care of getting options
  65.         String usage =
  66.             "nsnmpset [-d] [-v version(v1,v2,v3)] [-c community] n" +
  67.             "[-wc writeCommunity] [-p port] [-r retries] n" +
  68.             "[-t timeout] [-u user] [-a auth_protocol] n" +
  69.             "[-w auth_password] [-s priv_password] n" +
  70.             "[-n contextName] [-i contextID] n" +
  71.             "[-DB_driver database_driver]n" +
  72.             "[-DB_url database_url]n" +
  73.             "[-DB_username database_username]n" +
  74.             "[-DB_password database_password]n" +
  75. "[-pp privProtocol(DES/AES-128/AES-192/AES-256/3DES)]]n" +
  76.             "host [OID {INTEGER | STRING | GAUGE | TIMETICKS | n" +
  77.             "OPAQUE | IPADDRESS | COUNTER | OID } value] ...n"; 
  78.             
  79.         
  80.         String options[] =
  81.         {
  82.             "-d", "-c", "-wc", "-p", "-r", "-t", "-m",
  83.             "-v", "-u", "-a", "-w", "-s", "-n", "-i",
  84.             "-DB_driver", "-DB_url", "-DB_username", "-DB_password","-pp"
  85.         };
  86.         
  87.         String values[] =
  88.         {
  89.             "None", null, null, null, null, null, "None",
  90.             null, null, null, null, null, null, null,
  91.             null, null, null, null,null
  92.         };
  93.         ParseOptions opt = new ParseOptions(args,options,values,usage);
  94.         if (opt.remArgs.length<1)
  95.         {
  96.             opt.usage_error();
  97.         }
  98.         // Start SNMP API
  99.         SnmpAPI api;
  100.         api = new SnmpAPI();
  101.         if (values[0].equals("Set")) api.setDebug( true );
  102.         // Open session 
  103.         SnmpSession session = new SnmpSession(api);
  104.         int PORT = 3;
  105.         
  106.         SnmpPDU pdu = new SnmpPDU();
  107.         UDPProtocolOptions ses_opt = new UDPProtocolOptions();
  108.         ses_opt.setRemoteHost(opt.remArgs[0]);
  109.         if(values[PORT] != null)
  110.         {
  111.             try
  112.             {
  113.                 ses_opt.setRemotePort(Integer.parseInt(values[PORT]));
  114.             }
  115.             catch(Exception exp)
  116.             {
  117.                 System.out.println("Invalid port: " + values[PORT]);
  118.                 System.exit(1);
  119.             }
  120.         }
  121.         pdu.setProtocolOptions(ses_opt);
  122.         // set values
  123.         SetValues setVal = new SetValues(session, values);
  124.         if(setVal.usage_error)
  125.         {
  126.             opt.usage_error();
  127.         }
  128.         String driver = values[14];
  129.         String url = values[15];
  130.         String username = values[16];
  131.         String password = values[17];
  132.         if(driver != null || url != null ||
  133.             username != null || password != null)
  134.         {
  135.             if(session.getVersion() != 3)
  136.             {
  137.                 System.out.println(
  138.                     "Database option can be used only for SNMPv3.");
  139.                 System.exit(1);
  140.             }
  141.             if(driver == null)
  142.             {
  143.                 System.out.println(
  144.                     "The Database driver name should be given.");
  145.                 System.exit(1);
  146.             }
  147.             if(url == null)
  148.             {
  149.                 System.out.println("The Database URL should be given.");
  150.                 System.exit(1);
  151.             }
  152.             try
  153.             {
  154.                 api.setV3DatabaseFlag(true);
  155.                 api.initJdbcParams(driver, url, username, password);
  156.             }
  157.             catch(Exception exp)
  158.             {
  159.                 System.out.println("Unable to Establish Database Connection.");
  160.                 System.out.println("Please check the driverName and url.");
  161.                 System.exit(1);
  162.             }
  163.         }
  164.         // Build set request PDU
  165.        // SnmpPDU pdu = new SnmpPDU();
  166.         pdu.setCommand( api.SET_REQ_MSG );
  167.         // add Variable Bindings
  168.         for (int i=1;i<opt.remArgs.length;)
  169.         {
  170.             if (opt.remArgs.length < i+3)
  171.             {
  172.                 opt.usage_error(); //need "{OID type value}"
  173.             }
  174.             SnmpOID oid = new SnmpOID(opt.remArgs[i++]);
  175.             if (oid.toValue() == null)
  176.             {
  177.                 System.err.println("Invalid OID argument: " + opt.remArgs[i]);
  178.             }
  179.             else
  180.             {
  181.                 addvarbind(pdu, oid, opt.remArgs[i++], opt.remArgs[i++]);
  182.             }
  183.         } // end of add variable bindings
  184.         try
  185.         {
  186.             //open session
  187.             session.open();
  188.         }
  189.         catch (SnmpException e)
  190.         {
  191.             System.err.println("Sending PDU"+e.getMessage());
  192.         }
  193.         if(session.getVersion()==SnmpAPI.SNMP_VERSION_3)
  194.         {
  195.             pdu.setUserName(setVal.userName.getBytes());
  196.             try
  197.             {
  198.                 USMUtils.init_v3_parameters(
  199.                     setVal.userName,
  200. null,
  201.                     setVal.authProtocol,
  202.                     setVal.authPassword,
  203.                     setVal.privPassword,
  204.                     ses_opt,
  205. session,
  206. false,
  207. setVal.privProtocol);
  208.             }
  209.             catch(SnmpException exp)
  210.             {
  211.                 System.out.println(exp.getMessage());
  212.                 System.exit(1);
  213.             }
  214.             pdu.setContextName(setVal.contextName.getBytes());
  215.             pdu.setContextID(setVal.contextID.getBytes());
  216.         }
  217.         SnmpPDU res_pdu = null;
  218.         try // Send PDU receive response PDU
  219.         {
  220.             res_pdu = session.syncSend(pdu); 
  221.         }
  222.         catch (SnmpException e)
  223.         {
  224.             System.err.println(e.getMessage());
  225.             System.exit(1);
  226.         }
  227.         if (res_pdu == null)
  228.         {
  229.             // timeout
  230.             System.out.println("Request timed out to: " + opt.remArgs[0] );
  231.             System.exit(1);
  232.         }
  233.         String res = "Response PDU received from " + res_pdu.getProtocolOptions().getSessionId() + ".";
  234.         if(res_pdu.getVersion() < 3)
  235.         {
  236.             res = res + " Community = " + res_pdu.getCommunity() + ".";
  237.         }
  238.         System.out.println(res);
  239.     
  240.         // Check for error in response
  241.         if (res_pdu.getErrstat() != 0)
  242.         {
  243.             System.err.println(res_pdu.getError());
  244.         }
  245.         else
  246.         {
  247.             // print the response pdu varbinds
  248.             System.out.println(res_pdu.printVarBinds());
  249.         }
  250.         // close session
  251.         session.close();
  252.         // stop api thread
  253.         api.close();
  254.     }
  255.     /** adds the varbind  with specified oid, type and value to the pdu */
  256.     static void addvarbind(SnmpPDU pdu, SnmpOID oid, String type, String value)
  257.     {
  258.         byte dataType ;
  259.         if (type.equals("INTEGER"))
  260.         {
  261.             dataType = SnmpAPI.INTEGER;
  262.         }
  263.         else if (type.equals("STRING"))
  264.         {
  265.             dataType = SnmpAPI.STRING;
  266.         }
  267.         else if (type.equals("GAUGE"))
  268.         {
  269.             dataType = SnmpAPI.GAUGE;
  270.         }
  271.         else if (type.equals("TIMETICKS"))
  272.         {
  273.             dataType = SnmpAPI.TIMETICKS;
  274.         }
  275.         else if (type.equals("OPAQUE"))
  276.         {
  277.             dataType = SnmpAPI.OPAQUE;
  278.         }
  279.         else if (type.equals("IPADDRESS"))
  280.         {
  281.             dataType = SnmpAPI.IPADDRESS;
  282.         }
  283.         else if (type.equals("COUNTER"))
  284.         {
  285.             dataType = SnmpAPI.COUNTER;
  286.         }
  287.         else if (type.equals("OID"))
  288.         { 
  289.             dataType = SnmpAPI.OBJID;
  290.         }
  291.         else if (type.equals("BITS"))
  292.         {
  293.             dataType = SnmpAPI.STRING;
  294.         }
  295.         else
  296.         {
  297.             System.err.println("Invalid variable type: " + type);
  298.             return;
  299.         }
  300.         SnmpVar var = null;
  301.         try
  302.         {
  303.             // create SnmpVar instance for the value and the type
  304.             var = SnmpVar.createVariable( value, dataType );
  305.         }
  306.         catch(SnmpException e)
  307.         {
  308.             System.err.println("Cannot create variable: " + oid + " with value: " + value);
  309.             return;
  310.         }
  311.         //create varbind
  312.         SnmpVarBind varbind = new SnmpVarBind(oid, var);
  313.         // add variable binding
  314.         pdu.addVariableBinding(varbind);
  315.     }
  316. }