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

SNMP编程

开发平台:

C/C++

  1. /* $Id: snmpv2ctrap.src,v 1.4.2.3 2009/01/28 13:29:38 prathika Exp $ */
  2. /*
  3.  * @(#)snmpv2ctrap.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.  * v2c Trap message using com.adventnet.snmp.snmp2 package of AdventNetSNMP2 api.
  10.  * The user could run this application by giving any one of the following usage.
  11.  *  
  12.  * java snmpv2ctrap [options] hostname timeTicks snmpTrapOid-value [OID type value] ...
  13.  *
  14.  * java snmpv2ctrap [-d] [-c community] [-p port] host TimeTicksvalue OIDvalue [OID {INTEGER | STRING | GAUGE | TIMETICKS | OPAQUE | IPADDRESS | COUNTER | COUNTER64 | UNSIGNED32} value] ...
  15.  * e.g. 
  16.  * java snmpv2ctrap -p 162 -c public adventnet 1000 1.2.0 1.5.0 STRING advent
  17.  * 
  18.  * If the oid is not starting with a dot (.) it will be prefixed by .1.3.6.1.2.1 .
  19.  * So the entire OID of 1.1.0 will become .1.3.6.1.2.1.1.1.0 . You can also
  20.  * give the entire OID .
  21.  *
  22.  * Options: 
  23.  * [-d]                  - Debug output. By default off.
  24.  * [-c] <community>      - community String. By default "public".
  25.  * [-p] <port>           - remote port no. By default 162.
  26.  * <host>      Mandatory - The RemoteHost (agent).Format (string without double qoutes/IpAddress).
  27.  * <timeticks> Mandatory - the value of object sysUpTime when the event occurred
  28.  * <OID-value> Mandatory - Object Identifier  
  29.  * <OID>                 - Give multiple no. of Object Identifiers with value.
  30.  * <type>                - Type of the object
  31.  * <value>               - object-instance value
  32.  */
  33. import java.lang.*;
  34. import java.util.*;
  35. import java.net.*;
  36. import com.adventnet.snmp.snmp2.*;
  37. public class snmpv2ctrap {
  38.   public static void main(String args[]) {
  39.     SnmpAPI api;
  40.             
  41.     // Take care of getting options
  42.     String usage = "snmpv2ctrap [-d] [-c community] [-p port] nhost TimeTicksvalue OIDvalue [OID {INTEGER | STRING | GAUGE | TIMETICKS | OPAQUE | IPADDRESS | COUNTER | COUNTER64 | UNSIGNED32} value] ...";
  43.     String options[] = { "-d", "-c", "-p"};
  44.     String values[] = { "None", null, null};
  45.     ParseOptions opt = new ParseOptions(args,options,values, usage);
  46.     if (opt.remArgs.length<3) opt.usage_error();
  47.                      
  48.     // Start SNMP API
  49.     api = new SnmpAPI();
  50.     if (values[0].equals("Set")) api.setDebug( true );
  51.                 
  52.     // Open session 
  53.     SnmpSession session = new SnmpSession(api);
  54.     session.setTransportProvider("com.adventnet.snmp.snmp2.TcpTransportImpl");
  55.     
  56.     // set v2c version
  57.     session.setVersion( SnmpAPI.SNMP_VERSION_2C ) ;
  58.     // set community
  59.     if (values[1] != null) session.setCommunity( values[1] );
  60.     // Options that will be used for communication. This can be modified by the user 
  61.     // according to his need.   
  62.     ProtocolOptions params = null;
  63.     if(values[2] != null)   {
  64.         params = new TcpProtocolOptionsImpl(opt.remArgs[0], Integer.parseInt(values[2]), -1);
  65.     }
  66.     else    {
  67.         params = new TcpProtocolOptionsImpl(opt.remArgs[0], 162, -1);
  68.     }
  69.     session.setProtocolOptions(params);
  70.     // Build v2 trap PDU
  71.     SnmpPDU pdu = new SnmpPDU();
  72.     pdu.setCommand( api.TRP2_REQ_MSG );
  73.     
  74.     // Add the sysUpTime variable binding
  75.     SnmpOID oid = new SnmpOID(".1.3.6.1.2.1.1.3.0");
  76.     if (oid.toValue() == null) 
  77.         System.err.println("Invalid OID argument: .1.3.6.1.2.1.1.3.0");
  78.     else {
  79.         SnmpVar var = null ; 
  80.         try {
  81.             var = SnmpVar.createVariable(opt.remArgs[1], SnmpAPI.TIMETICKS);
  82.         }
  83.         catch (SnmpException e) {
  84.             System.err.println("Cannot create variable: " +oid+" with value: "+opt.remArgs[1]);
  85.         }
  86.         SnmpVarBind varbind = new SnmpVarBind(oid, var);
  87.         pdu.addVariableBinding(varbind);
  88.         
  89.     }        
  90.     //Add snmpTrapOid variable bindings
  91.      oid = new SnmpOID(".1.3.6.1.6.3.1.1.4.1.0");
  92.     if (oid.toValue() == null) System.err.println("Invalid OID argument: .1.3.6.1.6.3.1.1.4.1.0");
  93.     else {
  94.         SnmpVar var = null ;
  95.         try {
  96.             var = SnmpVar.createVariable(opt.remArgs[2], SnmpAPI.OBJID);
  97.         }
  98.         catch (SnmpException e) {
  99.             System.err.println("Cannot create variable: " +oid+" with value: "+opt.remArgs[2]);
  100.         }
  101.         SnmpVarBind varbind = new SnmpVarBind(oid, var);
  102.         pdu.addVariableBinding(varbind);
  103.         
  104.     }    
  105.     
  106.     // add Variable Bindings
  107.     for (int i=3;i<opt.remArgs.length;) {
  108.       if (opt.remArgs.length < i+3) opt.usage_error(); //need "{OID type value}"
  109.      
  110.         oid = new SnmpOID(opt.remArgs[i++]);
  111.       if (oid.toValue() == null) 
  112.         System.err.println("Invalid OID argument: " + opt.remArgs[i]);
  113.       else 
  114.         addVarBind(pdu, oid, opt.remArgs[i++], opt.remArgs[i++]);
  115.     } // end of add variable bindings
  116.     try {
  117.         // open session
  118.         session.open();
  119.         // Send PDU
  120.          session.send(pdu);
  121.     Thread.sleep(1000); 
  122.     } 
  123.     catch (Exception e) {
  124.       System.err.println("Sending PDU"+e.getMessage());
  125.     }
  126.     // close session    
  127.     session.close();
  128.     // stop api thread
  129.     api.close();
  130.     System.exit(0);
  131.   }
  132. /** adds the varbind  with specified oid, type and value to the pdu */
  133.   static void addVarBind(SnmpPDU pdu, SnmpOID oid, String type, String value)
  134.     {        
  135.       byte dataType ;
  136.       if (type.equals("INTEGER")) {
  137.           dataType = SnmpAPI.INTEGER;
  138.       } else if (type.equals("STRING")) {
  139.           dataType = SnmpAPI.STRING;
  140.       } else if (type.equals("GAUGE")) {
  141.           dataType = SnmpAPI.GAUGE;
  142.       } else if (type.equals("TIMETICKS")) {
  143.           dataType = SnmpAPI.TIMETICKS;
  144.       } else if (type.equals("OPAQUE")) {
  145.           dataType = SnmpAPI.OPAQUE;
  146.       } else if (type.equals("IPADDRESS")) {
  147.           dataType = SnmpAPI.IPADDRESS;
  148.       } else if (type.equals("COUNTER")) {
  149.           dataType = SnmpAPI.COUNTER;
  150.       } else if (type.equals("OID")) { 
  151.           dataType = SnmpAPI.OBJID;
  152.       } else { // unknown type
  153.           System.err.println("Invalid variable type: " + type);
  154.           return;
  155.       }
  156.       SnmpVar var = null;
  157.       try {
  158.           // create variable
  159.           var = SnmpVar.createVariable( value, dataType );
  160.       }
  161.       catch(SnmpException e){
  162.           System.err.println("Cannot create variable: " + oid + " with value: " + value);
  163.           return;
  164.       }
  165.       // create varbind
  166.       SnmpVarBind varbind = new SnmpVarBind(oid, var);
  167.       // add variable binding
  168.       pdu.addVariableBinding(varbind);
  169.     }
  170.   
  171. }