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

SNMP编程

开发平台:

C/C++

  1. /* $Id: rmitrapreceiver.src,v 1.3 2002/09/09 05:41:24 tonyjpaul Exp $ */
  2. /*
  3.  * @(#)rmitrapreceiver.java
  4.  * Copyright (c) 1996-2002 AdventNet, Inc. All Rights Reserved.
  5.  * Please read the COPYRIGHTS file for more details.
  6.  *
  7.  */
  8. /** 
  9.  *  Use RMI to receive traps from a remote server that forwards traps
  10.  *  in RMI calls.  The server can be serving multiple clients with
  11.  *  traps as they come in.
  12.  *
  13.  *  The RMI server is specified with the -SnmpServer option
  14.  *  and defaults to localhost if not specified.
  15.  *
  16.  *  Receive traps and print incoming traps.  Loads MIBs 
  17.  *  as specified, and converts to/from names for loaded MIB data. 
  18.  *  It also prints loaded trap names and descriptions when the
  19.  *  corresponding traps are received.
  20.  *  Once a MIB is loaded on the server, susequent uses of
  21.  *  This program will have the MIB available for SNMP operations.
  22.  *
  23.  *
  24.  * java rmitrapreceiver [options] 
  25.  *
  26.  *<img SRC="images/v2candv3only.jpg" ALT="v2c and v3 only"> v1/v2c request:
  27.  * java rmitrapreceiver [-SnmpServer hostname]  [-m MIB_files] [-c community] [-p port] 
  28.  * e.g. 
  29.  * java rmitrapreceiver  -p 2000 
  30.  *
  31.  *<img SRC="images/v3only.jpg" ALT="v3 only"> v3 request:
  32.  * java rmitrapreceiver [-SnmpServer hostname]  [-m MIB_files] [-c community] [-p port] [-u user] [-e engineID] [-a authProtocol] [-w auth_password] [-s priv_password]
  33.  * e.g. 
  34.  * java rmitrapreceiver -v v3  -a MD5 -w passwd -u username -p 2000 -c public -m ....mibsrfc1213-mib -e engineid 
  35.  *
  36.  * Options:
  37.  * [-SnmpServer ] <hostName>      - SnmpServer SERVER option to specify the RMI server host.
  38.  * [-c] <community>    - community String. By default "public".
  39.  * [-p] <port>         - remote port no. By default 161.
  40.  * [-m] <MIBfile>      - MIB files.To load multiple mibs give within double quotes files seperated by a blank space.       
  41.  *<img SRC="images/v3only.jpg" ALT="v3 only"> [-u] <username>     - The v3 principal/userName
  42.  * [-a] <autProtocol>  - The authProtocol(MD5/SHA). Mandatory if authPassword is specified
  43.  * [-w] <authPassword> - The authentication password.
  44.  * [-s] <privPassword> - The privacy protocol password. Must be accompanied with auth password and authProtocol fields.
  45.  * [-e] <engineid>  - The engineid to be used for the v3 pdu.
  46.  **/
  47. import com.adventnet.snmp.rmi.*;
  48. import java.rmi.*;
  49. public class rmitrapreceiver implements TrapListener {
  50.     static com.adventnet.snmp.rmi.SnmpTrapReceiver receiver = null;
  51. static final int USM_SECURITY_MODEL = 3;
  52.     public static void main(String args[]) {
  53.     // Take care of getting options
  54.     String usage = " rmitrapreceiver [-SnmpServer hostname]  [-m MIB_files] [-c community] [-p port]  [-u user] [-e engineID] [-a authProtocol] [-w auth_password] [-s priv_password]";
  55.     String options[] = { "-SnmpServer", "-m", "-c", "-p", "-u", "-e", "-a", "-w", "-s" };
  56.     String values[] = { null, null, null, null, null, null, null, null, null };
  57.     
  58.     ParseOptions opt = new ParseOptions(args,options,values, usage);
  59.     if (opt.remArgs.length!=0) opt.usage_error();
  60.     com.adventnet.snmp.rmi.SnmpFactory factory = null;
  61.     try {
  62.         System.out.println( "Performing lookup with RMI Registry ... " );
  63.         if(values[0] != null)   
  64.         factory = (com.adventnet.snmp.rmi.SnmpFactory) 
  65.             Naming.lookup( "rmi://" + values[0] + "/AdventnetSnmpFactory" );
  66.         else 
  67.         factory = (com.adventnet.snmp.rmi.SnmpFactory) 
  68.             Naming.lookup( "///AdventnetSnmpFactory" );
  69.         System.out.println( "Lookup succeeded " );
  70.         // Get a Target object
  71.         receiver = factory.createTrapReceiver();
  72.         String userName = null;
  73.         int authProtocol = com.adventnet.snmp.snmp2.usm.USMUserEntry.NO_AUTH;
  74.         String authPassword = new String ("");
  75.         String privPassword = new String ("");
  76.         String engineID = null;
  77.         int privProtocol = 0;
  78.         byte secLevel = 0;
  79.         if (values[2] != null) receiver.setCommunity( values[2] );
  80.         try {  // set trap port to listen on if specified - else port 162
  81.         if (values[3] != null) 
  82.             receiver.setPort( Integer.parseInt(values[3]) );
  83.         else
  84.             receiver.setPort( 162);
  85.         if (values[4] != null) {
  86.             userName = values[4];
  87.             receiver.setPrincipal(userName);
  88.         }
  89.             
  90.         if (values[5] != null) {
  91.             engineID = values[5];
  92.             //receiver.setEngineID(engineID);
  93.         }
  94.                 
  95.         if (values[6] != null) {
  96.             if ( values[6].equals("SHA"))
  97.                 authProtocol = com.adventnet.snmp.snmp2.usm.USMUserEntry.SHA_AUTH;
  98.             else if ( values[6].equals("MD5"))
  99.                 authProtocol = com.adventnet.snmp.snmp2.usm.USMUserEntry.MD5_AUTH;
  100.             else
  101.                 authProtocol = com.adventnet.snmp.snmp2.usm.USMUserEntry.NO_AUTH;
  102.             receiver.setAuthProtocol(authProtocol);
  103.             secLevel |= 0x01;
  104.         }
  105.         if (values[7] != null) {
  106.             if (secLevel == 0x01){
  107.                 authPassword = values[7];
  108.                 receiver.setAuthPassword(authPassword);
  109.             }
  110.             else
  111.                 opt.usage_error();
  112.         }
  113.         if(values[8] != null) {
  114.             if (secLevel == 0x01)
  115.             {
  116.                 privPassword = values[8];
  117.                 privProtocol = com.adventnet.snmp.snmp2.usm.USMUserEntry.CBC_DES;
  118.                 //receiver.setPrivProtocol(privProtocol);
  119.                 receiver.setPrivPassword(privPassword);
  120.                 secLevel |= 0x02;
  121.             }
  122.             else
  123.                 opt.usage_error();                           
  124.         }
  125.         //receiver.setSecurityLevel(secLevel);
  126.     } catch (NumberFormatException ex) {
  127.         System.err.println("Invalid Integer Arg");
  128.         }
  129.     if(userName != null) {
  130.         receiver.createUserEntry(engineID.getBytes(),secLevel);
  131.     }
  132.         if (values[1] != null) try { // load MIB files
  133.         System.err.println("Loading MIBs: "+values[1]);
  134.         receiver.loadMibs(values[1]);
  135.         } catch (Exception ex) {
  136.         System.err.println("Error loading MIBs: "+ex);
  137.         }
  138.         // we need to instantiate a trap listener to listen for trap events
  139.         TrapListener listener = new rmitrapreceiver();
  140.         java.rmi.server.UnicastRemoteObject.exportObject(listener);
  141.         receiver.addTrapListener(listener);    
  142.     }  catch (Exception e) {
  143.         System.err.println("Error Receiving Trap: "+e.getMessage());
  144.     }
  145.     }
  146.     // This method is called when trap is received by SnmpTrapReceiver
  147.     public void receivedTrap(com.adventnet.snmp.beans.TrapEvent trap) throws java.rmi.RemoteException {
  148.     System.out.println("Got a trap from: "+trap.getRemoteHost());
  149.     // print PDU details
  150.     try {
  151.         System.out.println( receiver.getMibOperations()
  152.                 .toString(trap.getTrapPDU()) );
  153.         System.out.println( " Opts: "+trap.getTrapPDU().getEnterprise()
  154.           +" - " + trap.getTrapPDU().getTrapType()
  155.           +" - " + trap.getTrapPDU().getSpecificType() );
  156.         // get trap defn
  157.         com.adventnet.snmp.mibs.MibTrap trapDefn = receiver
  158.         .getMibOperations().getMibTrap
  159.         ( trap.getTrapPDU().getEnterprise(), 
  160.           trap.getTrapPDU().getTrapType(), 
  161.           trap.getTrapPDU().getSpecificType() );
  162.         
  163.         if (trapDefn != null)  // print name and description
  164.         System.out.println("Trap Name: "+trapDefn.getName()
  165.                    +"nDescr: "+trapDefn.getDescription());
  166.     }  catch (Exception ex) { 
  167.         System.err.println( "Error: "+ex);
  168.     }
  169.     }
  170. }