`
avery_leo
  • 浏览: 382349 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Snmp4j编程简介之二:PDU

阅读更多

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)));
    ...
分享到:
评论
2 楼 vincent2001 2008-08-13  
Hi LZ

  Sorry for typing English..I don't have Chinese input software in company computer.

  Thank you for your detailed description of SNMP4J and examples.very helpful for me!

  I am thinking do you have any idea about MessageDispacher and Session...do we need that ?
1 楼 jinyan798 2008-08-12  

相关推荐

    snmp4j-1.8.2.zip_Composed_Payload_java pdu_org.snmp4j_snmp4j-1.8

    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_source

    此资源为snmp4j的源码 SNMP4J——一个支持java管理器和代理,支持snmp应用程序接口的类库。 SNMP4J是一个商业类库,而且开源免费,它也是一个有着很高技术艺术性的SNMP执行能力的类库,支持J2SE1.4或更高的版本。...

    snmp4j_api

    此资源为snmp4j的api SNMP4J——一个支持java管理器和代理,支持snmp应用程序接口的类库。 SNMP4J是一个商业类库,而且开源免费,它也是一个有着很高技术艺术性的SNMP执行能力的类库,支持J2SE1.4或更高的版本。...

    Android Mms专题之:PDU介绍.doc

    Android Mms专题之:PDU介绍

    使用Java进行SNMP编程-SNMP4J-代码实例

    使用SNMP4J可以很方便的实现一个SNMP NMS的功能。 对于SNMPv1/SNMPv2,简单的说,只需要以下几个步骤 1) 创建Snmp对象snmp 2) 创建CommunityTarget对象target,并指定community, version, address, timeout, retry...

    snmp4j_jar

    SNMP4J——一个支持java管理器和代理,支持snmp应用程序接口的类库。 SNMP4J是一个商业类库,而且开源免费,它也是一个有着很高技术艺术性的SNMP执行能力的类库,支持J2SE1.4或更高的版本。SNMP4J支持指令发生器...

    SNMP4J.jar

    SNMP4J.jar (snmp类是SNMP4J的核心,它提供了发送和接收SNMP PDUs的方法,所有的SNMP PDU 类型都可以采用同步或者异步的方式被发送。 Snmp采用独立的传输协议,通过TransportMapping 接口调用addTransportMapping...

    snmp4j-2.5.0-distribution.zip_SNMP_SNMP4j 2.7.0_pdu_v1.0.jar_snm

    snmp源码,java实现,get,set,trap功能

    snmp4j源码和API

    snmp4j的源码,含agent代理源码,含有API包含了agent代理API。 核心类TransportMapping、Snmp、CommunityTarget、PDU等等,感兴趣可以重点看一下

    snmp编程常用资料

    WinSNMP编程任务 下表总结编码WinSNMP管理器应用程序必须执行的基本编程步骤,并提供有关引起任务信息的主题。 编程任务 与任务有关函数和主题 打开WinSNMP应用程序 用SnmpStartup 参见打开和关闭WinSNMP管理器应用...

    net-snmp,snmpwalk(windows最新版本)

    SNMPWALK是一个通过SNMP GET-NEXT类型PDU,实现对目标AGENT的某指定MIB分支信息进行完整提取输出的命令工作。 snmpwalk是SNMP的一个工具,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID...

    snmp4j-jar

    snmp4j是java 下实现s n m p 的java实现,有pdu等接口可供直接使用

    SMS 的PDU编码(协议简介)

    简介:PDU编码协议简介 目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也...

    javasnmp源码-SNMP4JR:用于JRuby的高性能SNMP库,它封装了SNMP4J

    SNMP4J 的包装器,也是其自身的库。 我注意到许多 JRuby 库似乎是简单的包装器,但解释型语言通常具有更简单的接口,例如 SNMP(例如 PHP 的 SNMP,以及 ruby​​ SNMP 库)。 要了解此库与纯 ruby​​ SNMP 库之间...

    SNMP PDU报文解析JAVA实现

    SNMP PDU TLV格式报文解析,附带设计报告

    snmp报文解析 PDU 网络管理试验报告

    SNMP报文解析 BER编码的规则SNMP PDU结构,SNMP协议工作 0 2e SNMP报文是ASN.1的SEQUENCE类型,报

    snmp trap 实现raritan智能PDU开关

    snmp trap 实现raritan智能PDU开关,SNMP是基于TCP/IP协议族的网络管理标准,是一种在IP网络中管理网络节点(如服务器、工作站、路由器、交换机等)的标准协议。SNMP能够使网络管理员提高网络管理效能,及时发现并...

    SNMP PDU报文格式解析

    SNMP PDU报文格式解析,希望对大家有所帮助

    java串口通讯 短信测试 comm编程 PDU编码 进制转换 AT命令

    Java Comm API编程指南.doc Javax.comm简介.doc KEIL中如何用虚拟串口调试串口程序.doc Message PDU编码规则.doc QHDQ-29DDDAD3A0.LOG SMSLib串口通信.doc 串口常用参数.doc 关于java使用javacomm20.doc 常见的进制...

    pdu编码pdu编码

    目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信...一般的PDU编码由A B C D E F G H I J K L M十三项组成。

Global site tag (gtag.js) - Google Analytics