前一篇文章讲了如何用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");// 设置接收trap的IP和端口transport = new DefaultUdpTransportMapping(new UdpAddress("192.168.1.2/162"));snmp = new Snmp(transport);CommandResponder trapRec = new CommandResponder() {public synchronized void processPdu(CommandResponderEvent e) {// 接收trapPDU 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 PDUPDU 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的收发成功了。

使用snmp4j实现Snmp功能(二)相关推荐

  1. 使用snmp4j实现Snmp功能(三)

    前两篇文章讲了如何使用Snmp4j实现Set.Get(使用snmp4j实现Snmp功能(一))以及发送.接收Trap(使用snmp4j实现Snmp功能(二)) 功能. 在我们前面的实现中,如果访问MI ...

  2. 使用snmp4j实现Snmp功能(一)

    上一篇有关Snmp的文章已经是一年前写的了,因为工作等各种原因,一直没有继续下去.但是不管怎么样,包括AppFuse,虽然速度有点慢,我还是会坚持学习并将心得写下去. 上一篇文章讲了Snmp的一些基本 ...

  3. SNMP功能开发简介 二 net-snmp源码分析报文处理流程图

    最近在开发snmp功能,核心实现是基于net-snmp,将net-snmp的代理基本功能移植到自己的程序中去,因为需要修改一些定制化的内容,所以需要对net-snmp的流程有所了解,网上这方面的资料比 ...

  4. SNMP功能开发简介 六 snmp功能开发阶段性总结

    先说客户需求:能够通过SNMP协议获取设备信息便于管理.客户提出的需求信息转化成MIB结点都是Get类请求. 背景&方案:我们的产品业务层是使用Go语言开发的,系统层基于OpenWrt(一个嵌 ...

  5. SNMP功能开发简介 一 net-snmp编译与安装

    部门产品还没有snmp功能,应客户需求,最近开始开发snmp功能.snmp即简单网络管理协议,管理很简单,但实际开发还是有点工作量,协议有三个版本,分为1,2c,3.相关的RFC文档也比较多,从零开始 ...

  6. SNMP功能开发简介 五 使用MIB Builder创建MIB文件图文介绍

    开发snmp功能一般都会涉及到添加私有节点,此外还要提供给其他人私有节点的MIB文件以方便查看.这里使用MG SOFT提供的MIB Builder工具创建MIB文件,工具下载链接:https://pa ...

  7. 全面剖析支付宝服务窗功能二次开发

    支付宝服务窗功能二次开发是类似于微信公众号功能二次开发一样的平台,但是支付宝跟微信之间只有区别的,微信可提供给客户发布些个人相关的信息.言论.文章等,也可以提供给单位使用:而且都支持二次开发的.而支付 ...

  8. LWIP-工业以太网交换机 SNMP功能与SStool功能完成笔记

    8月份任务安排: 1.熟悉带串口工业以太网交换机lwiP协议栈及SNMP部分源码,为带串口工业以太网交换机增加SNMP功能.SStool搜索设备IP功能及组播侦听协议移植 2.熟悉98dx3135 s ...

  9. 云海多功能二开解析接口计费系统全开源免授权v4.5

    前言: 这个版本的云海计费系统是之前二开版本,相对比与之前的4.2和4.3增加很多实用的功能,对比与扶风的系统其实都是不相上下,且之前的作者已经不再更新了,因为将此本部源码所有的代码优化修复了一下,增 ...

最新文章

  1. SQL操作的组成部分-数据查询
  2. 综述 | 森林微生物组:多样性,复杂性和动态变化(IF:11.3)
  3. MySQL:Can't connect to mysql server 10038
  4. Ubuntu 13.04 安装 SSH SERVER记
  5. fiddler实现模拟器抓吧_使用Fiddler对手机抓包
  6. Codechef TRIPS Children Trips (分块、倍增)
  7. Mysql 添加字段 修改字段 删除字段
  8. java是怎么实现文件上传的_java怎么实现大文件上传
  9. HDOJ 1007(T_T)
  10. Ardusub源码解析学习(二)——电机库
  11. 错误提示 - WPS Office 文字 正在运行
  12. python绘制emoji_在Python中将emoji转换为文本
  13. 雷电html查看程序编辑程序,NC程序编辑器(nEditor)
  14. A Re-evaluation of Temporal Knowledge Graph Completion Models under a Unified Framework
  15. ios申请企业开发者账号的代理_苹果企业开发者账号的申请详解
  16. 用python画年度和月度的日历图
  17. 如何把一篇Word文档里的所有换行符去掉?
  18. 单体测试使用Assert.assertThat(expected,Matcher matcher)来对比结果和预期
  19. 电脑计算机工具计算,计算机的计算器在哪 自己的电脑上的计算器在哪里找
  20. 关于人发声的原理及模型

热门文章

  1. linux 自学系列:用户管理
  2. [EF4] CompiledQuery预编译性能提升 + 数据载入之大彻大悟
  3. 向Window窗体发送消息,控制程序的运行.
  4. Tensorflow:interactivesession和session的区别。
  5. Python学习笔记:面向对象高级编程(中上)
  6. CentOS6 启动流程图文解剖 + 引导文件损坏处理方法
  7. 【转】用matlab画极坐标图,希望不同的半径点对应不同颜色,应该怎么做?有什么函数
  8. 大数问题(一个特别大的数需要用数组或字符串来表示)
  9. USTC English Club Note20171011
  10. Windows下更改pip镜像源