使用snmp4j实现Snmp功能(二)

相关链接:
Snmp学习笔记
使用snmp4j实现Snmp功能(一)
使用snmp4j实现Snmp功能(二)
使用snmp4j实现Snmp功能(三)

前一篇文章讲了如何用snmp4j实现set和get的功能,今天讲如何接收trap。

snmp4j提供了一个抽象类CommandResponder类用于接收trap,这个类里面有一个必须实现的方法processPdu(),当接收到trap,会自动进入这个方法,因此我们可以将对trap的处理写在这里。

下面修改上篇文章例子中的initComm()方法:

       private TransportMapping transport = null;

 

       public void initComm() throws IOException {

 

              // Agent方的IP和端口

              targetAddress = GenericAddress.parse("udp:192.168.1.1/161");

              // 置接收trapIP和端口

              transport = new DefaultUdpTransportMapping(new UdpAddress(

                            "192.168.1.2/162"));

              snmp = new Snmp(transport);

 

              CommandResponder trapRec = new CommandResponder() {

                     public synchronized void processPdu(CommandResponderEvent e) {

                            // 接收trap

                            PDU command = e.getPDU();

                            if (command != null) {

                                   System.out.println(command.toString());

                            }

                     }

              };

              snmp.addCommandResponder(trapRec);

 

              transport.listen();

       }

其中targetAddress指Agent端也就是trap发送,transport指trap接收方,这里就是本机,假设IP是192.168.1.2,但注意不能写成127.0.0.1。

因为我们无法得知trap什么时候会发送,所以需要有一个线程等待trap的到来,在这个例子中我们使用wait()来等待trap的到来,具体应用中就要根据实际情况来做了。

       public synchronized void listen() {

              System.out.println("Waiting for traps..");

              try {

                     this.wait();//Wait for traps to come in

              } catch (InterruptedException ex) {

                     System.out.println("Interrupted while waiting for traps: " + ex);

                     System.exit(-1);

              }

       }

      

       public static void main(String[] args) {

              try {

                     SnmpUtil util = new SnmpUtil();

                     util.initComm();

                     util.listen();

              } catch (IOException e) {

                     e.printStackTrace();

              }

       }

将上面的代码添加到原来的例子中,就可以接收trap了。

但是还有一个问题,如何让192.168.1.1发送trap呢?这个也可以使用snmp4j来做。其实发送trap和发送set、get PDU是类似的,同样是发送PDU,只不过类型不一样。我们把前面的例子复制到192.168.1.1,在里面添加一段代码:

    public void setTrap() throws IOException {

        // 构造Trap PDU

        PDU pdu = new PDU();

        pdu.add(new VariableBinding(new OID(".1.3.6.1.2.3377.10.1.1.1.1"),

                      new OctetString("SnmpTrap")));

        pdu.setType(PDU.TRAP);

        sendPDU(pdu);

        System.out.println("Trap sent successfully.");

    }

这里PDU的OID和Value可以自己构造,无需使用特定的值。

然后修改地址
targetAddress = GenericAddress.parse("udp:192.168.1.2/162");
transport = new DefaultUdpTransportMapping(new UdpAddress("192.168.1.1/161"));

 

另外需要修改target的version,即改为target.setVersion(SnmpConstants.version2c)为什么要这样改我也没搞清楚,总之verion1收不到。

接下来修改main()函数,调用setTrap()。

然后回到本机运行刚才的例子,当控制台显示“Waiting for traps..”时,运行Agent端的例子。此时如果192.168.1.2打出我们刚刚设置的PDU的信息,就说明Trap的收发成功了。

 

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: SNMP4J是一个基于Java的开源的SNMP协议库,用于支持SNMP协议的网络管理应用程序开发。SNMP4J库的下载应该包括以下文件: 1. snmp4j-x.x.x.jar:这是SNMP4J的主要jar文件,包含了实现SNMP协议的核心功能。 2. snmp4j-agent-x.x.x.jar:这是用于SNMP代理(agent)开发的扩展jar文件。其中包含了一些额外的类和方法,可以用于实现SNMP代理功能。 3. snmp4j-smi-x.x.x.jar:这是用于管理信息库(SMI)相关功能的扩展jar文件。SMI定义了管理和描述网络设备的标准集,该jar文件包含了解析和处理SMI文件的功能。 4. snmp4j-docs-x.x.x.zip:这是SNMP4J的文档压缩文件,其中包含了详细的API文档、示例代码和其他相关资料。这些文档对于开发人员来说是非常有用的参考资料。 5. snmp4j-examples-x.x.x.zip:这是SNMP4J的示例代码压缩文件,提供了一些使用SNMP4J库的典型示例。这些示例可以帮助开发人员更好地理解如何使用SNMP4J库进行网络管理应用程序开发。 总之,SNMP4J下载应该包括主要的jar文件、代理开发扩展jar文件、SMI相关功能扩展jar文件、API文档压缩文件和示例代码压缩文件。这些文件提供了SNMP协议相关的核心功能、扩展功能、开发文档和示例代码,方便开发人员进行SNMP网络管理应用程序的开发工作。 ### 回答2: SNMP4J(简单网络管理协议)是一个用于开发和管理网络设备的Java库。从官方网站上下载SNMP4J时,应该包括以下文件: 1. snmp4j-x.x.x.jar:SNMP4J的核心库文件,包含了所有的SNMP协议相关的类和方法。这个文件是必需的,用于编译和运行SNMP4J应用程序。 2. snmp4j-x.x.x-sources.jar:这个文件包含了SNMP4J的源代码,通常用于调试和学习。它可以供开发人员查看和理解SNMP4J的内部实现细节。 3. snmp4j-x.x.x-javadoc.jar:这个文件包含了SNMP4J的Javadoc文档,用于API参考。它包含了所有公共类、方法和字段的详细说明,开发人员可以使用该文档来了解SNMP4J使用方法和功能。 此外,根据具体的需求和应用场景,也可以下载以下文件: 4. snmp4j-agent-x.x.x.jar:这个文件是SNMP4J的代理库文件,用于构建SNMP代理应用程序。它提供了一些额外的类和方法,用于实现代理功能。 5. snmp4j-demo-x.x.x.jar:这个文件是一个SNMP4J的示例应用程序,包含了一些示例代码和演示程序,可以作为起始点来学习如何使用SNMP4J。 请注意,x.x.x指的是具体版本号,根据官方网站提供的最新版本进行下载。另外,对于开发人员而言,还可以参考官方网站上的文档和示例代码,以便更好地理解和使用SNMP4J库。 ### 回答3: SNMP4J是一个用于实现SNMP协议的Java库。要下载SNMP4J,你应该包括以下文件: 1. SNMPTutorialExamples.jar:这是一个包含示例代码的JAR文件。它提供了一些使用SNMP4J的基本示例,帮助你快速了解库的用法。 2. SNMP4J.jar:这是SNMP4J库的核心文件,包含了所有必需的类和方法。你需要将该文件包含在你的Java应用程序的类路径中,以便能够使用SNMP4J功能。 3. SNMP4J-Doc.zip:这是SNMP4J的文档文件。它包含了详细的API文档,帮助你了解库的各种类、方法和用法。你可以在需要时查阅这些文档,以便更好地使用SNMP4J。 4. SNMP4J-TestSuite.jar:这是一个包含了SNMP4J的测试用例的JAR文件。它用于验证库的功能是否正常,并提供了一些额外的示例以及使用SNMP4J开发的一些应用程序。这个文件对于进一步学习SNMP4J的高级用法和进行自己的实验非常有用。 除了以上文件,还可以下载SNMP4J的源代码(以.tar.gz或.zip的格式提供),以便你在有需要时可以进行修改或自定义。这些源代码文件通常包含SNMP4J的各个模块和类的Java源文件。 总之,为了下载SNMP4J,你应包括SNMPTutorialExamples.jar、SNMP4J.jar、SNMP4J-Doc.zip和SNMP4J-TestSuite.jar这些文件。这些文件将帮助你开始使用SNMP4J库,并为你提供相关的示例、文档和测试用例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值