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

SNMP编程

开发平台:

C/C++

  1. /* $Id: snmpv1trap.java,v 1.4 2002/09/09 05:37:17 parasuraman Exp $ */
  2. /*
  3.  * @(#)snmpv1trap.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.  * 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. import ParseOptions;
  41. public class snmpv1trap {
  42.   public static void main(String args[]) {
  43.       SnmpAPI api;
  44.   // Take care of getting options
  45.       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] ..."; 
  46.       String options[] = { "-d", "-c", "-p"};
  47.       String values[] = { "None", null, null};
  48.       
  49.       ParseOptions opt = new ParseOptions(args,options,values, usage);
  50.       if (opt.remArgs.length<6) opt.usage_error();
  51.       // Start SNMP API
  52.       api = new SnmpAPI();
  53.       if (values[0].equals("Set")) api.setDebug( true );
  54.   // Open session
  55.       SnmpSession session = new SnmpSession(api);
  56.   // set remot Host
  57.       session.setPeername( opt.remArgs[0] );
  58.   // set community
  59.   if (values[1] != null) session.setCommunity( values[1] );
  60.   // set remort Port
  61.   try {
  62.       if (values[2] != null) 
  63.      session.setRemotePort( Integer.parseInt(values[2]) );
  64.   else 
  65.   session.setRemotePort(162);
  66.   }
  67.       catch (NumberFormatException ex) {
  68.   System.err.println("Invalid Integer Arg. for port number");
  69.          System.exit(0);
  70.       }
  71.   // Build SNMPv1 Trap PDU
  72.       SnmpPDU pdu = new SnmpPDU();
  73.       pdu.setCommand( api.TRP_REQ_MSG );
  74.       // fill in v1 trap PDU fields
  75.   try { 
  76.   // set enterprise OID
  77.           pdu.setEnterprise(new SnmpOID(opt.remArgs[1]));
  78.   // set agent address
  79.           pdu.setAgentAddress(InetAddress.getByName(opt.remArgs[2]));
  80.   // set generic trap type
  81.           pdu.setTrapType(Integer.parseInt(opt.remArgs[3]));
  82.    // set specific code
  83.           if (opt.remArgs.length>4) 
  84.           pdu.setSpecificType(Integer.parseInt(opt.remArgs[4]));
  85.   // set time-stamp
  86.           if (opt.remArgs.length>5) 
  87.           pdu.setUpTime(Integer.parseInt(opt.remArgs[5]));
  88.       } catch (Exception ex) { 
  89.           System.err.println("error in one or more required fields: "+ex);
  90.           opt.usage_error();
  91.       }
  92.   // add Variable Bindings
  93.       for (int i=6;i<opt.remArgs.length;) { 
  94.           if (opt.remArgs.length < i+3) opt.usage_error(); //need "{OID type value}"
  95.           SnmpOID oid = new SnmpOID(opt.remArgs[i++]);
  96.   if (oid.toValue() == null) {
  97.   System.err.println("Invalid OID argument: " + opt.remArgs[i]);
  98.   System.exit(0);
  99.   }
  100.   else {
  101.   addVarBind(pdu, oid, opt.remArgs[i++], opt.remArgs[i++]);
  102.   }
  103.       } // end of add variable bindings
  104.       try { 
  105.   // open session
  106.   session.open(); 
  107.   // Send PDU
  108.   session.send(pdu); 
  109.       } catch (SnmpException e) {
  110.       System.err.println("Sending PDU"+e.getMessage());
  111.       }
  112.       System.exit(0);
  113.   }
  114.   /** adds the varbind  with specified oid, type and value to the pdu */
  115.   static void addVarBind(SnmpPDU pdu, SnmpOID oid, String type, String value)
  116.   {
  117.   byte dataType ;
  118.   if (type.equals("INTEGER")) {
  119.   dataType = SnmpAPI.INTEGER;
  120.       } else if (type.equals("STRING")) {
  121.   dataType = SnmpAPI.STRING;
  122.       } else if (type.equals("GAUGE")) {
  123.   dataType = SnmpAPI.GAUGE;
  124.       } else if (type.equals("TIMETICKS")) {
  125.   dataType = SnmpAPI.TIMETICKS;
  126.       } else if (type.equals("OPAQUE")) {
  127.   dataType = SnmpAPI.OPAQUE;
  128.       } else if (type.equals("IPADDRESS")) {
  129.   dataType = SnmpAPI.IPADDRESS;
  130.       } else if (type.equals("COUNTER")) {
  131.   dataType = SnmpAPI.COUNTER;
  132.       } else if (type.equals("OID")) { 
  133.   dataType = SnmpAPI.OBJID;
  134.       } else { // unknown type
  135.   System.err.println("Invalid variable type: " + type);
  136.   return;
  137.       }
  138.   SnmpVar var = null;
  139.   try {
  140.   // create variable 
  141.   var = SnmpVar.createVariable( value, dataType );
  142.   }
  143.   catch(SnmpException e){
  144.   System.err.println("Cannot create variable: " + oid + " with value: " + value);
  145.   return;
  146.   }
  147.   // create varbind
  148.   SnmpVarBind varbind = new SnmpVarBind(oid, var);
  149.   // add variable binding
  150.   pdu.addVariableBinding(varbind);
  151. }
  152. }