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

SNMP编程

开发平台:

C/C++

  1. /* $Id: snmpv2ctrap.src,v 1.4.2.3 2009/01/28 13:01:35 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] -m mibfile hostname timeTicks snmpTrapOID-value [OID value] ...
  13.  *
  14.  * java snmpv2ctrap [-d] [-c community] [-p port] -m MIB_files host TimeTicksvalue OIDvalue [OID value] ...
  15.  * e.g.
  16.  * java snmpv2ctrap -m ../../../mibs/RFC1213-MIB 10.3.2.120 16352 coldStartTrap ifIndex.2 2
  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.  * If the mib is loaded you can also give string oids in the following formats
  23.  * .iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0 or system.sysDescr.0 or
  24.  * sysDescr.0 .
  25.  *  
  26.  * Options:
  27.  * [-d]                  - Debug output. By default off.
  28.  * [-c] <community>      - community String. By default "public".
  29.  * [-p] <port>           - remote port no. By default 162.
  30.  * -m   <MIBfile>        - MIB files.Mandatory.To load multiple mibs give within double quotes files seperated by a blank space.       
  31.  * <host>      Mandatory - The RemoteHost (agent).Format (string without double qoutes/IpAddress).
  32.  * <timeticks> Mandatory - the value of object sysUpTime when the event occurred
  33.  * <OID-value> Mandatory - Object Identifier  
  34.  * <OID>                 - Give multiple no. of Object Identifiers with value.
  35.  * <value>               - object-instance value
  36.  */
  37.     
  38. import java.lang.*;
  39. import java.util.*;
  40. import java.net.*;
  41. import com.adventnet.snmp.snmp2.*;
  42. import com.adventnet.snmp.mibs.*;
  43. public class snmpv2ctrap 
  44. {
  45.     private static final int DEBUG = 0;
  46.     private static final int COMMUNITY = 1;
  47.     private static final int PORT = 2;
  48.     private static final int MIBS = 3;
  49.     public static void main(String args[]) 
  50.     {
  51.         SnmpAPI api;
  52.             
  53.         // Take care of getting options
  54.         String usage = 
  55.             "nsnmpv2ctrap [-d] [-c community] [-p port] -m MIB_files n"+
  56.             "host TimeTicksvalue OIDvalue [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<3)
  61.         {
  62.             opt.usage_error();
  63.         }   
  64.                      
  65.         // Start SNMP API
  66.         api = new SnmpAPI();
  67.         if (values[DEBUG].equals("Set"))
  68.         {
  69.             api.setDebug( true );    
  70.         }   
  71.         
  72.         // Open session 
  73.         SnmpSession session = new SnmpSession(api);
  74.         
  75.         // set version 2c
  76.         session.setVersion( SnmpAPI.SNMP_VERSION_2C ) ;
  77.         
  78.         // set remote Host
  79.         UDPProtocolOptions ses_opt = new UDPProtocolOptions(opt.remArgs[0]);
  80.         
  81.         // set community
  82.         if (values[COMMUNITY] != null)
  83.         {
  84.             session.setCommunity( values[COMMUNITY] );
  85.         }   
  86.     
  87.         // set remote Port
  88.         try 
  89.         {
  90.             if (values[PORT] != null) 
  91.             {
  92.                 ses_opt.setRemotePort( Integer.parseInt(values[PORT]) );
  93.             }   
  94.             else 
  95.             {
  96.                 ses_opt.setRemotePort(162);
  97.             }   
  98.         }
  99.         catch (NumberFormatException ex) 
  100.         {
  101.             System.err.println("Invalid Integer Arg");
  102.         }
  103.         session.setProtocolOptions(ses_opt);
  104.         
  105.         // Loading MIBS 
  106.         MibOperations mibOps = new MibOperations();
  107.      
  108.         // To load MIBs from compiled file
  109.          mibOps.setLoadFromCompiledMibs(true);
  110.           
  111.         if (values[MIBS] != null) 
  112.         {
  113.             try 
  114.             {
  115.                 System.err.println("Loading MIBs: "+values[MIBS]);
  116.                 mibOps.loadMibModules(values[MIBS]);
  117.             }
  118.             catch (Exception ex) 
  119.             {
  120.                 System.err.println("Error loading MIBs: "+ex.getMessage());
  121.                 System.exit(1);
  122.             }
  123.         }
  124.         
  125.         // Build trap request PDU
  126.         SnmpPDU pdu = new SnmpPDU();
  127.         pdu.setCommand( api.TRP2_REQ_MSG );
  128.     
  129.         // Adding the sysUpTime variable binding 
  130.         SnmpOID oid = mibOps.getSnmpOID(".1.3.6.1.2.1.1.3.0");
  131.         if (oid == null) 
  132.         {
  133.             System.exit(1);
  134.         }   
  135.         else     
  136.         {
  137.             addVarBind(mibOps, pdu, oid, opt.remArgs[1]);
  138.         }   
  139.         // Adding the snmpTrapOID variable binding
  140.          oid = mibOps.getSnmpOID(".1.3.6.1.6.3.1.1.4.1.0");
  141.         if (oid == null) 
  142.         {
  143.             System.exit(1);
  144.         }
  145.         else 
  146.         {
  147.             addVarBind(mibOps, pdu, oid, opt.remArgs[2]);
  148.         }   
  149.     
  150.         // add Variable Bindings
  151.         for (int i=3;i<opt.remArgs.length;) 
  152.         { 
  153.             if (opt.remArgs.length < i+2)
  154.             {
  155.                 opt.usage_error(); //need "{OID value}"
  156.             }   
  157.             oid = mibOps.getSnmpOID(opt.remArgs[i++]);
  158.             if (oid == null) 
  159.             {
  160.                 System.exit(1);
  161.             }   
  162.             else
  163.             {
  164.                 addVarBind(mibOps, pdu, oid, opt.remArgs[i++]);
  165.             }
  166.         } // end of add variable bindings
  167.         try
  168.         {
  169.             // open session
  170.             session.open();
  171.             // Send Trap PDU
  172.              session.send(pdu);    
  173.         } 
  174.         catch (SnmpException e) 
  175.         {
  176.             System.err.println("Sending PDU : " + e.getMessage());
  177.             System.exit(1);
  178.         }
  179.         // close session    
  180.         session.close();
  181.         // stop api thread
  182.         api.close();
  183.     
  184.         System.exit(0);
  185.     }
  186.     /** adds the varbind  with specified oid and value */
  187.     static void addVarBind( MibOperations mibOps, SnmpPDU pdu, SnmpOID oid, String value)
  188.     {        
  189.         // Get the MibNode for this SnmpOID instance if found 
  190.         MibNode node = mibOps.getMibNode(oid);
  191.         if (node == null) 
  192.         {
  193.             System.err.println("Failed. MIB node unavailable for OID:"+oid);
  194.         }   
  195.         else
  196.         {
  197.             // Get the syntax associated with this node
  198.             if (node.getSyntax() == null) 
  199.             {
  200.                 System.err.println("Failed. OID not a leaf node.");
  201.             }       
  202.             else
  203.             {
  204.                 SnmpVarBind varbind = null;
  205.                 try
  206.                 {
  207.                     // Get the SnmpVar instance for the value
  208.                     SnmpVar var = node.getSyntax().createVariable(value);
  209.                     // Create SnmpVarBind instance 
  210.                     varbind = new SnmpVarBind(oid,var);
  211.                 }
  212.                 catch (SnmpException ex) 
  213.                 { 
  214.                     System.err.println("Error creating variable."); 
  215.                 }
  216.                 // Add the variable-bindings to the PDU
  217.                 pdu.addVariableBinding(varbind);      
  218.             }
  219.         }  
  220.     }
  221.   
  222. }