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

SNMP编程

开发平台:

C/C++

  1. /* $Id: snmpv1trap.java,v 1.4.2.5 2009/01/28 13:33:10 tmanoj Exp $ */
  2. /*
  3.  * @(#)snmpv1trap.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.  * v1 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 snmpv1trap hostname enterprise-oid agent-addr generic-trap specific-trap 
  13.  *      timeticks [OID type value] ...
  14.  *
  15.  * java snmpv1trap [-d] [-c community] [-p port] host enterprise agent-addr generic-trap specific-trap timeticks [OID {INTEGER | STRING | GAUGE | TIMETICKS | OPAQUE | IPADDRESS | COUNTER} value] ...
  16.  * e.g. 
  17.  * java snmpv1trap -p 162 -c public adventnet 1.2.0 adventnet 0 6 1000 1.5.0 STRING advent
  18.  * 
  19.  * If the oid is not starting with a dot (.) it will be prefixed by .1.3.6.1.2.1 .
  20.  * So the entire OID of 1.1.0 will become .1.3.6.1.2.1.1.1.0 . You can also
  21.  * give the entire OID .
  22.  * * Options: 
  23.  * [-d] option     Debug output. By default off.
  24.  * [-c] option     community String. By default "public".
  25.  * [-p] option     remote port no. By default 162.
  26.  * enterprise      Object Identifier (sysObjectID for generic traps)
  27.  * agent-addr      the IP address of the agent sending the trap
  28.  * generic-trap    generic trap type INTEGER (0..6)
  29.  * specific-trap   specific code INTEGER(0..2147483647)
  30.  * timeticks       the value of object sysUpTime when the event occurred
  31.  * host mandatory  The RemoteHost (agent).Format (string without double qoutes/IpAddress).
  32.  * OID  option     Give multiple no. of Object Identifiers with type and value.
  33.  * type            Type of the object
  34.  * value           object-instance value
  35.  */
  36. import java.lang.*;
  37. import java.util.*;
  38. import java.net.*;
  39. import com.adventnet.snmp.snmp2.*;
  40. public class snmpv1trap {
  41.   public static void main(String args[]) {
  42.       SnmpAPI api;
  43.       // Take care of getting options
  44.       String usage = "snmpv1trap [-d] [-c community] [-p port] host enterprise agent-addr generic-trap specific-trap timeticks [OID {INTEGER | STRING | GAUGE | TIMETICKS | OPAQUE | IPADDRESS | COUNTER} value] ..."; 
  45.       String options[] = { "-d", "-c", "-p"};
  46.       String values[] = { "None", null, null};
  47.       
  48.       ParseOptions opt = new ParseOptions(args,options,values, usage);
  49.       if (opt.remArgs.length<6) opt.usage_error();
  50.       // Start SNMP API
  51.       api = new SnmpAPI();
  52.       if (values[0].equals("Set")) api.setDebug( true );
  53.       // Open session
  54.       SnmpSession session = new SnmpSession(api);
  55.       // set community
  56.       if (values[1] != null) session.setCommunity( values[1] );
  57.       UDPProtocolOptions udpOpt = new UDPProtocolOptions(opt.remArgs[0]);
  58.       try
  59.       {
  60.           if (values[2] != null)
  61.           {
  62.               udpOpt.setRemotePort(Integer.parseInt(values[2]));
  63.           }
  64.           else 
  65.           {
  66.               udpOpt.setRemotePort(162);
  67.           }
  68.       }
  69.       catch(Exception ex)
  70.       {
  71.           System.err.println("Invalid port: " + values[2]);
  72.           System.exit(0);
  73.       }
  74.       // Build SNMPv1 Trap PDU
  75.       SnmpPDU pdu = new SnmpPDU();
  76.       pdu.setProtocolOptions(udpOpt);
  77.       pdu.setCommand( api.TRP_REQ_MSG );
  78.     
  79.       // fill in v1 trap PDU fields
  80.       try { 
  81.           // set enterprise OID 
  82.           pdu.setEnterprise(new SnmpOID(opt.remArgs[1]));
  83.           // set agent address
  84.           pdu.setAgentAddress(InetAddress.getByName(opt.remArgs[2]));
  85.           // set generic trap type
  86.           pdu.setTrapType(Integer.parseInt(opt.remArgs[3]));
  87.            // set specific code
  88.           if (opt.remArgs.length>4) 
  89.               pdu.setSpecificType(Integer.parseInt(opt.remArgs[4]));
  90.           // set time-stamp
  91.           if (opt.remArgs.length>5) 
  92.               pdu.setUpTime(Integer.parseInt(opt.remArgs[5]));
  93.       } catch (Exception ex) { 
  94.           System.err.println("error in one or more required fields: "+ex);
  95.           opt.usage_error();
  96.       }
  97.       // add Variable Bindings
  98.       for (int i=6;i<opt.remArgs.length;) { 
  99.           if (opt.remArgs.length < i+3) opt.usage_error(); //need "{OID type value}"
  100.           SnmpOID oid = new SnmpOID(opt.remArgs[i++]);
  101.           if (oid.toValue() == null) {
  102.               System.err.println("Invalid OID argument: " + opt.remArgs[i]);
  103.               System.exit(0);
  104.           }
  105.           else {
  106.               addVarBind(pdu, oid, opt.remArgs[i++], opt.remArgs[i++]);
  107.           }
  108.       } // end of add variable bindings
  109.       try { 
  110.           // open session
  111.           session.open(); 
  112.           // Send PDU
  113.           session.send(pdu); 
  114.       } catch (SnmpException e) {
  115.           System.err.println("Sending PDU"+e.getMessage());
  116.       }
  117.       System.exit(0);
  118.   }
  119.   /** adds the varbind  with specified oid, type and value to the pdu */
  120.   static void addVarBind(SnmpPDU pdu, SnmpOID oid, String type, String value)
  121.   {     
  122.       byte dataType ;
  123.       if (type.equals("INTEGER")) {
  124.           dataType = SnmpAPI.INTEGER;
  125.       } else if (type.equals("STRING")) {
  126.           dataType = SnmpAPI.STRING;
  127.       } else if (type.equals("GAUGE")) {
  128.           dataType = SnmpAPI.GAUGE;
  129.       } else if (type.equals("TIMETICKS")) {
  130.           dataType = SnmpAPI.TIMETICKS;
  131.       } else if (type.equals("OPAQUE")) {
  132.           dataType = SnmpAPI.OPAQUE;
  133.       } else if (type.equals("IPADDRESS")) {
  134.           dataType = SnmpAPI.IPADDRESS;
  135.       } else if (type.equals("COUNTER")) {
  136.           dataType = SnmpAPI.COUNTER;
  137.       } else if (type.equals("OID")) { 
  138.           dataType = SnmpAPI.OBJID;
  139.       } else { // unknown type
  140.           System.err.println("Invalid variable type: " + type);
  141.           return;
  142.       }
  143.       SnmpVar var = null;
  144.       try {
  145.           // create variable 
  146.           var = SnmpVar.createVariable( value, dataType );
  147.       }
  148.       catch(SnmpException e){
  149.           System.err.println("Cannot create variable: " + oid + " with value: " + value);
  150.           return;
  151.       }
  152.       // create varbind
  153.       SnmpVarBind varbind = new SnmpVarBind(oid, var);
  154.       // add variable binding
  155.       pdu.addVariableBinding(varbind);
  156.     }
  157. }