Snmp4j编程简介之二:PDU
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相关推荐
- access是不是计算机编程,access编程简介之二:用宏还是VBA?
时 间:2012-07-03 09:47:12 作 者: 摘 要:Access编程简介之二:我应该使用宏还是应该使用 VBA 代码? 正 文: 要决定是使用宏或 VBA 还是同时使用这两者,主要取决于 ...
- Python函数式编程简介(二)返回函数
本文为Python函数式编程的第二部分主要讲解返回函数和闭包 2.返回函数 2.1.函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常 ...
- Python编程简介
Python编程简介 2011年06月23日 NOTE: The following is a short tutorial about python program, for Chinese rea ...
- 运动控制器编程_快速入门 | 篇二十一:运动控制器ZHMI组态编程简介一
点击上方"正运动小助手",随时关注新动态! 运动控制器ZHMI组态编程简介一 今天我们来学习一下,运动控制器的ZHMI组态编程简介.本文主要从产品概述.控制器连接触摸屏使用.HM ...
- 《jQuery与JavaScript入门经典》——第 1 章 动态Web编程简介 1.1理解Web服务器浏览器范式...
本节书摘来自异步社区<jQuery与JavaScript入门经典>一书中的第1章,第1.1节,作者:[美]Brad Dayley著,更多章节内容可以访问云栖社区"异步社区&quo ...
- OpenCV 1.x 2.x 编程简介(矩阵/图像/视频的基本读写操作)
OpenCV 编程简介(矩阵/图像/视频的基本读写操作) Introduction to programming with OpenCV OpenCV编程简介 作者: Gady Agam Depart ...
- SVG脚本编程简介(转)
SVG脚本编程简介 本文主要介绍SVG的脚本编程,并分别给出放大.缩小,查询,鼠标事件等实例. 一. SVG简介 SVG,全称为Scalable Vector Graphics( ...
- [Qt教程] 第31篇 网络(一)Qt网络编程简介
[Qt教程] 第31篇 网络(一)Qt网络编程简介 楼主 发表于 2013-8-28 17:04:17 | 查看: 515| 回复: 0 Qt网络编程简介 版权声明 该文章原创于作者yafeilin ...
- C#多线程编程系列(二)- 线程基础
目录 C#多线程编程系列(二)- 线程基础 1.1 简介 1.2 创建线程 1.3 暂停线程 1.4 线程等待 1.5 终止线程 1.6 检测线程状态 1.7 线程优先级 1.8 前台线程和后台线程 ...
- 编程界的“二向箔”——Dart元编程
阅读过<三体>的同学肯定知道"降维打击",从更高维度看问题,直接将对手KO.今天我们闲聊一下编程界的"二向箔"--元编程. 1. 什么是元编程 我们 ...
最新文章
- 【c语言】简单计算器
- 带你从源码角度分析ViewGroup中事件分发流程
- TextView属性大全
- [Python图像处理] 十四.基于OpenCV和像素处理的图像灰度化处理
- 为什么grpc不支持php,带入gRPC:让你的服务同时提供 HTTP 接口
- LINUX添加一块网卡地址配置及问题
- H5 中 bordercolorlight 属性的用法及作用
- 面试死在数组,数组真的那么难吗?(Js篇)
- 理解setState(),异步还是同步?
- 五通信算法:五种编码增益比较matlab模拟
- php构造方法什么时候使用,php:构造方法的说明详解
- 命令行下对apk签名
- c++ array容器 传参_C/C++常用技巧及初学者易错点汇总学习
- javascript学习笔记-基础语法篇
- php 下载函数太慢,php的fread函数的一个巨大的坑
- 麻将开金算法java代_通用麻将胡牌算法
- 通过图片像素计算图片大小的方法
- 手机网站(wap)广告展示一般都有哪些表现形式?
- 如何无损合并video.m4s与audio.m4s为mp4文件
- 计算机在职双证博士的学校,国内在职双证博士5所高校是哪些
热门文章
- C#处理Json文件
- java 如何将异常_java中的异常处理
- python获取日期的年月日_python datetime和time的一些疑惑解答 及 获取上年同期、上月等日期...
- Google两步验证的工作原理
- 使用宝塔控制面板建站时出现网页出现404错误怎么办?
- 强化学习——从最简单的开始入手
- 中国互联网今日正式满 20 岁
- Have Fun with Numbers及循环链表(约瑟夫问题)
- C# string byte[] Base64 常用互相转换
- 了解人工智能与智能系统中的先驱人物