/* $Id: rmiwalk.src,v 1.3 2002/09/09 05:41:24 tonyjpaul Exp $ */
/*
* @(#)rmiwalk.java
* Copyright (c) 2012 ZOHO Corp. All Rights Reserved.
* Please read the COPYRIGHTS file for more details.
*/
/**
* Use RMI to do an SNMP walk based on command line arguments.
* The RMI server is specified with the -SnmpServer option
* and defaults to localhost if not specified.
*
* Loads MIBs as specified, and converts to/from names for loaded MIB data.
* Multiple OIDs are ok, but checking for when to stop
* is based on first OID.
*
* Once a MIB is loaded on the server, susequent uses of
* this program will have the MIB available for SNMP operations.
*
*
* java rmiwalk [options] host oid ...
*
*
v3 request:
* java rmiwalk [-SnmpServer hostName] [-v version(v1,v2,v3)] [-m MIB_files] [-c community] [-p port] [-t timeout] [-r retries] [-u user] [-a auth_protocol] [-w auth_password] [-s priv_password] [-i contextID] [-n contextName] host OID [OID] ...
* e.g.
* java rmiwalk -v v3 -m ..\..\mibs\rfc1213-MIB -u user -a MD5 -w passwd localhost 1.2
*
*
v2c request:
* java rmiwalk [-SnmpServer hostName] [-v version(v1,v2)] [-m MIB_files] [-c community] [-p port] [-t timeout] [-r retries] host OID [OID] ...
* e.g.
* java rmiwalk -v v2 -m ..\..\mibs\rfc1213-MIB localhost 1.2
*
* v1 request:
* java rmiwalk [-SnmpServer hostName] [-m MIB_files] [-c community] [-p port] [-t timeout] [-r retries] host OID [OID] ...
* e.g.
* java rmiwalk -m ..\..\mibs\rfc1213-MIB localhost 1.2
*
* Options:
* [-SnmpServer ] - SnmpServer SERVER option to specify the RMI server host.
* [-c] - community String. By default "public".
* [-p] - remote port no. By default 161.
* [-t] - Timeout. By default 5000ms.
* [-r] - Retries. By default 0.
* [-m] - MIB files.To load multiple mibs give within double quotes files seperated by a blank space.
*
[-v] - version(v1 / v2 / v3). By default v1.
* [-u] - The v3 principal/userName
* [-a] - The authProtocol(MD5/SHA). Mandatory if authPassword is specified
* [-w] - The authentication password.
* [-s] - The privacy protocol password. Must be accompanied with auth password and authProtocol fields.
* [-i] - The contextID to be used for the v3 pdu.
* [-n] - The context to be used for the v3 pdu.
* host Mandatory - The RemoteHost (agent).Format (string without double qoutes/IpAddress).
* OID Mandatory - Give multiple no. of Object Identifiers.
**/
import java.rmi.*;
import com.adventnet.snmp.snmp2.*;
public class rmiwalk {
static final int USM_SECURITY_MODEL = 3;
public static void main(String args[]) {
// Take care of getting options
String usage = "rmiwalk [-SnmpServer hostName] [-v version(v1,v2,v3)] [-m MIB_files] [-c community] [-p port] [-t timeout] [-r retries] [-u user] [-a auth_protocol] [-w auth_password] [-s priv_password] [-i contextID] [-n contextName] host OID [OID] ...";
String options[] = { "-SnmpServer", "-c", "-p", "-r", "-t", "-m", "-v", "-u", "-a", "-w", "-s" ,"-i","-n"};
String values[] = { null, null, null, null, null, null, null, null,null,null,null,null,null};
String userName = new String("");
String authProtocol = new String("NO_AUTH");
String authPassword = new String ("");
String privPassword = new String ("");
String contextName = new String ("");
String contextID = new String ("");
ParseOptions opt = new ParseOptions(args,options,values, usage);
// check for at least hostname and one OID in remaining arguments
if (opt.remArgs.length<2) opt.usage_error();
com.adventnet.snmp.rmi.SnmpFactory factory = null;
com.adventnet.snmp.rmi.SnmpTarget target = null;
try {
System.out.println( "Performing lookup with RMI Registry ... " );
if(values[0] != null)
factory = (com.adventnet.snmp.rmi.SnmpFactory)
Naming.lookup( "rmi://" + values[0] + "/AdventnetSnmpFactory" );
else
factory = (com.adventnet.snmp.rmi.SnmpFactory)
Naming.lookup( "rmi:///AdventnetSnmpFactory" );
System.out.println( "Lookup succeeded " );
// Get a Target object
target = factory.createTarget();
if(values[6] != null) { // if SNMP version is specified, set it
if(values[6].equals("v1"))
target.setSnmpVersion( com.adventnet.snmp.beans.SnmpTarget.VERSION1 ) ;
else if(values[6].equals("v2"))
target.setSnmpVersion( com.adventnet.snmp.beans.SnmpTarget.VERSION2C );
else if(values[6].equals("v3"))
target.setSnmpVersion( com.adventnet.snmp.beans.SnmpTarget.VERSION3 );
else {
System.out.println("Invalid Version Number");
System.exit(1);
}
}
target.setTargetHost( opt.remArgs[0] ); // set the agent hostname
if (values[1] != null) // set the community if specified
target.setCommunity( values[1] );
try { // set the timeout/retries/port parameters, if specified
if (values[2] != null)
target.setTargetPort( Integer.parseInt(values[2]) );
if (values[3] != null)
target.setRetries( Integer.parseInt(values[3]) );
if (values[4] != null)
target.setTimeout( Integer.parseInt(values[4]) );
if (values[7] != null)
userName = values[7];
if (values[8] != null) {
System.out.println("authProtocol = " + authProtocol);
authProtocol = values[8];
}
if (values[9] != null)
authPassword = values[9];
if (values[10] != null) {
privPassword = values[10];
}
if (values[11] != null)
contextID = values[11];
if (values[12] != null)
contextName = values[12];
} catch (NumberFormatException ex) {
System.err.println("Invalid Integer Argument "+ex);
}
if(target.getSnmpVersion() == target.VERSION3) {
target.setPrincipal(userName);
target.setAuthPassword(authPassword);
target.setPrivPassword(privPassword);
if(authProtocol.equals("SHA"))
target.setAuthProtocol(target.SHA_AUTH);
else
target.setAuthProtocol(target.MD5_AUTH);
target.setContextName(contextName);
target.setContextID(contextID);
// Create the SNMPv3 tables.
target.create_v3_tables();
}
if (values[5] != null) try { // Load the MIB files
System.err.println("Loading MIBs: "+values[5]);
target.loadMibs(values[5]);
} catch (Exception ex) {
System.err.println("Error loading MIBs: "+ex);
}
// create OID array from command line arguments
String oids[] = new String[opt.remArgs.length-1];
for (int i=1;i