PDU(协议数据单元),用来表示管理站跟代理站点进行通信的数据。包括PDU的类型、传输的数据集合、错误说明等。
除Snmpv1 Trap外,其他操作类型的PDU大致相同。
Snmp4j针对Snmp的各个版本,开发了三个有关PDU的类。PDU(针对Snmpv2c)、PDUv1(针对Snmpv1)、ScopedPDU(针对Snmpv3),但三个类除各自特别的一些参数外,都基本相同。所以Snmp4j在设计的时候,将PDU设计成另外两个的超类,使他们能够共享大部分功能。
(1)PDU
1)pdu类型(Snmpv1支持5种,get、set、getnext、trap、getresponse,Snmpv2c增加了getbulk、inform)
int getType()
void setType(int type)
2)错误(主要有6种错误,请参见RFC)
void setErrorStatus(int status)
int getErrorStatus()
String getErrorStatusText()
void setErrorIndex(int index)
int getErrorindex()
3)变量
void add(VariableBinding vb) // 对于除get、getnext、getbulk外
void addAll(VariableBinding[] vbs) // 对于除get、getnext、getbulk外的
void addOID(VariableBinding vb) // 对于get、getnext、getbulk
void addAllOID(VariableBinding[] vbs) // 对于get、getnext、getbulk
VariableBinding get(int i)
VariableBinding[] toArray()
Vector getVariableBindings()
void set(int i,VariableBinding vb)
void remove(int i)
void clear()
int size()
(2)PDUv1
PDUv1继承了PDU,除Snmp v1 trap操作外 ,其它都跟PDU相同。因为Snmp v1的Trap设计PDU不同于其他操作的PDU,它包括:对象标识符(OID)、代理ip地址(agent-addr)、时间戳(time-stamp)、通用代理类型(generic-trap)、特定代理类型(specific-trap)。所以相应的增加了对这些字段的get/set操作。具体参见API文档。
(3)ScopedPDU
SnmpV3采用了不同安全策略,它的PDU也增加了有关安全方面的几个字段:上下文名称(ContextName)、上下文引擎ID(contextEngineID)等,其它PDU字段属于USM来管理。
所以ScopedPDU在PDU的基础上增加了相应的get/set操作。参见API。
示例代码如下:(摘自API文档)
- SNMPv1/v2c GETNEXT PDU
import org.snmp4j.PDU;
import org.snmp4j.smi.*;
...
PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1.1"))); // sysDescr
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.2.1"))); // ifNumber
pdu.setType(PDU.GETNEXT);
...
- SNMPv3 GETBULK PDU
import org.snmp4j.ScopedPDU;
import org.snmp4j.smi.*;
...
ScopedPDU pdu = new ScopedPDU();
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.2.1"))); // ifNumber
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.2.2.1.10"))); // ifInOctets
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.2.2.1.16"))); // ifOutOctets
pdu.setType(PDU.GETBULK);
pdu.setMaxRepetitions(50);
// Get ifNumber only once
pdu.setNonRepeaters(1);
// set context non-default context (default context does not need to be set)
pdu.setContextName(new OctetString("subSystemContextA"));
// set non-default context engine ID (to use targets authoritative engine ID
// use an empty (size == 0) octet string)
pdu.setContextEngineID(OctetString.fromHexString("80:00:13:70:c0:a8:01:0d"));
...
- SNMPv1 TRAP PDU
import org.snmp4j.PDUv1;
...
PDUv1 pdu = new PDUv1();
pdu.setType(PDU.V1TRAP);
pdu.setGenericTrap(PDUv1.COLDSTART);
...
- SNMPv2c/SNMPv3 INFORM PDU
import org.snmp4j.ScopedPDU;
...
ScopedPDU pdu = new ScopedPDU();
pdu.setType(PDU.INFORM);
// sysUpTime
long sysUpTime = (System.currentTimeMillis() - startTime) / 10;
pdu.add(new VariableBinding(SnmpConstants.sysUpTime, new TimeTicks(sysUpTime)));
pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID, SnmpConstants.linkDown));
// payload
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.2.2.1.1"+downIndex),
new Integer32(downIndex)));
...
分享到:
相关推荐
snmp4j 1.8.2版 The org.snmp4j classes are capable of creating, sending, and receiving SNMPv1/v2c/v3 messages. A SNMP message is composed of its message header and its PDU payload. This package ...
此资源为snmp4j的源码 SNMP4J——一个支持java管理器和代理,支持snmp应用程序接口的类库。 SNMP4J是一个商业类库,而且开源免费,它也是一个有着很高技术艺术性的SNMP执行能力的类库,支持J2SE1.4或更高的版本。...
此资源为snmp4j的api SNMP4J——一个支持java管理器和代理,支持snmp应用程序接口的类库。 SNMP4J是一个商业类库,而且开源免费,它也是一个有着很高技术艺术性的SNMP执行能力的类库,支持J2SE1.4或更高的版本。...
Android Mms专题之:PDU介绍
使用SNMP4J可以很方便的实现一个SNMP NMS的功能。 对于SNMPv1/SNMPv2,简单的说,只需要以下几个步骤 1) 创建Snmp对象snmp 2) 创建CommunityTarget对象target,并指定community, version, address, timeout, retry...
SNMP4J——一个支持java管理器和代理,支持snmp应用程序接口的类库。 SNMP4J是一个商业类库,而且开源免费,它也是一个有着很高技术艺术性的SNMP执行能力的类库,支持J2SE1.4或更高的版本。SNMP4J支持指令发生器...
SNMP4J.jar (snmp类是SNMP4J的核心,它提供了发送和接收SNMP PDUs的方法,所有的SNMP PDU 类型都可以采用同步或者异步的方式被发送。 Snmp采用独立的传输协议,通过TransportMapping 接口调用addTransportMapping...
snmp源码,java实现,get,set,trap功能
snmp4j的源码,含agent代理源码,含有API包含了agent代理API。 核心类TransportMapping、Snmp、CommunityTarget、PDU等等,感兴趣可以重点看一下
WinSNMP编程任务 下表总结编码WinSNMP管理器应用程序必须执行的基本编程步骤,并提供有关引起任务信息的主题。 编程任务 与任务有关函数和主题 打开WinSNMP应用程序 用SnmpStartup 参见打开和关闭WinSNMP管理器应用...
SNMPWALK是一个通过SNMP GET-NEXT类型PDU,实现对目标AGENT的某指定MIB分支信息进行完整提取输出的命令工作。 snmpwalk是SNMP的一个工具,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID...
snmp4j是java 下实现s n m p 的java实现,有pdu等接口可供直接使用
简介:PDU编码协议简介 目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也...
SNMP4J 的包装器,也是其自身的库。 我注意到许多 JRuby 库似乎是简单的包装器,但解释型语言通常具有更简单的接口,例如 SNMP(例如 PHP 的 SNMP,以及 ruby SNMP 库)。 要了解此库与纯 ruby SNMP 库之间...
SNMP PDU TLV格式报文解析,附带设计报告
SNMP报文解析 BER编码的规则SNMP PDU结构,SNMP协议工作 0 2e SNMP报文是ASN.1的SEQUENCE类型,报
snmp trap 实现raritan智能PDU开关,SNMP是基于TCP/IP协议族的网络管理标准,是一种在IP网络中管理网络节点(如服务器、工作站、路由器、交换机等)的标准协议。SNMP能够使网络管理员提高网络管理效能,及时发现并...
SNMP PDU报文格式解析,希望对大家有所帮助
Java Comm API编程指南.doc Javax.comm简介.doc KEIL中如何用虚拟串口调试串口程序.doc Message PDU编码规则.doc QHDQ-29DDDAD3A0.LOG SMSLib串口通信.doc 串口常用参数.doc 关于java使用javacomm20.doc 常见的进制...
目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信...一般的PDU编码由A B C D E F G H I J K L M十三项组成。