`
avery_leo
  • 浏览: 387904 次
  • 性别: 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 编程入门.doc

    SNMP4J 编程入门 SNMP4J 是一个 Java 库,用于实现 SNMP(Simple Network Management Protocol)协议。SNMP 是一个标准的网络管理协议,用于管理和监控网络设备。在 SNMP4J 中,有三个核心概念:Snmp、Target 和 ...

    snmp4j编程简介.doc

    在使用Snmp4j进行编程时,有三个核心概念:Snmp、Target和PDU。 1. Snmp:这是SNMP协议的接口,负责实际的通信工作。它包含了发送请求(Trap、Get、Set等操作)和接收响应的方法。Snmp对象通常通过一个...

    基于SNMP4J的SNMP操作实现代码

    SNMP4J是一个开源的Java库,提供了一个完整的SNMP实现,包括PDU构造、消息编码和解码、错误处理等功能。它支持SNMPv1、v2c和v3的安全性和认证机制。使用SNMP4J,开发者可以轻松地在Java应用中集成SNMP功能。 3. ...

    snmp4j.rar_SNMP_SNMP4J.jar_snmp4j的jar包_网络设备监控

    为了使用SNMP4J,开发者需要了解SNMP的基本概念,如MIB(Management Information Base)、OID(Object Identifier)和PDU等,并且需要熟悉Java编程。通过导入"snmp4j-2.0.3.jar"到项目中,结合SNMP4J提供的API,就...

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

    Java中的SNMP编程是网络管理员和服务器监控人员常用的技术之一。SNMP(简单网络管理协议)是一种用于收集和组织关于计算机网络中设备状态信息的协议,它能够帮助网络管理员监测网络性能、发现设备问题、管理网络配置...

    snmp4j api文档

    开发者可以通过查阅文档,了解每个类的功能、方法的参数和返回值,以便更有效地使用SNMP4J进行SNMP编程。 总之,SNMP4J为Java开发者提供了一个强大且灵活的框架,用于构建SNMP应用程序。通过理解和掌握SNMP4J API,...

    用SNMP4J实现的Trap源码

    在这个项目中,"用SNMP4J实现的Trap源码"是基于JAVA语言利用SNMP4J库编写的,旨在帮助开发者理解和实践如何通过编程方式实现SNMP Trap的功能。下面将详细解释相关的知识点: 1. **SNMP4J库**:SNMP4J是一个开源的...

    snmp4j的jar包

    SNMP4J是一个基于Java语言实现的简单网络...总之,SNMP4J是Java开发者进行SNMP编程的重要工具,它提供了完整的SNMP协议实现,同时具有良好的文档支持,使得开发者能够轻松地构建SNMP应用,实现对网络设备的管理与监控。

    snmp4j-agent官方源码

    SNMP4J-Agent是SNMP4J项目的一部分,它是一个开放源码的Java实现,用于构建SNMP代理(Agent)应用程序。SNMP(简单网络管理协议)是一种广泛使用的网络管理协议,允许网络管理员监控和配置网络设备。SNMP4J-Agent...

    snmp4j源码和API

    SNMP4J是一个Java实现的简单网络管理协议(SNMP)的应用编程接口(API),它提供了全面的功能,用于开发SNMP应用。SNMP是网络管理领域的重要标准,用于监控和管理网络设备,如路由器、交换机和服务器。下面将详细...

    java利用snmp4j包来读取snmp协议数据

    SNMP4j库为Java开发者提供了一个完整的SNMP解决方案,包括PDU(协议数据单元)的构建、编码、解码以及错误处理等功能。使用SNMP4j,你可以轻松地创建SNMPv1、SNMPv2c或SNMPv3的请求,并处理来自目标设备的响应。 ...

    snmp4j学习文档

    SNMP4J是一个Java实现的简单网络管理协议(SNMP)的应用编程接口(API),它为开发者提供了在Java环境中开发SNMP应用的工具。本文档将深入探讨SNMP4J的相关知识点,帮助读者掌握SNMP协议的基础以及如何利用SNMP4J...

    snmp4j-2.3.0源码等

    SNMP4J是一个开源的Java实现的简单网络管理协议(SNMP)库,适用于开发SNMP应用程序。2.3.0版本是这个库的一个特定发行版,提供了对SNMP v1、v2c和v3的支持。在深入探讨SNMP4J的源码之前,我们需要先了解SNMP的基本...

    SNMP4J最新API

    对于开发者来说,这是一个非常重要的资源,因为它提供了关于类、接口、方法的详细说明,有助于理解和使用SNMP4J进行编程。通过阅读这些文档,开发者可以了解如何初始化SNMP会话,创建和发送请求,解析响应,以及如何...

    snmp4j源码

    8. **异步编程模型**:SNMP4J提供了异步请求处理机制,允许开发者在一个非阻塞模式下发送SNMP请求,提高程序性能。相关的类如`AsyncRequest`和`FutureResponse`用于异步操作。 9. **错误处理和异常**:在源码中,...

    snmp4j开发包,强烈推荐

    SNMP4j库的核心组件包括Agent、Manager和PDU(协议数据单元)。Agent是网络设备上的软件,负责收集和提供设备的状态信息;Manager则是从Agent获取信息或对设备进行配置的客户端。PDU则是SNMP通信中的信息载体,包含...

    snmp4j最新开发包

    SNMP4J是一个Java实现的简单网络管理协议(SNMP)的应用编程接口(API),它为开发者提供了在Java环境中开发SNMP应用的功能。这个最新的2.3.1版本是官方发布的,确保了稳定性和兼容性。下面将详细介绍SNMP4J的几个...

    SNMP4J-API.rar_SNMP4J API中文版_SNMP4J.jar api_snmp4j_snmp4j api ch

    SNMP4J是一个Java实现的简单网络管理协议(SNMP)的应用编程接口,它提供了全面的SNMPv1、SNMPv2c和SNMPv3支持,包括代理和管理站的角色。SNMP4J-API中文版是这个库的中文文档,对于理解和使用SNMP4J库非常有帮助。...

    snmp4j的jar包,源码和api

    SNMP4J是一个Java实现的简单网络管理协议(SNMP)的应用编程接口(API),它为开发者提供了在Java环境中编写SNMP应用的工具。SNMP是网络设备管理和监控的标准协议,广泛应用于网络设备配置、性能监控和故障排查。在...

    snmp4j-2.7.0-distribution 最新jar包和源码

    SNMP4J是一个Java实现的简单网络管理协议(SNMP)的开源库,它提供了全面的SNMP协议支持,包括v1、v2c和v3版本。在SNMP4J-2.7.0-distribution这个压缩包中,包含了最新的SNMP4J库的jar包和源代码,这对于开发者来说...

Global site tag (gtag.js) - Google Analytics