2010-07-28 9 views
5

Cómo puedo enviar capturas snmpv2 desde la aplicación Java. Intenté hacer un ejemplo en snmp4j, pero no funcionó.Enviar trap v2 en Java

+0

duplicados http://stackoverflow.com/questions/3329378/sending-traps-from-a- aplicación java –

Respuesta

5

Uso SNMP4J para esto.

This javadoc podría ayudarlo a escribir su código. Usted puede utilizar el método Snmp.trap()

Editar:

Bueno, no tengo código de mi propia en este momento, pero puede referirse this uno. Debe utilizar Snmp.notify() para enviar trampa V2 en lugar de Snmp.trap() ya que trap() solo admite el envío de trampas V1.

+0

¿tiene un ejemplo simple, cómo hacerlo bien? gracias! –

+0

editó mi respuesta para proporcionar un enlace al código – Gopi

1

Me gustaría ir a la biblioteca snmp4j http://www.snmp4j.org/.

import org.snmp4j.*; 
import org.snmp4j.event.*; 

... 
CommunityTarget target = new CommunityTarget(); 
target.setCommunity(new OctetString("public")); 
target.setAddress(targetAddress); 
target.setVersion(SnmpConstants.version2c); 

PDU request = new PDU(); 
request.setType(PDU.V2TRAP); 
request.setGenericTrap(PDUv2.COLDSTART); 

Snmp snmp = new Snmp(new DefaultUdpTransportMapping()); 
snmp.listen(); 
snmp.sendPDU(request, target, null, listener); 
+0

¿tiene un ejemplo simple, cómo hacerlo bien? gracias! –

15

Me tomó algún tiempo, pero finalmente me di cuenta de cómo utilizar SNMP4J para enviar una trampa: Espero que ayude ..

public static void main(String[] args) throws Exception { 
     // Create PDU   
     PDU trap = new PDU(); 
     trap.setType(PDU.TRAP); 

     OID oid = new OID("1.2.3.4.5"); 
     trap.add(new VariableBinding(SnmpConstants.snmpTrapOID, oid)); 
     trap.add(new VariableBinding(SnmpConstants.sysUpTime, new TimeTicks(5000))); // put your uptime here 
     trap.add(new VariableBinding(SnmpConstants.sysDescr, new OctetString("System Description"))); 

     //Add Payload 
     Variable var = new OctetString("some string");   
     trap.add(new VariableBinding(oid, var));   

     // Specify receiver 
     Address targetaddress = new UdpAddress("10.101.21.32/162"); 
     CommunityTarget target = new CommunityTarget(); 
     target.setCommunity(new OctetString("public")); 
     target.setVersion(SnmpConstants.version2c); 
     target.setAddress(targetaddress); 

     // Send 
     Snmp snmp = new Snmp(new DefaultUdpTransportMapping()); 
     snmp.send(trap, target, null, null);      
} 
+0

¡Gracias! ¿Son obligatorios los 'sysUpTime' y' sysDescr'? – Matthieu

3

Un buen ejemplo que envía trampa V1 y V2 notificación. Solo necesitaba modificar el puerto a 162 y la forma de configurar el sysUpTime para ambas versiones, V1 y V2.

Probado con snmp4j-1.10.1 y snmp4j-2.1.0.

http://www.techdive.in/snmp/snmp4j-trap-sender

package snippet; 

/** 
* Copyright 2010 TechDive.in 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
* <a href="http://www.apache.org/licenses/LICENSE-2.0" title="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a> 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
* 
*/ 

/** 
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' 
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS 
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
* POSSIBILITY OF SUCH DAMAGE. 
*/ 

import java.util.Date; 

import org.snmp4j.CommunityTarget; 
import org.snmp4j.PDU; 
import org.snmp4j.PDUv1; 
import org.snmp4j.Snmp; 
import org.snmp4j.TransportMapping; 
import org.snmp4j.mp.SnmpConstants; 
import org.snmp4j.smi.IpAddress; 
import org.snmp4j.smi.OID; 
import org.snmp4j.smi.OctetString; 
import org.snmp4j.smi.UdpAddress; 
import org.snmp4j.smi.TimeTicks; 
import org.snmp4j.smi.VariableBinding; 
import org.snmp4j.transport.DefaultUdpTransportMapping; 

public class TrapSender { 
    public static final String community = "public"; 

    // Sending Trap for sysLocation of RFC1213 
    public static final String trapOid = ".1.3.6.1.2.1.1.6"; 

    public static final String ipAddress = "192.168.1.52"; 

    public static final int port = 162; 

    public TrapSender() { 
    } 

    public static void main(String[] args) { 
     TrapSender snmp4JTrap = new TrapSender(); 

     /* Sending V1 Trap */ 
     snmp4JTrap.sendSnmpV1Trap(); 

     /* Sending V2 Trap */ 
     snmp4JTrap.sendSnmpV2Trap(); 
    } 

    /** 
    * This methods sends the V1 trap to the Localhost in port 163 
    */ 
    public void sendSnmpV1Trap() { 
     try { 
      // Create Transport Mapping 
      TransportMapping transport = new DefaultUdpTransportMapping(); 
      transport.listen(); 

      // Create Target 
      CommunityTarget comtarget = new CommunityTarget(); 
      comtarget.setCommunity(new OctetString(community)); 
      comtarget.setVersion(SnmpConstants.version1); 
      comtarget.setAddress(new UdpAddress(ipAddress + "/" + port)); 
      comtarget.setRetries(2); 
      comtarget.setTimeout(5000); 

      // Create PDU for V1 
      PDUv1 pdu = new PDUv1(); 
      pdu.setType(PDU.V1TRAP); 
      pdu.setEnterprise(new OID(trapOid)); 
      pdu.setGenericTrap(PDUv1.ENTERPRISE_SPECIFIC); 
      pdu.setSpecificTrap(1); 
      pdu.setAgentAddress(new IpAddress(ipAddress)); 
        long sysUpTime = 111111; 
     pdu.setTimestamp(sysUpTime); 

      // Send the PDU 
      Snmp snmp = new Snmp(transport); 
      System.out.println("Sending V1 Trap to " + ipAddress + " on Port " + port); 
      snmp.send(pdu, comtarget); 
      snmp.close(); 
     } catch (Exception e) { 
      System.err.println("Error in Sending V1 Trap to " + ipAddress + " on Port " + port); 
      System.err.println("Exception Message = " + e.getMessage()); 
     } 
    } 

    /** 
    * This methods sends the V2 trap to the Localhost in port 163 
    */ 
    public void sendSnmpV2Trap() { 
     try { 
      // Create Transport Mapping 
      TransportMapping transport = new DefaultUdpTransportMapping(); 
      transport.listen(); 

      // Create Target 
      CommunityTarget comtarget = new CommunityTarget(); 
      comtarget.setCommunity(new OctetString(community)); 
      comtarget.setVersion(SnmpConstants.version2c); 
      comtarget.setAddress(new UdpAddress(ipAddress + "/" + port)); 
      comtarget.setRetries(2); 
      comtarget.setTimeout(5000); 

      // Create PDU for V2 
      PDU pdu = new PDU(); 

      // need to specify the system up time 
        long sysUpTime = 111111; 
      pdu.add(new VariableBinding(SnmpConstants.sysUpTime, new TimeTicks(sysUpTime))); 
      pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID, new OID(trapOid))); 
      pdu.add(new VariableBinding(SnmpConstants.snmpTrapAddress, new IpAddress(ipAddress))); 

      // variable binding for Enterprise Specific objects, Severity (should be defined in MIB file) 
      pdu.add(new VariableBinding(new OID(trapOid), new OctetString("Major"))); 
      pdu.setType(PDU.NOTIFICATION); 

      // Send the PDU 
      Snmp snmp = new Snmp(transport); 
      System.out.println("Sending V2 Trap to " + ipAddress + " on Port " + port); 
      snmp.send(pdu, comtarget); 
      snmp.close(); 
     } catch (Exception e) { 
      System.err.println("Error in Sending V2 Trap to " + ipAddress + " on Port " + port); 
      System.err.println("Exception Message = " + e.getMessage()); 
     } 
    } 
} 
+1

@ durron597 Entonces, ¿qué pasa si el enlace muere? Pegar el código es una buena idea. –

Cuestiones relacionadas