snmp4j摘抄笔记

snmp4j摘抄笔记
2007年08月23日 星期四 17:03

Snmp4j的几个主要类:
TransportMapping.java //传输层的封装,对UDP封装为DefaultUdpTransportMapping,TCP封装为DefaultTcpTransportMapping. SNMP4J的最底层劳动人民。
   .sendMessage(Address address, byte[] message); //发送数据报文,byte[]
   .addTransportListener(TransportListener); //监听数据报文
   .listen();

MessageDispatcher extends TransportListener//Snmp4j的中间层,对上负责编码PDU为二进制报文发送。对下实现了报文监听接口,编码收到的二进制报文为PDU。主要实现:MessageDispatcherImpl/MultiThreadedMessageDispatcher(多线程的消息处理)。SNMP的不同版本区分主要体现在这个翻译层。
   .addMessageProcessingModel(MessageProcessingModel model) //加入不同版本的消息处理器。主要实现就是MPv1,MPv2c,MPv3
   .addCommandResponder(CommandResponder listener) //上层同过这里监听底层消息,注意CommandResponder处理的是PDU
   .getNextRequestID():int; //负责给报文编流水号
   .processMessage(TransportMapping,Address incomingAddress,ByteBuffer);//TransportListener的实现,处理底层二进制数据。
   .sendPdu(...,PDU,...); //编码并发送报文。

Snmp.java //SNMP主要的对外操作类,类似一个session,完成常用任务。
   .get(PDU,Target); //同步发送, SNMP4j封装了同步调用,比JoeSNMP省事不少。
   .get(PDU,Target,Object,ResponseListener); //异步发送
   .getBulk(...),getNext(...),set(...);//同上,对SNMP操作的直接封装
   .inform(...),trap(...);//同上,用于agent时,对外订阅者发送trap
   .send(PDU,Target); //底层的同步发送,内含超时等待机制, 当前线程会被block
   .send(PDU,Target,Object,ResponseListener); //底层的异步发送, 内含超时机制。
   .addCommandResponder(CommandResponder); //添加全局的trap处理
   .addNotificationListener(Address,CommandResponder); //监听某设备的trap
   .listen(),close();//开始,结束session. 注意,没有listen是收不到设备响应的,因为udp是异步的。

PDU.java implements BERSerializable //SNMPv2的报文,提供了编码时需要的信息(个人觉得编码信息可以由工具类提供,对用户会混淆)。报文结构参见http://xinwang.shanghaitelecom.com.cn/xinwangbu/show.php?newsid=146。主要子类PDUv1, ScopedPDU(v3)。
Address.java //IP地址和端口(和java.net的不同), 常用实现是UdpAddress
Target.java //发送的时候要用到,包含Address,超时,重试次数,snmp版本, 常用实现是ComunityTarget,可以指定community

通常想法是在顶层Snmp这层做模拟,因为模拟器相当于agent, 接收get/set请求同过CommandResponder取得,对一些不缓存的请求可以通过这种方式放过去。
考虑到需求比较简单,从第一层入手即可,对收到的所有请求,仅仅解码报头部分,对于get类操作,所有type+报文体作为key.不用管里面是什么请求。
实现注意要点:
1. 请求的requestID和转发出去的不同
2. 因为ber编码是变长的(不可思议啊),不同的requestID可能导致报文的长度变化,幸好requestID在开头,开头这里重新编码一下搞定。
3. trap模拟用户段稍微麻烦,以前通过IP来判断设备的方法行不通,需要增加端口来识别。


JoeSnmp和Snmp4J的区别:
1. 前者相对简单,没有同步请求的报装。
2. Snmp4J则考虑到多线程发送和接收模型.
3. 前者一个Session只能对应一个设备,在设备很多的时候开销比较大。
4. Snmp4J的一个Session可以对多个设备发送/接收.
5. 前者目前还不支持snmpv3

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值