|
SnmpTrapAgent |
|
1 package com.mccrory.scott.spumoni; 2 3 //////////////////////////////////////////////////////////////////////////////// 4 // SnmpTrapAgent is an adaptation of JoeSNMP's SnmpAgent test class, which 5 // is a part of the OpenNMS project (http://www.opennms.org). Thanks go out 6 // to Brian Weaver and the rest of the OpenNMS crew for their excellent work. 7 // 8 // This library is free software; you can redistribute it and/or 9 // modify it under the terms of the GNU Lesser General Public 10 // License as published by the Free Software Foundation; either 11 // version 2.1 of the License, or (at your option) any later version. 12 // 13 // (Also available online at http://www.fsf.org/copyleft/lesser.html) 14 // 15 // This library is distributed in the hope that it will be useful, 16 // but WITHOUT ANY WARRANTY; without even the implied warranty of 17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 // Lesser General Public License for more details. 19 // 20 // You should have received a copy of the GNU Lesser General Public 21 // License along with this library; if not, write to the Free Software 22 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23 //////////////////////////////////////////////////////////////////////////////// 24 25 // Imports from Java API 26 import java.io.IOException; 27 import java.io.ObjectInputStream; 28 import java.io.ObjectOutputStream; 29 import java.net.InetAddress; 30 31 import org.opennms.protocols.snmp.SnmpHandler; 32 import org.opennms.protocols.snmp.SnmpIPAddress; 33 import org.opennms.protocols.snmp.SnmpObjectId; 34 import org.opennms.protocols.snmp.SnmpOctetString; 35 import org.opennms.protocols.snmp.SnmpParameters; 36 import org.opennms.protocols.snmp.SnmpPduPacket; 37 import org.opennms.protocols.snmp.SnmpPduRequest; 38 import org.opennms.protocols.snmp.SnmpPduTrap; 39 import org.opennms.protocols.snmp.SnmpPeer; 40 import org.opennms.protocols.snmp.SnmpSMI; 41 import org.opennms.protocols.snmp.SnmpSession; 42 import org.opennms.protocols.snmp.SnmpSyntax; 43 import org.opennms.protocols.snmp.SnmpVarBind; 44 45 /** 46 * <P><code>SnmpTrapAgent</code> is a class that sends SNMP V1 or V2 traps to 47 * one (and only one) SNMP manager defined by its IP address and port number. 48 * SnmpTrapAgent is an adaptation of JoeSNMP's SnmpAgent test class, which 49 * is a part of the <A HREF="http://www.opennms.org">OpenNMS</a> project. 50 * Thanks go out to Brian Weaver and the rest of the OpenNMS crew for their 51 * excellent work.</P> 52 * 53 * @author <A HREF="mailto:weave@opennms.org">Brian Weaver</A> 54 * @author <A HREF="http://www.opennms.org/">OpenNMS</A> 55 * @author <a href="mailto:smccrory@users.sourceforge.net">Scott McCrory</a>. 56 * @version CVS $Id: SnmpTrapAgent.java,v 1.8 2002/08/04 22:04:53 smccrory Exp $ 57 */ 58 public class SnmpTrapAgent implements SnmpHandler { 59 60 /** The name of this class to log context without introspection **/ 61 private static final String CLASS_NAME = "SnmpTrapAgent"; 62 63 /** The version of this class (filled in by CVS) **/ 64 private static final String VERSION = "CVS $Revision: 1.8 $"; 65 66 /** SNMP parameter for community */ 67 private static final String PARAM_COMMUNITY = "public"; 68 69 /** SNMP parameter for number of retries */ 70 private static final int PARAM_RETRIES = 10; 71 72 /** SNMP parameter for timeout */ 73 private static final int PARAM_TIMEOUT = 5000; 74 75 /** SNMP parameter for generic type (V1 only) */ 76 private static final int PARAM_GENERIC_TYPE = 0; 77 78 /** SNMP parameter for specific type (V1 only) */ 79 private static final int PARAM_SPECIFIC_TYPE = 0; 80 81 /** SNMP OID of the sent trap */ 82 private String m_trapOid; 83 84 /** Holds the reference to the SNMP session */ 85 private SnmpSession m_session; 86 87 /** 88 * Builds an snmpagent object for sending SNMP V1 or V2 traps. <P> 89 * 90 * Remark : The SNMP trap type (V1 or V2) will be set every time a trap is 91 * sent in the respectie send method. 92 * 93 * @param managerAddress the IP address where the traps are sent 94 * @param managerPort the port number where the traps are sent (e.g. 162) 95 * @param trapOid the complete OID for the trap (e.g. "1.3.6.1.2.1.1232.1.1") 96 * @throws Exception if an error occurs during the initialization 97 * of the object 98 */ 99 public SnmpTrapAgent(String managerAddress, int managerPort, String trapOid) 100 throws Exception { 101 102 // Memorize attributes 103 m_trapOid = trapOid; 104 105 // Build the SNMP session 106 try { 107 // Create the peer object 108 SnmpPeer peer = new SnmpPeer(InetAddress.getByName(managerAddress)); 109 peer.setPort(managerPort); 110 peer.setRetries(PARAM_RETRIES); 111 peer.setTimeout(PARAM_TIMEOUT); 112 SnmpParameters parameters = peer.getParameters(); 113 parameters.setReadCommunity(PARAM_COMMUNITY); 114 115 // Create the session object 116 m_session = new SnmpSession(peer); 117 m_session.setDefaultHandler(this); 118 } 119 catch (Exception e) { 120 System.out.println("SNMP agent creation error"); 121 } 122 } 123 124 /** 125 * We override the <code>clone</code> method here to prevent cloning of our class. 126 * 127 * @return Nothing ever really returned since we throw a CloneNotSupportedException 128 * @throws CloneNotSupportedException To indicate cloning is not allowed 129 **/ 130 public final Object clone() throws CloneNotSupportedException { 131 132 throw new CloneNotSupportedException(); 133 134 } 135 136 /** 137 * Closes the SNMP session. 138 */ 139 public void close() { 140 m_session.close(); 141 } 142 143 /** 144 * For unit testing. 145 * 146 * @param args an array of command-line arguments 147 */ 148 public static void main(String[] args) { 149 150 try { 151 152 System.out.println("Starting..."); 153 SnmpTrapAgent sa = new SnmpTrapAgent("localhost", 161, "1.3.6.1.2.1.1232.1.1"); 154 155 sa.sendV1Trap("V1 Link Up"); 156 sa.sendV2Trap("V1 Link Down"); 157 158 sa.close(); 159 System.out.println("Done..."); 160 161 } 162 catch (Exception e) { 163 e.printStackTrace(); 164 System.exit(0); 165 } 166 167 } 168 169 /** 170 * We override the <code>readObject</code> method here to prevent 171 * deserialization of our class for security reasons. 172 * 173 * @param in java.io.ObjectInputStream 174 * @throws IOException thrown if a problem occurs 175 **/ 176 private final void readObject(ObjectInputStream in) throws IOException { 177 178 throw new IOException("Object cannot be deserialized"); 179 180 } 181 182 /** 183 * Sends a formatted message as SNMP V1 trap. 184 * 185 * @param message the formatted text to send 186 * @throws Exception if an error occurs during the sending of the trap 187 */ 188 public void sendV1Trap(String message) throws Exception { 189 190 try { 191 // Set SNMP version as V1 192 SnmpPeer peer = m_session.getPeer(); 193 SnmpParameters parameters = peer.getParameters(); 194 parameters.setVersion(SnmpSMI.SNMPV1); 195 196 // Create trap 197 SnmpPduTrap trapPdu = new SnmpPduTrap(); 198 trapPdu.setAgentAddress( 199 new SnmpIPAddress(InetAddress.getLocalHost().getAddress())); 200 trapPdu.setGeneric(PARAM_GENERIC_TYPE); 201 trapPdu.setSpecific(PARAM_SPECIFIC_TYPE); 202 trapPdu.addVarBind( 203 new SnmpVarBind( 204 new SnmpObjectId(m_trapOid), 205 new SnmpOctetString(message.getBytes()))); 206 207 // Send trap 208 m_session.send(trapPdu); 209 210 } 211 catch (Exception e) { 212 System.out.println("SNMP send error"); 213 } 214 215 } 216 217 /** 218 * Sends a formatted message as SNMP V2 trap. 219 * 220 * @param message the formatted text to send 221 * @throws Exception if an error occurs during the sending of the trap 222 */ 223 public void sendV2Trap(String message) throws Exception { 224 225 try { 226 // Set SNMP version as V2 227 SnmpPeer peer = m_session.getPeer(); 228 SnmpParameters parameters = peer.getParameters(); 229 parameters.setVersion(SnmpSMI.SNMPV2); 230 231 // Create trap 232 SnmpPduRequest trapPdu = new SnmpPduRequest(SnmpPduPacket.V2TRAP); 233 trapPdu.addVarBind( 234 new SnmpVarBind( 235 new SnmpObjectId(m_trapOid), 236 new SnmpOctetString(message.getBytes()))); 237 238 // Send trap 239 m_session.send(trapPdu); 240 241 } 242 catch (Exception e) { 243 System.out.println("SNMP send error"); 244 } 245 246 } 247 248 /** 249 * Stubbed out since we are only sending 250 * 251 * @param session The SnmpSession we're communicating with 252 * @param err The error number 253 * @param pdu The SNMP Packet Data Unit 254 */ 255 public void snmpInternalError(SnmpSession session, int err, SnmpSyntax pdu) { 256 System.out.println("SNMP internal error, code: " + err); 257 } 258 259 /** 260 * Stubbed out since we are only sending 261 * 262 * @param session The SnmpSession we're communicating with 263 * @param cmd The SNMP command 264 * @param pdu The SNMP Packet Data Unit 265 */ 266 public void snmpReceivedPdu(SnmpSession session, int cmd, SnmpPduPacket pdu) { 267 268 // Just print any incoming SNMP messages 269 System.out.println("SnmpSession=" + session); 270 System.out.println("cmd=" + cmd); 271 System.out.println("SnmpPduPacket=" + pdu); 272 273 } 274 275 /** 276 * Stubbed out since we are only sending 277 * 278 * @param session The SnmpSession we're communicating with 279 * @param pdu The SNMP Packet Data Unit 280 */ 281 public void snmpTimeoutError(SnmpSession session, SnmpSyntax pdu) { 282 System.out.println("SNMP timeout"); 283 } 284 285 /** 286 * We override the <code>writeObject</code> method here to prevent 287 * serialization of our class for security reasons. 288 * 289 * @param out java.io.ObjectOutputStream 290 * @throws IOException thrown if a problem occurs 291 **/ 292 private final void writeObject(ObjectOutputStream out) throws IOException { 293 294 throw new IOException("Object cannot be serialized"); 295 296 } 297 }
|
SnmpTrapAgent |
|