Отправить ловушку v2 в Java

Как я могу отправить ловушки snmpv2 из приложения Java. Я пытался сделать пример на snmp4j, но это не сработало.

5 ответов

Решение

Я использую SNMP4J для этого.

Этот Javadoc может помочь вам написать свой код. Вы можете использовать метод Snmp.trap ()

Редактировать:

Ну, у меня нет собственного кода на данный момент, но вы можете сослаться на этот. Вы должны использовать Snmp.notify () для отправки ловушки V2 вместо Snmp.trap (), так как trap () поддерживает только отправку ловушек V1.

Это заняло у меня некоторое время, но я наконец понял, как использовать SNMP4J для отправки ловушки: надеюсь, это поможет..

  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);                      
}

Хороший пример, который отправляет ловушку V1 и уведомление V2. Мне просто нужно было изменить порт на 162 и установить sysUpTime для версии V1 и V2.

Протестировано с snmp4j-1.10.1 и 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());
        }
    }
}

Я бы пошел в библиотеку 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);

Очень хороший пример можно найти здесь:

http://shivasoft.in/blog/java/snmp/create-snmp-client-in-java-using-snmp4j/

Другие вопросы по тегам