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

SNMP编程

开发平台:

C/C++

  1. /* $Id: snmpv1trap.java,v 1.4.2.6 2009/01/28 13:08:35 prathika 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 and com.adventnet.snmp.mib
  10.  * packages of AdventNetSNMP2 api.
  11.  * The user could run this application by giving any one of the following usage.
  12.  *  
  13.  * java snmpv1trap [options] [-m mibfile] hostname enterprise-oid agent-addr generic-trap specific-trap 
  14.  *      timeticks [OID value] ...
  15.  *
  16.  * java snmpv1trap [-d] [-c community] [-p port] [-m MIB_files] host enterprise agent-addr generic-trap specific-trap timeticks [OID value] ...
  17.  * e.g. 
  18.  * java snmpv1trap -p 162 -c public [-m ../../../mibs/RFC1213-MIB] adventnet 1.2.0 adventnet 0 6 1000 1.5.0 advent
  19.  * 
  20.  * If the oid is not starting with a dot (.) it will be prefixed by .1.3.6.1.2.1 .
  21.  * So the entire OID of 1.1.0 will become .1.3.6.1.2.1.1.1.0 . You can also
  22.  * give the entire OID .
  23.  * 
  24.  * Since the mib is loaded you can also give string oids in the following formats
  25.  * .iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0 or system.sysDescr.0 or
  26.  * sysDescr.0 .
  27.  * 
  28.  * Options:
  29.  * [-d] option     Debug output. By default off.
  30.  * [-c] option     community String. By default "public".
  31.  * [-p] option     remote port no. By default 162.
  32.  * [-m] option     MIB files to be loaded. Used to find the type of object.
  33.  * enterprise      Object Identifier (sysObjectID for generic traps)
  34.  * agent-addr      the IP address of the agent sending the trap
  35.  * generic-trap    generic trap type INTEGER (0..6)
  36.  * specific-trap   specific code INTEGER(0..2147483647)
  37.  * timeticks       the value of object sysUpTime when the event occurred
  38.  * host mandatory  The RemoteHost (agent).Format (string without double qoutes/IpAddress).
  39.  * OID  option     Give multiple no. of Object Identifiers with value.
  40.  * value           object-instance value . 
  41.  */
  42. import java.lang.*;
  43. import java.util.*;
  44. import java.net.*;
  45. import com.adventnet.snmp.snmp2.*;
  46. import com.adventnet.snmp.mibs.*;
  47. public class snmpv1trap
  48. {
  49.     public static void main(String args[])
  50.     {
  51.         SnmpAPI api;
  52.         // Take care of getting options
  53.         String usage =
  54.         "nsnmpv1trap [-d] [-c community] [-p port] [-m MIB_files] n" +
  55.         "host enterprise agent-addr generic-trap specific-trap n" +
  56.         "timeticks [OID value] ..."; 
  57.         String options[] = { "-d", "-c", "-p" , "-m"};
  58.         String values[] = { "None", null, null, null};
  59.         ParseOptions opt = new ParseOptions(args,options,values, usage);
  60.         if (opt.remArgs.length<6) opt.usage_error();
  61.         // Start SNMP API
  62.         api = new SnmpAPI();
  63.         if (values[0].equals("Set")) api.setDebug( true );
  64.         // create a UDPProtocolOptions object
  65.         UDPProtocolOptions udpOpt = null;
  66.         try
  67.         {
  68.             if(values[2] != null)
  69.             {
  70.                 udpOpt = new UDPProtocolOptions(opt.remArgs[0],Integer.parseInt(values[2]));
  71.             }
  72.             else
  73.             {
  74.                 udpOpt = new UDPProtocolOptions(opt.remArgs[0], 162);
  75.             }
  76.         }
  77.         catch(Exception exp)
  78.         {
  79.             System.err.println("Invalid port: " + values[2]);
  80.             System.exit(1);
  81.         }
  82.         // Loading MIBS - For addtional mibs to load please modify this by yourself.
  83.         MibOperations mibOps = new MibOperations();
  84.         //To load MIBs from compiled file
  85.         mibOps.setLoadFromCompiledMibs(true);
  86.         if (values[3] != null)
  87.         {
  88.             try
  89.             {
  90.                 System.err.println("Loading MIBs: "+values[3]);
  91.                 mibOps.loadMibModules(values[3]);
  92.             }
  93.             catch (Exception ex)
  94.             {
  95.                 System.err.println("Error loading MIBs: "+ex.getMessage());
  96.                 System.exit(1);
  97.             }
  98.         }
  99.         // Open session
  100.         SnmpSession session = new SnmpSession(api);
  101.         // set the protocolOptions on the session.
  102.         session.setProtocolOptions(udpOpt);
  103.         // set community
  104.         if (values[1] != null) session.setCommunity( values[1] );
  105.         // Build SNMPv1 Trap PDU
  106.         SnmpPDU pdu = new SnmpPDU();
  107.         pdu.setCommand( api.TRP_REQ_MSG );
  108.         // fill in v1 trap PDU fields
  109.         try
  110.         {
  111.             // set enterprise OID   
  112.             pdu.setEnterprise(mibOps.getSnmpOID(opt.remArgs[1]));
  113.             // set agent address
  114.             pdu.setAgentAddress(InetAddress.getByName(opt.remArgs[2]));
  115.             // set generic trap type
  116.             pdu.setTrapType(Integer.parseInt(opt.remArgs[3]));
  117.             // set specific code
  118.             if (opt.remArgs.length>4) 
  119.             {
  120.                 pdu.setSpecificType(Integer.parseInt(opt.remArgs[4]));
  121.             }
  122.             // set time-stamp
  123.             if (opt.remArgs.length>5)
  124.             {
  125.                 pdu.setUpTime(Integer.parseInt(opt.remArgs[5]));
  126.             }
  127.         }
  128.         catch (Exception ex)
  129.         { 
  130.                 System.err.println("error in one or more required fields: "+ex);
  131.                 opt.usage_error();
  132.         }
  133.         // add Variable Bindings
  134.         for (int i=6;i<opt.remArgs.length;)
  135.         { 
  136.             if (opt.remArgs.length < i+2) opt.usage_error(); //need "{OID value}"
  137.             SnmpOID oid = mibOps.getSnmpOID(opt.remArgs[i++]);
  138.             if (oid == null)
  139.             {
  140.                 System.exit(1);
  141.             }
  142.             else
  143.             {
  144.                 // Get the MibNode for this SnmpOID instance if found 
  145.                 MibNode node = mibOps.getMibNode(oid);
  146.                 if (node == null)
  147.                 { 
  148.                     System.err.println("Failed. MIB node unavailable for OID:"+ oid);
  149.                     System.exit(1);
  150.                 }
  151.                 else
  152.                 {
  153.                     // Get the syntax associated with this node
  154.                     if (node.getSyntax() == null) 
  155.                     {
  156.                             System.err.println("Failed. OID not a leaf node .");
  157.                     }
  158.                     else
  159.                     {
  160.                         SnmpVarBind varbind = null;
  161.                         try
  162.                         {
  163.                             // Get the SnmpVar instance for the value
  164.                             SnmpVar var = node.getSyntax().createVariable(opt.remArgs[i++]);
  165.                             // Create SnmpVarBind instance 
  166.                             varbind = new SnmpVarBind(oid,var);
  167.                         }
  168.                         catch (SnmpException ex)
  169.                         { 
  170.                             System.err.println("Error creating variable."); 
  171.                             System.exit(1);
  172.                         }
  173.                         // Add the variable-bindings to the PDU
  174.                         pdu.addVariableBinding(varbind);      
  175.                     }
  176.                 }
  177.             }
  178.         } // end of add variable bindings
  179.         try
  180.         { 
  181.             // open session
  182.             session.open(); 
  183.             // Send Trap PDU
  184.             session.send(pdu); 
  185.         }
  186.         catch (SnmpException e)
  187.         {
  188.             System.err.println("Sending PDU : " + e.getMessage());
  189.             System.exit(1);
  190.         }
  191.         // close session
  192.         session.close();
  193.         // stop api thread
  194.         api.close();
  195.     }
  196. }