#1  
Old 22nd December 2011, 08:04
rajshekar rajshekar is offline
Junior Member
 
Join Date: Dec 2011
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
 
Default snmpv3 traps

there is this trapreceiver program snmpv3trapd.java

this program will need arguments. the sender and receiving arguments should be same this is the problem because if there are 100 agents and each has different username and passwords. i need to receive traps from all *agents. so how can i modify this program to receive all the traps.

snmpv3trapd.java :

/* $Id: snmpv3trapd.src,v 1.4.2.9 2009/10/27 07:07:11 prathika Exp $ */
/*
* @(#)snmpv3trapd.java
* Copyright (c) 1996-2009 ZOHO Corp. All Rights Reserved.
* Please read the associated COPYRIGHTS file for more details.
*/

/**
* This is an example program for receiving traps using the
* com.adventnet.snmp.snmp2 package of WebNMS SNMP2 api.
* The user could run this application by giving any one of the following usage.
*
* java snmpv3trapd [options]
*
* java snmpv3trapd [-d] [-p port][-c community] [-u user] [-e engineID] [-a authProtocol] [-w auth_password] [-s priv_password] [-pp privProtocol(DES/AES-128/AES-192/AES-256/3DES)]
* e.g.
* java snmpv3trapd -p 162 -c public
*
* Options:
* [-d] - Debug output. By default off.
* [-p] <port> - remote port no. By default 162.
* [-c] <community> - community String. By default "public".
*/

import java.lang.*;
import java.util.*;
import java.net.*;
import com.adventnet.snmp.snmp2.*;
import com.adventnet.snmp.snmp2.usm.*;

public class snmpv3trapd implements SnmpClient {

private final static int PORT = 1;
private final static int COMMUNITY = 2;
private final static int USER_NAME = 3;
private final static int ENGID = 4;
private final static int AUTH_PROTOCOL = 5;
private final static int AUTH_PASSWORD = 6;
private final static int PRIV_PASSWORD = 7;
static final int USM_SECURITY_MODEL = 3;
private final static int PRIV_PROTOCOL=8;


static SnmpAPI api;
public static void main(String args[]) {

System.out.println("Please wait till the snmpv3trapd initializes ...");

// Take care of getting options
String usage = "snmpv3trapd [-d] [-p port] [-c community] [-u user] [-e engineID(0x...)] [-a authProtocol] [-w auth_password] [-s priv_password] [-pp privProtocol(DES/AES-128/AES-192/AES-256/3DES)]";
String options[] = { "-d", "-p", "-c", "-u", "-e", "-a", "-w", "-s", "-pp"};
String values[] = { "None", null, null, null, null, null, null, null,null};

ParseOptions opt = new ParseOptions(args,options,values, usage);
String userName = null;
int authProtocol = USMUserEntry.NO_AUTH;
int privProtocol = USMUserEntry.NO_PRIV;
String authPassword = new String ("");
String privPassword = new String ("");
String engineID = null;
byte secLevel = 0;
int portNo=170; // Default port number at which receiver listens.

// Start SNMP API
api = new SnmpAPI();
if (values[0].equals("Set")) api.setDebug( true );

if (opt.remArgs.length>0) opt.usage_error();

// Open session
SnmpSession session = new SnmpSession(api);
session.addSnmpClient(new snmpv3trapd());

// set local port
try {
if (values[PORT] != null)
{
portNo = Integer.parseInt(values[PORT]);
}

UDPProtocolOptions ses_opt = new UDPProtocolOptions();
ses_opt.setLocalPort(portNo);
session.setProtocolOptions(ses_opt);

if (values[USER_NAME] != null) {
userName = values[USER_NAME];
}

if (values[ENGID] != null) {
engineID = values[ENGID];
if(engineID.startsWith("0x") || engineID.startsWith("0X"))
engineID = new String(gethexValue(values[ENGID]));
}

if (values[AUTH_PROTOCOL] != null) {
if ( values[AUTH_PROTOCOL].equals("SHA")){
authProtocol = USMUserEntry.SHA_AUTH;
secLevel |= 0x01;
}
else if ( values[AUTH_PROTOCOL].equals("MD5")){
authProtocol = USMUserEntry.MD5_AUTH;
secLevel |= 0x01;
}
else
authProtocol = USMUserEntry.NO_AUTH;
}

if (values[AUTH_PASSWORD] != null) {
if (secLevel == 0x01)
authPassword = values[AUTH_PASSWORD];
else
opt.usage_error();
}

if(values[PRIV_PASSWORD] != null) {
if(values[PRIV_PROTOCOL] !=null)
{
if(values[PRIV_PROTOCOL].equals("DES"))
{
privPassword = values[PRIV_PASSWORD];
privProtocol=USMUserEntry.CBC_DES;
secLevel |= 0x02;
}
else if(values[PRIV_PROTOCOL].equals("AES-128"))
{
privPassword = values[PRIV_PASSWORD];
privProtocol=USMUserEntry.CFB_AES_128;
secLevel |= 0x02;
}
else if(values[PRIV_PROTOCOL].equals("AES-192"))
{
privPassword = values[PRIV_PASSWORD];
privProtocol=USMUserEntry.CFB_AES_192 ;
secLevel |= 0x02;
}
else if(values[PRIV_PROTOCOL].equals("AES-256"))
{
privPassword = values[PRIV_PASSWORD];
privProtocol=USMUserEntry.CFB_AES_256;
secLevel |= 0x02;
}
else if(values[PRIV_PROTOCOL].equals("3DES"))
{
privPassword = values[PRIV_PASSWORD];
privProtocol=USMUserEntry.CBC_3DES;
secLevel |= 0x02;
}
else
{
System.out.println(" Invalid privProtocol ");
opt.usage_error();
}

}
else
{
System.out.println(" Please specify the privProtocol value ");
opt.usage_error();

}

}
}
catch (NumberFormatException ex) {
System.err.println("Invalid Integer Arg: " + ex.getMessage());
System.exit(1);
}
catch (StringIndexOutOfBoundsException sie){
System.err.println("Invalid engineID. Please specify proper" +
" hex value. Exception = " + sie);
opt.usage_error();
}

if(userName != null) {
// Create a new USMUserEntry for the userName and engineID pair.
USMUserEntry user = new USMUserEntry(userName.getBytes(),
engineID.getBytes());
if ((secLevel & 0x01)== 0x01)
{
user.setAuthProtocol(authProtocol);
user.setAuthPassword(authPassword.getBytes());
// Convert the auth password to key.
byte[] authKey =
USMUtils.password_to_key(authProtocol,
authPassword.getBytes(),
authPassword.getBytes().length,
engineID.getBytes());
user.setAuthKey(authKey);
if (secLevel == 0x03)
{
user.setPrivProtocol(privProtocol);
user.setPrivPassword(privPassword.getBytes());
// Convert the priv password to key.
byte[] privKey = USMUtils.password_to_key(authProtocol,
privPassword.getBytes(),
privPassword.getBytes().length,
engineID.getBytes(),privProtocol);
user.setPrivKey(privKey);
}
}
user.setSecurityLevel(secLevel);
USMUserTable uut = (USMUserTable)api.getSecurityProvider().
getTable(USM_SECURITY_MODEL);
uut.addEntry(user);

// create a SnmpEngineEntry for the localhost,port pair
SnmpEngineEntry e = new SnmpEngineEntry("localhost", portNo);
e.setEngineID(engineID.getBytes());

// Add the SnmpEngineEntry reference to USMUserEntry.
user.setEngineEntry(e);
}

// set community in case of v1/v2c
if(values[COMMUNITY] != null)
session.setCommunity(values[COMMUNITY]);

// Open the session
try {
session.open();
}
catch (SnmpException e) {
System.err.println(e);
System.exit(1);
}
System.out.println("snmpv3trapd ready to receive v1/v2c/v3 traps");
}

public boolean authenticate(SnmpPDU pdu, String community){
if(pdu.getVersion() == SnmpAPI.SNMP_VERSION_3)
return true;
else
return (pdu.getCommunity().equals(community));
}

public boolean callback(SnmpSession session,SnmpPDU pdu, int requestID){
// check trap version
if (pdu.getCommand() == api.TRP_REQ_MSG) {
System.out.println("Trap received from: "
+pdu.getProtocolOptions().getSessionId()
+", community: " + pdu.getCommunity());
System.out.println("Enterprise: " + pdu.getEnterprise());
System.out.println("Agent: "
+ (pdu.getAgentAddress()).getHostAddress());
System.out.println("TRAP_TYPE: " + pdu.getTrapType());
System.out.println("SPECIFIC NUMBER: " + pdu.getSpecificType());
System.out.println("Time: " + pdu.getUpTime()+"\nVARBINDS:");
// print varbinds
for (Enumeration e = pdu.getVariableBindings().elements();
e.hasMoreElements()
System.out.println(((SnmpVarBind) e.nextElement()).
toTagString());
}
else if(pdu.getCommand() == api.TRP2_REQ_MSG)
{
System.out.println("Trap received from: "
+ pdu.getProtocolOptions().getSessionId()
+ ", community: " + pdu.getCommunity());
for (Enumeration e = pdu.getVariableBindings().elements();
e.hasMoreElements()
System.out.println(((SnmpVarBind) e.nextElement()).
toTagString());
}
else
System.err.println("Non trap PDU received.");

System.out.println(""); // a blank line between traps

return true;

}

public void debugPrint(String debugOutput){
System.out.println(debugOutput);
return;
}

private static byte[] gethexValue(String value)
{
byte temp;
byte[] Key=new byte[value.length()/2 - 1];
String ss,str;
ss = value.substring(2);

for(int i = 0; i < ss.length(); i+=2)
{
str = ss.substring(i,i+2);
temp = (byte)Integer.parseInt(str,16);
Key[i/2] = temp;
}
return Key;
}

}
Reply With Quote
Sponsored Links
Reply

Bookmarks

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
How to configure linux to receive snmp traps from a window iamtulipin Technical 2 21st February 2008 05:20


All times are GMT +2. The time now is 04:04.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2014, vBulletin Solutions, Inc.