当前位置: 首页 > 知识库问答 >
问题:

使用westhawk snmp堆栈接收陷阱

齐琦
2023-03-14

我想接收snmp陷阱,我在snmp4j上获得了它,但现在我正在使用westhawk snmp堆栈库来实现陷阱接收器模块。我使用这个库示例来接收陷阱,但这段代码以rawPdu的形式接收陷阱,当我编辑代码时,我应该怎么做?这是我的代码:

package snmp4j;

import java.util.*;
import uk.co.westhawk.snmp.stack.*;    
import uk.co.westhawk.snmp.event.*;    
import uk.co.westhawk.snmp.util.*;    

public class SnmpTrackTrapReceiver implements TrapListener, Observer
{
    private SnmpContext context;

public void init () 
{

    String host = "localhost";
    int port = 162 ;
    String community = "public" ;
    try 
    {
        context = new SnmpContextv2c(host, port);
        context.setCommunity(community);
        context.addTrapListener(this);
    }
    catch (java.io.IOException exc)
    {
        System.out.println("ReceiveTrap.init(): IOException " 
            + exc.getMessage() + "\n" + exc);
        exc.printStackTrace() ;
        System.exit(0);
    }
}

public void trapReceived(TrapEvent evt)
{
    int port = evt.getHostPort();
    Pdu trapPdu = evt.getPdu();
    int reqId = trapPdu.getReqId();
    SnmpContextBasisFace rcontext = trapPdu.getContext();
    int version = rcontext.getVersion();
    String host = rcontext.getHost();

    System.out.println("\ttrap id " + reqId 
        + ", v " + SnmpUtilities.getSnmpVersionString(version)
        + " from host " + host
        + ", sent from port " + port);
    System.out.println("\ttrap " + trapPdu.toString());
}
}

共有1个答案

越学博
2023-03-14

基本上,您可以使用以下代码迭代trap PDU varbinds:

varbind[] varbinds = trapPdu.getResponseVarbinds();

for (varbind var: varbinds) {
    System.out.println("OID: ", var.getOid().toString());
    System.out.println("Value: ", var.getValue().toString());
}
 类似资料:
  • 如何使用C或C和net snmp模块接收陷阱。我需要示例代码,但示例位于http://www.net-snmp.org/使用系统调用,但不要使用API方法。

  • 我在Python3中收到了一条SNMP陷阱消息,得到了一个十六进制数。 如何将其转换为字符串以便查看? 接收数据(十六进制) B'0E\x02\x01\x01\x04\x06404040\xa78\x02\x04\x00\xf6\x17~\x02\x01\x00\x02\x01\x000*0\x0f\x06\x08\x06\x01\x02\x01\x01\x03\x00C\x03\x01k0\x1

  • 我一直在使用java(jdk 6 hot spot JVM)进行垃圾收集。我希望社区能帮助我解决一些问题。 我的理解是: 1) 堆被分为 a)年轻一代-Eden和幸存者:新的对象和阵列被创建到年轻一代。次要的垃圾回收机制将在年轻一代中运行。对象,仍然活着,将从伊甸园空间移动到幸存者空间。 b)老一代/终身一代:主要收集将仍然活着的对象从年轻一代转移到老一代。 2)非堆分为 我想知道的是:

  • 我刚刚开始学习C编程,为了锻炼我找到了这个任务。我必须使用动态、基于数组的整数堆栈编写PriorityQueue。这就是我到目前为止得到的。 提前感谢您的帮助。

  • 输入=堆栈数 但是你只能弹出输入,你不能推到它。输出也是另一个堆栈,你可以返回并推到它,但不能弹出 所以如果 由于您无法在中返回到

  • 问题内容: 内核堆栈和用户堆栈有什么区别?为什么要使用内核堆栈?如果在ISR中声明了局部变量,它将存储在哪里?每个进程都有自己的内核堆栈吗?那么,进程如何在这两个堆栈之间进行协调? 问题答案: 内核堆栈和用户堆栈有什么区别? 简而言之,除了在内存中使用不同的位置(并因此为堆栈指针寄存器使用不同的值)之外,什么也没有,而且通常使用不同的内存访问保护。也就是说,在用户模式下执行时,即使映射了内核内存(