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)));
...

Snmp4j编程简介之二:PDU相关推荐

  1. access是不是计算机编程,access编程简介之二:用宏还是VBA?

    时 间:2012-07-03 09:47:12 作 者: 摘 要:Access编程简介之二:我应该使用宏还是应该使用 VBA 代码? 正 文: 要决定是使用宏或 VBA 还是同时使用这两者,主要取决于 ...

  2. Python函数式编程简介(二)返回函数

    本文为Python函数式编程的第二部分主要讲解返回函数和闭包 2.返回函数 2.1.函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常 ...

  3. Python编程简介

    Python编程简介 2011年06月23日 NOTE: The following is a short tutorial about python program, for Chinese rea ...

  4. 运动控制器编程_快速入门 | 篇二十一:运动控制器ZHMI组态编程简介一

    点击上方"正运动小助手",随时关注新动态! 运动控制器ZHMI组态编程简介一  今天我们来学习一下,运动控制器的ZHMI组态编程简介.本文主要从产品概述.控制器连接触摸屏使用.HM ...

  5. 《jQuery与JavaScript入门经典》——第 1 章 动态Web编程简介 1.1理解Web服务器浏览器范式...

    本节书摘来自异步社区<jQuery与JavaScript入门经典>一书中的第1章,第1.1节,作者:[美]Brad Dayley著,更多章节内容可以访问云栖社区"异步社区&quo ...

  6. OpenCV 1.x 2.x 编程简介(矩阵/图像/视频的基本读写操作)

    OpenCV 编程简介(矩阵/图像/视频的基本读写操作) Introduction to programming with OpenCV OpenCV编程简介 作者: Gady Agam Depart ...

  7. SVG脚本编程简介(转)

    SVG脚本编程简介 本文主要介绍SVG的脚本编程,并分别给出放大.缩小,查询,鼠标事件等实例. 一.            SVG简介 SVG,全称为Scalable Vector Graphics( ...

  8. [Qt教程] 第31篇 网络(一)Qt网络编程简介

    [Qt教程] 第31篇 网络(一)Qt网络编程简介 楼主  发表于 2013-8-28 17:04:17 | 查看: 515| 回复: 0 Qt网络编程简介 版权声明 该文章原创于作者yafeilin ...

  9. C#多线程编程系列(二)- 线程基础

    目录 C#多线程编程系列(二)- 线程基础 1.1 简介 1.2 创建线程 1.3 暂停线程 1.4 线程等待 1.5 终止线程 1.6 检测线程状态 1.7 线程优先级 1.8 前台线程和后台线程 ...

  10. 编程界的“二向箔”——Dart元编程

    阅读过<三体>的同学肯定知道"降维打击",从更高维度看问题,直接将对手KO.今天我们闲聊一下编程界的"二向箔"--元编程. 1. 什么是元编程 我们 ...

最新文章

  1. 【c语言】简单计算器
  2. 带你从源码角度分析ViewGroup中事件分发流程
  3. TextView属性大全
  4. [Python图像处理] 十四.基于OpenCV和像素处理的图像灰度化处理
  5. 为什么grpc不支持php,带入gRPC:让你的服务同时提供 HTTP 接口
  6. LINUX添加一块网卡地址配置及问题
  7. H5 中 bordercolorlight 属性的用法及作用
  8. 面试死在数组,数组真的那么难吗?(Js篇)
  9. 理解setState(),异步还是同步?
  10. 五通信算法:五种编码增益比较matlab模拟
  11. php构造方法什么时候使用,php:构造方法的说明详解
  12. 命令行下对apk签名
  13. c++ array容器 传参_C/C++常用技巧及初学者易错点汇总学习
  14. javascript学习笔记-基础语法篇
  15. php 下载函数太慢,php的fread函数的一个巨大的坑
  16. 麻将开金算法java代_通用麻将胡牌算法
  17. 通过图片像素计算图片大小的方法
  18. 手机网站(wap)广告展示一般都有哪些表现形式?
  19. 如何无损合并video.m4s与audio.m4s为mp4文件
  20. 计算机在职双证博士的学校,国内在职双证博士5所高校是哪些

热门文章

  1. C#处理Json文件
  2. java 如何将异常_java中的异常处理
  3. python获取日期的年月日_python datetime和time的一些疑惑解答 及 获取上年同期、上月等日期...
  4. Google两步验证的工作原理
  5. 使用宝塔控制面板建站时出现网页出现404错误怎么办?
  6. 强化学习——从最简单的开始入手
  7. 中国互联网今日正式满 20 岁
  8. Have Fun with Numbers及循环链表(约瑟夫问题)
  9. C# string byte[] Base64 常用互相转换
  10. 了解人工智能与智能系统中的先驱人物