当前位置:首页 >> 信息与通信 >>

使用ObjectSNMP采集各种SNMP数据


使用 ObjectSNMP 采集各种 SNMP 数据
阅读:149 次 评论:0 条 更新时间:2010-12-09 ObjectSNMP 提供了如下 MIB 数据采集服务,使用者可直接利用。 ObjectSNMP 提供如下常用数据采集服务,使用者可直接使用: 一、 系统类 MIB 描述 1. SNMP Agent 系统信息(MibSystem) 2. 系统 IP 地址

信息(MibIPAddrEntry) 3. SNMP Agent 统计信息(MibSNMP) 二、 IP 网络类 MIB 描述 1. 网络接口/端口信息(MibIfEntry) 2. 网络接口流量和数据包信息(MibIfEntry) 3. IP 层流量和输入输出统计信息(MibIP) 4. 路由表信息(MibIPRouterEntry) 5. TCP 连接资源和统计信息(MibTCPConnEntry) 6. UDP 监听信息(MibUDPEntry) 7. IP-MAC 关联表(MibMacIP) 三、 交换机 MIB 描述 1. 交换机端口基本信息(Dot1dBasePortEntry) 2. 交换机转发 MAC 地址和状态(Dot1dTpFdbEntry) 四、 硬件设施类 MIB 描述 1. 硬件设施和工作状态(MibDeviceEntry) 2. 存储系统状态(MibDiskAndMemoEntry) 3. CPU 负载信息(MibProcessorEntry) 五、 软件类 MIB 描述 1. 软件进程状态信息(MibSoftwareRunEntry) 2. 已安装的软件信息(MibSoftwareInstallEntry) 六、 Java 类 MIB 描述 1. Java 服务器基本信息(MibJvmOS) 2. JVM 基本信息(MibJvmRuntime) 3. Java 内存和堆栈状态(MibJvmMemory) 4. Java 线程和资源消耗情况(MibJvmThreading)

一、 系统类 MIB 描述
1. SNMP Agent 系统信息 系统信息(MibSystem)

描述:SNMP 设备的基本描述信息,如系统名称、启动时间、描述等信息。 描述 所有支持 SNMP 的设备都应该支持此信息。 Mib 类型 类型:Mib 组 支持的设备:路由器、交换机、防火墙、服务器、计算机等所有支持 SNMP 支持的设备 的设备。 MIB 获取方法 MibSystem mibResult=SNMPAPI. getMibObject(new MibSystem(),target); 获取方法: 对应的 Java 对象:com.zhtelecom.common.snmp.mib. MibSystem 对象 Java 对象描述 对象描述: 属性名 sysDescr 中文名 系统描述 是否可写 只读 描述 系统的描述信息。描述信息可作为识 别设备类型的补充手段。 sysObjectID 系统的私 有 OID 只读 如果系统申请了企业私有 OID,显示 系统私有 OID。私有 OID 可以作为识 别设备类型的方法。 sysUpTime 启动时间 只读 系统 SNMP Agent 模块运行的时间, 一般可认为是系统的运行时间。单 位:百分之一秒 sysContact 系统联系 人 sysName sysLocation sysServices 系统名称 系统位置 服务类型 可写 可写 只读 系统的名称 系统的物理位置 系统提供的服务类型。OSI 划分的服 务类型。目前很少用到。 可写 系统的管理员或联系人

2. 系统 IP 地址信息 地址信息(MibIPAddrEntry)
描述:设备的 IP 地址、掩码、网关等 描述

Mib 类型:Mib 表。设备有多个 IP 地址。 类型 支持的设备:路由器、交换机、防火墙、服务器等支持 IP 协议的设备 支持的设备 MIB 获取方法 MibIPAddrEntry mibResult=SNMPAPI. getMibObject(new MibIPAddrEntry(),target); 获取方法: 对象:com.zhtelecom.common.snmp.mib. MibIPAddrEntry 对应的 Java 对象

3. SNMP Agent 统计信息 统计信息(MibSNMP)
描述:SNMP Agent 模块统计的 SNMP 请求、应答、错误等统计数据 描述 Mib 类型 类型:Mib 组 支持的设备:大部分支持 SNMP 的设备,都提供此信息。 支持的设备 MIB 获取方法 MibSNMP mibResult=SNMPAPI. getMibObject(new MibSNMP(),target); 获取方法: 对象:com.zhtelecom.common.snmp.mib. MibSNMP 对应的 Java 对象

二、 IP 网络类 MIB 描述
1. 网络接口 端口信息(MibIfEntry) 网络接口/端口信息 端口信息
描述:网络设备、计算机均是多网口、多网络接口设备。通过此信息可以 描述 了解设备上有 多少个网卡、交换机接口、路由器端口、网络接口;并进一步知道每个接口 /端口的详 细信息。 Mib 类型 类型:Mib 表。设备有多个网络接口。 支持的设备:路由器、交换机、防火墙、服务器等端口/接口设备 支持的设备 MIB 获取方法 List 获取方法:
mibResultList=SNMPAPI. getAllTableData (MibIfEntry.class,target);

对象:com.zhtelecom.common.snmp.mib. MibIfEntry 对应的 Java 对象

2. 网络接口流量和数据包信息 网络接口流量和数据包信息(MibIfEntry)

描述:网络设备、计算机均是多网口、多网络接口设备。比如交换机有多 描述 个接口,每个 接口有独立的流量和数据出入统计信息。 Mib 类型 类型:Mib 表 支持的设备:路由器、交换机、防火墙、服务器等端口/接口设备 支持的设备 MIB 获取方法 List 获取方法:
mibResultList=SNMPAPI. getAllTableData (MibIfEntry.class,target);

对象:com.zhtelecom.common.snmp.mib. MibIfEntry 对应的 Java 对象

3. IP 层流量和输入输出统计信息 层流量和输入输出统计信息(MibIP)
描述:通过整个设备系统的的流量信息、整个设备系统的输入统计信息和 描述 输出统计信息。 Mib 类型 类型:Mib 组 支持的设备:路由器、交换机、防火墙、服务器等支持 IP 协议的设备。 支持的设备 MIB 获取方法 MibIP mibResult=SNMPAPI. getMibObject(new MibIP(),target); 获取方法: 对象:com.zhtelecom.common.snmp.mib. MibIP 对应的 Java 对象

4. 路由表信息 路由表信息(MibIPRouterEntry)
描述:IP 设备的路由表信息。 描述 Mib 类型 类型:Mib 表。多项路由表信息。 支持的设备:路由器、计算机、防火墙、服务器等 支持的设备 MIB 获取方法 List 获取方法:
mibResultList=SNMPAPI. getAllTableData (MibIPRouterEntry.class,target);

对象:com.zhtelecom.common.snmp.mib. MibIPRouterEntry 对应的 Java 对象

5. TCP 连接资源和统计信息 连接资源和统计信息(MibTCPConnEntry)
描述:系统中所有 TCP 网络连接的信息,包含本地 TCP 监听和远程 TCP 连 描述 接。

Mib 类型:Mib 表。有多条 TCP 连接。 类型 支持的设备:路由器、交换机、防火墙、服务器等 支持的设备 MIB 获取方法 List 获取方法:
mibResultList=SNMPAPI. getAllTableData (MibTCPConnEntry.class,target);

对象:com.zhtelecom.common.snmp.mib. MibTCPConnEntry 对应的 Java 对象

6. UDP 监听信息 监听信息(MibUDPEntry)
描述:系统中所有 UDP 监听信息。 描述 Mib 类型 类型:Mib 表。 支持的设备:路由器、交换机、防火墙、服务器等 支持的设备 MIB 获取方法 List 获取方法:
mibResultList=SNMPAPI. getAllTableData (MibUDPEntry.class,target);

对象:com.zhtelecom.common.snmp.mib. MibUDPEntry 对应的 Java 对象

7. IP-MAC 关联表 关联表(IpAdEntAddr)
描述:IP 地址和 MAC 地址的学习表。设备学习到的 MAC 地址和 IP 地址成 描述 对显示出来。 Mib 类型 类型:Mib 表。多个 IP-MAC 地址对。 支持的设备:路由器、交换机、计算机等 支持的设备 MIB 获取方法 List 获取方法:
mibResultList=SNMPAPI. getAllTableData (MibIpAdEntAddr.class,target);

对象:com.zhtelecom.common.snmp.mib. IpAdEntAddr 对应的 Java 对象

三、 硬件设施类 MIB 描述
1. 硬件设施和工作状态 硬件设施和工作状态(MibDeviceEntry)
描述:计算机中的硬件设施列表,以及设备的状态。如键盘、CPU、网卡、 描述 鼠标等 Mib 类型 类型:Mib 表。系统有多种设施。 支持的设备:计算机、服务器、操作系统 支持的设备

MIB 获取方法:List 获取方法

mibResultList=SNMPAPI. getAllTableData (MibDeviceEntry.class,target);

对象:com.zhtelecom.common.snmp.mib. MibDeviceEntry 对应的 Java 对象

2. 存储系统状态 MibDiskAndMemoEntry) 存储系统状态(MibDiskAndMemoEntry MibDiskAndMemoEntry
描述:物理磁盘、逻辑磁盘、内存、虚拟内存的使用情况。 描述 Mib 类型 类型:Mib 表。 支持的设备:计算机、服务器、操作系统 支持的设备 MIB 获取方法 List 获取方法:
mibResultList=SNMPAPI. getAllTableData (MibDisskAndMemoEntry.class,target);

对象:com.zhtelecom.common.snmp.mib.MibDiskAndMemoEntry 对应的 Java 对象

3. CPU 负载信息 负载信息(MibProcessorEntry)
描述:系统中 CPU 的负载情况。 描述 Mib 类型 类型:Mib 表。 支持的设备:计算机、服务器、操作系统、高端网络设备 支持的设备 MIB 获取方法:List 获取方法
mibResultList=SNMPAPI. getAllTableData (MibProcessorEntry.class,target);

对象:com.zhtelecom.common.snmp.mib. MibProcessorEntry 对应的 Java 对象

四、 软件类 MIB 描述
1. 软件进程状态信息 MibSoftwareRunEntry) 软件进程状态信息(MibSoftwareRunEntry MibSoftwareRunEntry
描述:系统中正在运行的进程信息,如:进程名、进程路径、运行状态等。 描述 Mib 类型 类型:Mib 表 支持的设备:计算机、服务器、操作系统等 支持的设备 MIB 获取方法 List 获取方法:
mibResultList=SNMPAPI. getAllTableData (MibSoftwareRunEntry.class,target);

对象:com.zhtelecom.common.snmp.mib.MibSoftwareRunEntry 对应的 Java 对象

2. 已安装的软件信息 已安装的软件信息(MibSoftwareInstallEntry)
描述:系统中已安装的软件信息。 描述 Mib 类型 类型:Mib 表 支持的设备:计算机、服务器、操作系统等 支持的设备 MIB 获取方法 List 获取方法:
mibResultList=SNMPAPI. getAllTableData (MibSoftwareInstallEntry.class,target);

对象:com.zhtelecom.common.snmp.mib. MibSoftwareInstallEntry 对应的 Java 对象

五、 Java 类 MIB 描述
1. Java 服务器基本信息 服务器基本信息(MibJvmOS)
描述:Java 系统的基础操作系统信息。 描述 Mib 类型 类型:Mib 组 支持的设备: 服务器。 Tomcat、 如: JBoss、 支持的设备 使用 SUN JDK/JRE 的 Java/J2EE 软件、 SUN ONE

MIB and OID
SNMP 介绍 SNMP 介绍 1.1. SNMP 概览 SNMP 的基本知识介绍 简单网络管理协议(SNMP-Simple Network Management Protocol)是一个与网 络设备交互的简单方法。该规范是由 IETF 在 1990 年五月发布的 RFC 1157 中定 义的。SNMP 通常被认为相当难懂,并且过于复杂,其可用的 API 似乎在本来非 常简单的东西外面封装了大量的东西。现在关于 SNMP 的书籍又往往只是把它更 加复杂化了,而没有解释清楚。 SNMP 对于任何程序设计人员来说是特别易于理解的。总体的简化能够很好地把 这个系统简化。一个网络设备以守护进程的方式运行 SNMP 代理,该守护进程能 够响应来自网络的各种请求信息。该 SNMP 代理提供大量的对象标识符(OID- Object Identifiers)。一个 OID 是一个唯一的键值对。该代理存放这些值并让

它们可用。一个 SNMP 管理器(客户)可以向代理查询键值对中的特定信息。从 程序员的角度看,这和导入大量的全局变量没有多少区别。SNMP 的 OID 是可读 或可写的。尽管向一个 SNMP 设备写入信息的情况非常少,但它是各种管理应用 程序用来控制设备的方法(例如针对交换机的可管理 GUI)。SNMP 中有一个基本 的认证框架,能够让管理员发送公共名来对 OID 读取或写入的认证。绝大多数的 设备使用不安全的公共名 "public" 。 SNMP 协议通过 UDP 端口 161 和 162 进行 通信的。 注意,我还没有提到 MIB!MIB 的重要性被大大地夸大了。刚开始时,MIB 显得 非常复杂,但是它们其实非常简单。OID 是数字的和全局的键值对。一个 OID 看 起来和一个 IPv6 的地址很象,并且不同的厂商有不同的前缀等信息。OID 都非 常长,使得人们难以记住,或者对他非常感冒。因此,人们就设计了一种将数字 OID 翻译为人们可读的格式。这种翻译映射被保存在一个被称为 “管理信息基 础"(Management Infomation Base) 或 MIB 的、可传递的无格式文本文件里。 使用 SNMP 或者向 SNMP 设备查询,你不需要使用 MIB,但是,如果没有 MIB,你 就得猜测你正在查看的数据是什么。某些情况下,不使用 MIB 也非常简单,例如 查看主机名、 磁盘使用率数字, 或者端口状态信息。 其他情况下, 就非常困难了, 这个时候使用 MIB 就非常有帮助。对于准备编写的应用程序来说,为了让用户避 免妥当安装 MIB 带来的麻烦,而严格使用数字 OID 是并不是很少见的。安装一个 MIB 的动作,只是将他放置到你的 SNMP 客户端应用软件能够搜索到并进行上述 翻译映射工作的某个位置而已。 SNMP 可以按照两种方式来使用:轮询和陷阱。轮询就是说你编写一个应用程序 能够设置一个发送给一个 SNMP 代理查看某些值的 SNMP GET 请求。这种方法非常 有用,因为如果该设备响应了请求,你就得到了你需要的信息,如果该设备没有 响应请求,你就能够知道存在某些问题。轮询是网络监控的一种主动形式。另一 方面, SNMP 陷阱能够被用来进行被动形式的网络监控。 SNMP 陷阱是通过配置 SNMP 设备的代理,让他在某些动作发生时联系另一个 SNMP 代理来实现的。 备,可以配置为在某些事件发生时发送 SNMP 陷阱。例如,你可以配置 Cisco 的 IOS 在某个独立事件(例如链路断开)发生时,或者在任何定义的陷阱事件发生 时,发送 SNMP 陷阱。(IOS:snmp 服务器开启了链路断开的 snmp 陷阱)。当陷 阱事件发生时,设备中的 snmp 代理会发送该陷阱到一个预先配置好的通常成为 陷阱主机的目标上。陷阱主机会运行有自己的 SNMP 代理,该代理能够接受并处 理传入的陷阱。这些陷阱的处理由陷阱处理器来完成。陷阱处理器可以用任何语 言编写,并且可以通过 STDIN(标准输入)传入的来自发送陷阱的信息。该处理 器之后可以根据陷阱进行任何想作的事情,例如发送邮件或者你想要的任何事 情。 SNMP 被广泛应用在 NMS 网络管理系统中(Network Management System)。知名 的 NMS 包括 BMC 的 Patrol、CA 的 Unicenter、Sun Mangegement 控制台、IBM 的 Tivoli Netview、以及全球著名的 HP Openview。NMS 的目标是提供一个监控和 管理所有开启 SNMP 功能的设备的单一入口。通过配置你的设备代理来接受写访 问,你可以从一个应用程序中处理你的网络环境。如果你的整个环境围拢 NMS 解决方案架构你的环境,你就能无限制地控制、查看你的整个网络。尽管 Net-SNMP 提供了可用来构建你自己的 NMS 网管系统的所有工具,我们不会再进 一步讨论关于 NMS 的话题。不过请记住,如果你认为你的 SNMP 设备厂商没有提 供 SNMP 代理方面的详细信息,很可能是因为他们希望你购买他们的 NMS 网络管

理系统,或者购买能够在另一个 NMS 平台上使用的插件。 1.2. SNMP 的三大版本 SNMP 的常用版本有三个:SNMPv1、SNMPv2、SNMPv3 Three different version of SNMP exist: SNMPv1 (RFC’s 1155, 1157, and 1212), SNMPv2c (RFC’s 1901 through 1908), and SNMPv3 (RFC’s 3411 though 3418). The co-existence of all three versions are detailed in RFC 3584. SNMP 有三个不同的版本:SNMPv1(RFC 1155、RFC 1157、RFC 1212),SNMPv2c (RFC 1901、1908)以及 SNMPv3 (RFC 3411 - 3418). RFC 3584 中详细说明了这三种 版本同时共存方面的信息。 SNMPv1 is the original standard for community based management. SNMPv2 was derived from the SNMPv1 framework but had no message definition, which was later revamped aa SNMPv2c, a community based version of SNMPv2 with a message format similar to SNMPv1. SNMPv2 added several new datatypes (Counter32, Counter64, Gauge32, UInteger32, NsapAdress, and BIT STRING), as well as enhancements to OID tables and the setting of OID values. SNMPv3 is an extensable SNMPv2 framework with a new message format, ACL and security abilities, and remote configuration of SNMP parameters. SNMPv1 是为基于公共管理的初始标准。SNMPv2 是 SNMPv1 框架下衍生出来的,但 是没有定义信息,其后修订为 SNMPv2c,一个带有于 SNMPv1 类似信息格式的给予 公共管理的版本。SNMPv2 添加了几个新的数据类型(Counter32、Counter64、 Gauge32、UInteger32、NsapAdress 以及 BIT STRING),以及对 OID 表和 OID 值 的设置的增强。SNMPv3 是一个带有新的信息格式、ACL、安全功能和远处 SNMP 参数配置的、扩展了 SNMPv2 框架的版本。 SNMP is based on several other standards including the Abstract Syntax Notation 1 Basic Encoding Rules (ASN.1 BER) which defines the SNMP used Datatypes and the Structure of Management Information (SMI) which details the grammar used by SNMP MIBs. SMI comes in two varieties: SMIv1 (RFC 1155) and SMIv2 (RFC 2578). SMIv1 is now obsolete and should not be used. If you choose to modify MIBs at some point you’ll need to learn SMIv2 and ASN.1 syntax, but otherwise they are interesting but unnecessary to learn. SNMP 是基于几个其他规范的,包括定义给予 SNMP 的数据类型的 ASN.1 BER(Abstract Syntax Notation 1 Basic Encoding Rules), 以及详细描述有 SNMP MIB 使用的语法的管理信息结构(SMI)。SMIv1 目前被独立出来,不应当 再被使用。如果你选择修改 MIB 的某些东西,你需要学习 SMIv2 和 ASN.1 语法, 不过其他情况下你只需要在兴趣时看看他,而不必学习他。 To this day, SNMPv1 and SNMPv2c are the most commonly used, however due to the insecurity inherent to these protocols read-only access is typical. In general, don’t bother with SNMPv3 unless you really need the added security features. 现在,SNMPv1 和 SNMPv2 被广泛应用,但是由于这些协议的不安全特性,通常只 使用只读访问。通常,除非你确实需要附加安全特性,否则你不需要过多地关注

SNMPv3。 1.3. 本文不涉及的话题 本文中不会涉及如何编写代理、MIB 模块等方面的话题。 There are several subject we will not be discussing in this paper. These topics include writing agents or sub-agents, writing MIB modules, trap generation and trap sending, synchronous vs asynchronous SNMP coding, and MIB parsing. 本文中,有几个主题我们不会讨论。这些主题包括编写代理或子代理,编写 MIB 模块、陷阱生成以及陷阱发送、同步和一步 SNMP 代码编写,以及 MIB 解释器。 Something that scares new or inexperienced coders away from the Net-SNMP documentation is the seemingly constant reference to synchronous and asynchronous applications. Don’t be afraid, thats referring to applications that can’t afford to sit and wait for a response. If your application needs a non-blocking method of handling SNMP traffic, use the asynchronous interface (eg: GUIs, Threads, Forking, etc). Otherwise, just stick with the synchronous interfaces for typical use. Net-SNMP 中关于同步和异步应用程序的文档,常常会把没有经验的编码新手给 吓唬住。别担心,那只是指无法坐等响应的应用程序。如果你的应用程序需要以 非阻塞方式处理 SNMP 数据流,就使用一步接口(例如 GUI、线程、forking 等)。 否则,只需要使用同步接口就可以了。 Lastly, this document addresses the use of Net-SNMP on UNIX systems only. Please refer to the Net-SNMP website for information regarding development on Win32. 本文中的后面会针对 Unix 系统中使用的问题, 请参考 Net-SNMP 网站了解关于在 Win32 中开发的信息。 2. MIB 和 OID OID(对象标识符) 是 SNMP 代理提供的具有唯一标识的键值。 (管理信息基) , MIB 提供数字化 OID 到可读文本的映射。 2.1. OID OID 的编写规则和习惯 SNMP OIDs are laid out in a hierarchy forming unique addresses into a tree similar to the DNS hierarchy. Like many other forms of addressing, OIDs can be used in 2 forms: fully qualified and relative (sometimes called ”relevant”). SNMP OID 是用一种按照层次化格式组织的、树状结构中的唯一地址来表示的, 它与 DNS 层次相似。与其他格式的寻址方式类型,OID 以两种格式加以应用:全 名和先对名(有时称为“相关”) The fully qualified form starts from the root and moves outward to the individual value on a device. An example of a fully qualified address is:

完全验证格式从 root 根开始,并且向外移到某个设备的独立的质上。例如一个 完整验证的地址为: This OID could be rewritten in human readable form as: 该 OID 可用人们可读的方式重写为: All fully qualified OIDs will begin with .iso.org.dod.internet.private represented numerically as .1.3.6.1.4. Almost all OIDs will then be followed by enterprises (.1) and a unique number for the vendor as assigned by the Internet Assigned Numbers Authority (IANA). In the example OID 789 represents the vendor ID for the Network Appliance Corporation (NetApp). Everything beyond the vendor ID is based on the vendors implementation and may vary between implementations. Please note the prefixing dot before iso. Similar to the trailing dot in DNS, properly qualified IODs begin with a dot representing the root. 所有完全验证 OID 都有 .iso.org.dod.internet.private 开始,数字表达 为: .1.3.6.4. 。几乎所有的 OID 都会跟上企业(.1)和由 IANA(互联网编号分 配中心分配的)唯一的厂商标号。例如 OID 789 表示 Network Appliance 格式的 厂商编号( NetApp )。厂商编号后面的是基于厂商实现的功能,并且各不相同。 请注意,在 iso.前面的 . ` ,与 DNS 中的后点相似,正确验证的 OID 是有一个 表示根的前缀 `. 开始的。 The complete list of enterprise assignments can be found at the IANA website: http://www.iana.org/assignments/enterprise-numbers IANA 网站上找到企业分配完整的清单 : http://www.iana.org/assignmenets/enterprise-numbers The relative form of an OID, on the other hand, begins from the enterprises value and leaves all the implied addressing off. So we can use the relative form of the above OID as enterprises.netapp.netapp1.raid.diskSummary.diskSpareCount.0 or numerically as .1.789.1.6.4.8.0 . OID 的先对格式,从企业值开始,略过所有的隐含地址。因此,我们可以用 enterprises.netapp.netappl.raid.diskSUmmary.diskSpaceCount.0 来表示上 述的 OID,或者用数字格式 .1.789.6.4.8.0 . A common form of writing OIDs is by the name of the MIB and a unique key defined within the MIB. For instance, we could rewrite the above OID into the condensed form NETWORK-APPLIANCE-MIB::diskSpareCount.0 . This condensed form follows the convention of MIB Name::Unique Key.instance. Some keys, while unique, can be represented by multiple instances of that key, and thus all OIDs end with an instance value. This is why you’ll notice that most OIDs end with a .0 .

写 OID 的常用格式是用 MIB 名称和在 MIB 中定义的唯一键值。例如,我们可以用 简写的格式重写上述 OID: NETWORK-APPLIANCE-MIB::diskSpareCount.0 。 这 种缩写格式规则为:: MIB Name::唯一键值.instance.

某些唯一键值,可用多个实例表示,这样所有的 OID 都以实例值结尾。这就是为 什么你得注意到大多数 OID 都是以一个 .0 结尾的。 2.2. MIB MIB 介绍 The structure of a MIBs internals are a little strange and foreign at first, but it’s structured well enough that you can poke through it pretty intelligently without really knowing what your doing. The structure of a MIB comes from the Structure of Management Information (SMI) standard detailed in IETF RFC 1155 and 2578. If you choose to modify or write your own MIBs you’ll benefit from understanding SMI before hacking much on MIBs. MIB 的内部结构刚开始时会让人感觉有些奇怪和不好理解,不过它的结构非常 好,你可以在不懂的情况下一个一个看进去。MIB 的结构来源于 IETF RFC1155 和 2578 定义的管理信息结构。如果你想要修改或编写自己的 MIB,在动手前理 解 SMI 非常有帮助。 Lets look at the header of a MIB to get a better idea of how they work: 为了更好地理解他们是怎样工作的,我们先来看看 MIB 的头: -- PowerNet-MIB {iso org(3) dod(6) internet(1) private(4) -- enterprises(1) apc(318) }

PowerNet-MIB DEFINITIONS ::= BEGIN

IMPORTS enterprises, IpAddress, Gauge, TimeTicks FROM RFC1155-SMI DisplayString FROM RFC1213-MIB OBJECT-TYPE FROM RFC-1212 TRAP-TYPE FROM RFC-1215;

apc OBJECT IDENTIFIER ::= { enterprises 318 } products OBJECT IDENTIFIER ::= { apc 1 } apcmgmt OBJECT IDENTIFIER ::= { apc 2 }

Comments can be inserted into a MIB by prepending them with two dashes. In the header the declaration BEGIN starts off the MIB. Imports can be used to pull information from other MIBs, typically those mandated by the MIB-II standard. 可以用行开头为 -- 的方法在 MIB 中加入注释。 在头部用 BEGIN`声明来开始 MIB 的定义。 `Imports 可用来从其他 MIB 中提取信息,通常用它来提取 MIB-II 规范 要求的内容。 The MIB lays out the structure of OID addresses starting from the enterprises value. Here the enterprise value 318 maps to ”apc” (relative address .1.318). Typically then several categories are defined. Here we see 2 categories: products (.1.318.1) and apcmgmt (.1.318.2). Notice that in the curly braces two values are specified, its parent address followed by its address. So the products identifier is parented by the apc identifier which is parented by the enterprises identifier, so on and so forth. This type of categorization and subcategorizing will typically continue on in the header of the MIB for awhile segmenting the available keys into tight subgroupings. By segmenting values out in this way it makes the available keys easier to navigate. MIB 放置从 enterprise 值开始的 OID 地址的结构。在此,enterprise 值是 318, 对应 "apc" (相对地址为 .1.318)。 通常之后会定义几个类别。注意在花括号 间定义的两个值,其父地址后面跟一个它自己的地址。因此产品标识符有 apc 标 识符表示,其父为 enterprise 标识符,以此类推。类别和自类别的类型通常跟 在 MIB 头的后面, 并且把有用的键值分割为子组。 通过分段, 各种值分别被列出, 这样可用的值更容易浏览。 The real meat of the MIB is in the description of object types. Here’s an example of a integer key: MIB 的真正好处在于对象类型的描述。以下是一个整形键值的例子: upsBasicOutputStatus OBJECT-TYPE SYNTAX INTEGER { unknown(1),

onLine(2), onBattery(3), onSmartBoost(4), timedSleeping(5), softwareBypass(6), off(7), rebooting(8), switchedBypass(9), hardwareFailureBypass(10), sleepingUntilPowerReturn(11), onSmartTrim(12) } ACCESS read-only STATUS mandatory DESCRIPTION "The current state of the UPS. If the UPS is unable to determine the state of the UPS this variable is set to unknown(1)." ::= { upsBasicOutput 1 }

Here is defined the upsBasicOutputStatus key with a return type of INTEGER. The returned integer maps to one of 12 different return values as listed. Notice that in the MIB a description of the key is provided. These descriptions can be extremely useful in determining which objects can best provide the data you want, especially if you don’t have MIB documentation supplied by the vendor.

在此定义了一个具有整型返回值的 upsBasicOutputStatus 键值。返回的整型对 应到列出的 12 个不同的数值中的一个。注意在 MIB 中,提供了该键值的描述。 在确定那个对象能够提供最好地你需要的数据时,特别有帮助,特别是当厂商没 有提供 MIB 文档的情况下。 Notice also that the last line of the object type description includes the numeric value 1 with upsBasicOutput as the parent. If we follow this parenting backwards in the MIB we’d find that upsBasicOutput has the value 1 and is parented by upsOutput which has the value 4 and is parented by ups which has a value of 1, which is parented by hardware which has a value of 1, which is parented by products with a value of 1 which is parented by apc with a value of 318, which is parented by enterprises with a value of 1. So, if we put all that mapping together we get a relative address for the key upsBasicOutputStatus of .1.318.1.1.1.4.1.1.0. Remember that the trailing .0 represents the first instance of the key. Applications called MIB Browsers can easily parse a MIB and make navigation much quicker than flipping through the file in vim, but don’t be fooled into thinking it’s difficult without such a tool. 注意对象类型描述的最后一行包括有数值 1, 其父为数字为 1 的 upsBasicOutput。 如果我们按照这个父节点返推,我们会发现 upsBasicOutput 的值为 1,并且其 父节点是值为 4 的 upsOutput, upsOutput 的父节点是值为 1 的 ups,upsOutput 的父节点是值为 1 的 hardware, hardware 的父节点是值为 1 的 products, products 的父节点是值为 318 的 apc,apc 的父节点的是值为 1 的 enterprise。 因此,如果我们我们把所有的对应关系合起来,我们就得 到 .1.319.1.1.1.4.1.1.0 的 upsBasicOutputStatus 键值的相对地址。记住末 尾的.0 表示该键值的第一个实例。 浏览器这样的应用程序可以简化 MIB 解析, MIB 它能够比通过 vim 浏览文件的方式更加快捷地浏览, 不过不要以为没有这样的工 具就非常困难了。 So, whats really important to notice here is that the MIB is really just providing us with a road map of the OIDs available on the agent we wish to get values from. A MIB describes both where to find a value and what it returns. We can still interface with a device without the MIB, it’s just much easier when you get a return of ”Up” instead of ”1”. By leveraging the options of the Net- SNMP CLI tools you can decide just how you wish to return output which will be different if your just using the tool from the command line (where ”Up” is preferable) or if your calling the tool from a script (where ”1” is preferable). 因此,在这里真正需要注意的是,MIB 其实只是提供给我们一张我们想从某个 SNMP 代理中获得的可用 OID 的各种值的地图。一个 MIB 描述了在哪里找某个值、 以及返回结果是什么。我们可以不用 MIB 与设备进行交互,只不过在理获得'Up' 的返回值,要比‘1’的返回值要简单的多。通过利用 Net-SNMP 命令行工具,你 可以决定你希望返回结果的输出样式(这种方式下使用“Up"这样的格式更好), 或者你用脚本调用工具时(这种方式下使用”1“的格式就更好)。

2.3. OID 数据类型 SMI 定义的 OID 返回值的数据类型。 SMI defines a fixed number of datatypes which are returned by OIDs. These datatypes include: SMI 定义了一定数量的 OID 返回的数据类型。这些数据类型包括: Integer Signed 32bit Integer (values between -2147483648 and 2147483647). 有符 号 32 位整数(值范围: -2147483648 - +2147483648) Integer32 Same as Integer. 与 Integer 相同。 UInteger32 Unsigned 32bit Integer (values between 0 and 4294967295). 无符号 32 位 整数(值范围:0-4294967295). Octet String Arbitrary binary or textual data, typically limited to 255 characters in length. 任意二进制或文本数据,通常长度限制在 255 个字符内。 Object Identifier An OID. 一个 OID。 Bit String Represents an enumeration of named bits. This is an unsigned datatype. 表示取名的位的枚举。这是一个无符号的数据类型。 IpAddress An IP address. 一个 IP 地址。 Counter32 Represents a non-negative integer which monotonically increases until it reaches a maximum value of 32bits-1 (4294967295 dec), when it wraps around and starts increasing again from zero. 表示一个非负的整数(可递增到 32 位最大值-1),然后恢复并从 0 开始递增。 Counter64 Same as Counter32 but has a maximum value of 64bits-1. 与 Counter32 相 同,最大值为 64 位的最大值-1。 Gauge32 Represents an unsigned integer, which may increase or decrease, but shall never exceed a maximum value. 表示无符号整数,可增加或减少,但是不超过 最大值。 TimeTicks Represents an unsigned integer which represents the time, modulo 2?32 (4294967296 dec), in hundredths of a second between two epochs. 表示代 表数据的一个无符号整数,2^32 取模(4294967296),两个值之间为百分之一 秒。 Opaque Provided solely for backward-compatibility, its no longer used. 提供向 下兼容,不再使用的数据类型

NsapAddress Represents an OSI address as a variable-length OCTET STRING. 表示一个 用变长八进制字符窗表示的 OSI 地址。 Net-SNMP tools will report the datatype when returning an OID unless you otherwise disregard it. As an example of that you’ll see: Net-SNMP 工具在返回一个 OID 时会包括其数据类型,除非你不想要他。以下是 一个例子: SNMPv2-MIB::sysContact.0 = STRING: Ben Rockwood IF-MIB::ifPhysAddress.1 = STRING: 0:c0:b7:63:ca:4c SNMPv2-MIB::sysUpTime.0 = Timeticks: (47372422) 5 days, 11:35:24.22 IF-MIB::ifAdminStatus.1 = INTEGER: up(1) SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.318.1.3.7 RFC1213-MIB::atPhysAddress.1.1.10.10.1.1 = Hex-STRING: 00 50 73 28 47 A0 RFC1213-MIB::atNetAddress.1.1.10.10.1.1 = Network Address: 0A:0A:01:01 IF-MIB::ifSpeed.1 = Gauge32: 10000000 SNMPv2-MIB::snmpInPkts.0 = Counter32: 316 SNMPv2-MIB::snmpOutPkts.0 = Counter32: 314

This is a fairly typical spread of datatypes returned by Net-SNMP tools. Notice that some values are being automatically interpreted by Net-SNMP, such as the sysUpTime and ifAdminStatus. The MIB was used when these values were returned and Net-SNMP was nice enough to find the return value in the MIB and give us the textual representation of the value. 这是一个相当典型的由 Net-SNMP 工具返回的数据类型表单。注意有些值已经由 Net-SNMP 自动解释了,比如 sysUpTime 和 ifAdminStatus。这些值返回时使用到 MIB,Net-SNMP 会在 MIBzhong 找到返回值,并且为我们提供該值的文本表示。


相关文章:
SNMP++中文文档
ObjectSNMP SNMP数据采集... 9页 免费S​N​M​P​+​+​中​...SNMP++的本质 简单易用的 SNMP++ 面向对象的 SNMP 编程应该是简单易用的。...
SNMP++中文文档
ObjectSNMP SNMP数据采集... 9页 免费 喜欢此文档的还喜欢 SNMP++深入学习 29...(SNMP)的 API 的 SNMP++ 用 C++构建的,处理简单网罗管理协议(SNMP)的 API ...
Java进行SNMP通信的指南SnmpProgrammingGuideViaJava
snmp 实现的原理以及用J... 3页 免费 java1054 基于Java和SNM... 8页 免费 ObjectSNMP SNMP数据采集... 9页 免费 Java串口通信编程指南 10页 1下载券 基于...
基于SNMP协议的网络管理系统(数据采集及分析)
基于SNMP协议的网络管理系统(数据采集及分析)_计算机软件及应用_IT/计算机_专业资料...网络管理系统是指规划、监督、控制网络资源的使用和网络的各种活动,以 使网络的...
基于SNMP协议的简单网络流量监控管理系统的设计
在其系统 中,使用 了SNMP来采集数据。 在实际应用中, 管理人员可根据实际流量...3.1 初始化ObjectSNMP API 本地初始化: SNMPFactory.init(SNMPFactory.Mode_...
用SNMP协议实现系统监控
的客户端软件应该具备两个功能:采集 SNMP 数据以及...各种系统监测手段在企业中部署和实现方法: a.snmp ...而且对于这个设备的每个值都采用唯一的 Object ...
基于SNMP协议的场监系统的数据采集与分析
基于SNMP 协议的场监系统的数据采集与分析 【摘要】由于采用 SNMP 协议实现数据采集具有无须更改系统软件且无须 停机的优势, 所以这一协议目前在场面监视雷达自动化...
Linux系统SNMP采集OID
Linux系统SNMP采集OID_计算机软件及应用_IT/计算机_专业资料。linux下cpu、内存、磁盘、网卡的snmp oidLinux 系统 SNMP 采集 OID 一、CPU 1. Cpu index:.1.3....
日志采集方式 SNMP TRAP 和 Syslog 的区别
人们通常使用 SNMP Trap 机制 进行日志数据采集。生成 Trap 消息的事件(如系统...通过对 SNMP 数据报文中 Trap 字段值的解释就可以获得一条网络设备的重要信息,...
ObjectSNMPHelp
ObjectSNMP 常用MIB数据对... 10页 免费 ObjectSNMP网关和自动发现... 5页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进...
更多相关标签:
snmp采集哪些数据 | snmp数据采集 | snmp 秒级数据采集 | 数据采集器如何使用 | 数据采集卡如何使用 | 八爪鱼数据采集器使用 | 数据采集卡的使用 | 数据采集器使用说明 |