如何增加私有MIB

By | 08月08日
Advertisement

我这次是使用net-snmp软件开发包尝试开发SNMP客户端代理。Net-snmp是个开源软件,基于C语言开发,便于移植,用于开发snmp代理,但也提供管理端的查询工具。

首先得安装net-snmp这个软件。从网上可以下载相关的软件包,我在这里使用的是5.4.1版本。安装比较简单,先是要配置,然后编译,最后安装。也就是常规的configure, make ,make install三个步骤就可成功编译安装源代码。

运行net-snmp之前先要进行环境设置,否则无法查询到结果。环境配置文件由snmpconf命令交互生成。运行snmpconf后,提示有三个配置文件:snmpd.conf,snmptraps.conf,snmp.conf。其中,snmpd.conf用来配置代理和管理端通信时的参数,只需设置两个参数就可正常运行程序了,一是community name,有只读rocommunity和读写rwcommunity之分,相当于访问账号,这里设rocommunity为public;另一个是访问端口,设为snmp协议默认的161端口。 Snmp.conf是与mib库设置相关的配置文件。Snmptraps.conf用来设置代理陷阱。生成的配置文件snmpd.conf按照提示拷贝到/usr/local/share/snmp目录下。

当环境配置好了以后,运行snmpd,即snmp代理进程,就可以使用管理工具查询其中的信息了。Snmp的查询工具比较多,可以随便使用如snmpget,snmptranslate等来测试一下能否查询到代理里面mib的节点的值或者OID号。下面介绍一下什么是MIB。

MIB是Management Information Base的缩写,中文名字叫“管理信息库”,它是网络管理数据的标准,在这个标准里规定了网络代理设备必须保存的数据项目,数据类型,以及允许在每个数据项目中的操作。通过对这些数据项目的存取访问,就可以得到该网关的所有统计内容。再通过对多个网关统计内容的综合分析即可实现基本的网络管理。MIB的主要用途是让SNMP通过查讯代理MIB中相应对象的值,实现对对网络设备状态的监视。

MIB库简单的说就是一个树状的数据库,通过客户端软件,可以直接对树的节点进行查询,修改,增加,删除的操作。而我今天要说的就是如何在客户端代理里面,自定义MIB,也就是增加自己私有的MIB。

第一步,要写自己的MIB文件,定义节点的OID,数据类型,访问权限,值,描述信息等。举个例子来说明。下面是RFC1212中关键组件:

IMPORTS

ObjectName

FROM RFC1155-SMI

DisplayString

FROM RFC1158-MIB;

OBJECT-TYPE MACRO ::=

BEGIN

TYPE NOTATION ::=

-- must conform to

-- RFC1155's ObjectSyntax

"SYNTAX" type(ObjectSyntax)

"ACCESS" Access

"STATUS" Status

DescrPart

ReferPart

IndexPart

DefValPart

VALUE NOTATION ::= value (VALUE ObjectName)

Access ::= "read-only"

| "read-write"

| "write-only"

| "not-accessible"

Status ::= "mandatory"

| "optional"

| "obsolete"

| "deprecated"

DescrPart ::=

"DESCRIPTION" value (description DisplayString)

| empty

ReferPart ::=

"REFERENCE" value (reference DisplayString)

| empty

IndexPart ::=

"INDEX" "{" IndexTypes "}" | empty

IndexTypes ::=

IndexType | IndexTypes "," IndexType

IndexType ::=

-- if indexobject, use the SYNTAX

-- value of the correspondent

-- OBJECT-TYPE invocation

value (indexobject ObjectName)

-- otherwise use named SMI type

-- must conform to IndexSyntax below

| type (indextype)

DefValPart ::=

"DEFVAL" "{" value (defvalue ObjectSyntax) "}"

| empty

END

SYNTAX:对象类型的抽象语法。

ACCESS:定义通过SNMP或其他协议访问对象实例的方法。访问子句规定该对象类型所需要的最低级别的支持。在具体实现中可以增加或限制访问,选项有只读、读写、只写和不可访问。在最后一种情况下,不能读取对象的取值,也不能设置对象的取值。

STATUS:指明该对象所需要的实现支持。支持可能是强制的或者可选的,对象也可以规定为替代的。替代对象必须被支持,但很有可能从下一个版本的MIB中被删除。最后,状态可以是废除的,表示管理系统不再实现该对象。

DescrPart:对象类型语义的文本描述。

ReferPart:在其他MIB模块中定义的文本交叉索引。

Indexpart:用于定义表。该子句只在对象类型符合概念行时出现。

DefValPart:定义可接受的默认值,代理在创建实例时使用。

VALUE NOTATION:规定用于通过SNMP访问该对象时使用的名称。

根据MIB文件的规格,写自己的MIB文件,我这里写的是一个叫MyMib.txt的文件,内容如下:

MyMib DEFINITIONS::=BEGIN

IMPORTS

enterprises,OBJECT-TYPE,Integer32,TimeTicks

FROM SNMPv2-SMI

TEXTUAL-CONVENTION, DisplayString FROM SNMPv2-TC;

internet OBJECT IDENTIFIER ::= { iso org(3) dod(6) 1 }

private OBJECT IDENTIFIER ::= { internet 4 }

enterprises OBJECT IDENTIFIER ::= { private 1 }

foxmail OBJECT IDENTIFIER::={enterprises 310}

SecondCounter OBJECT-TYPE

SYNTAX Integer32

ACCESS read-write

STATUS mandatory

DESCRIPTION "This is a one minute counter from year 1970.1.1.0:0 to now"

::={foxmail 1}

WeekTime OBJECT-TYPE

SYNTAX TimeTicks

ACCESS read-only

STATUS mandatory

DESCRIPTION "Recording taday's time and the day sorts in the week"

::={foxmail 2}

ExampleTable OBJECT-TYPE

SYNTAX SEQUENCE OF ExampleEntry

MAX-ACCESS not-accessible

STATUS current

DESCRIPTION

"A list of interface entries. The number of entries is

given by the value of ExampleNumber."

::= { foxmail 3 }

ExampleEntry OBJECT-TYPE

SYNTAX ExampleEntry

MAX-ACCESS not-accessible

STATUS current

DESCRIPTION

"An entry containing management information applicable to a

particular interface."

INDEX { UserIndex }

::= { ExampleTable 1 }

ExampleEntry ::=

SEQUENCE {

UserIndex InterfaceIndex,

UserStatus DisplayString,

CheckTime TimeTicks,

MonSet Integer32

}

InterfaceIndex ::= TEXTUAL-CONVENTION

DISPLAY-HINT "d"

STATUS current

DESCRIPTION

"A unique value, greater than zero, for each interface or

interface sub-layer in the managed system. It is

recommended that values are assigned contiguously starting

from 1. The value for each interface sub-layer must remain

constant at least from one re-initialization of the entity's

network management system to the next re-initialization."

SYNTAX Integer32 (1..2147483647)

UserIndex OBJECT-TYPE

SYNTAX InterfaceIndex

MAX-ACCESS read-only

STATUS current

DESCRIPTION

"A unique value, greater than zero, for each interface. It

is recommended that values are assigned contiguously

starting from 1. The value for each interface sub-layer

must remain constant at least from one re-initialization of

the entity's network management system to the next re-

initialization."

::= { ExampleEntry 1 }

UserStatus OBJECT-TYPE

SYNTAX DisplayString

MAX-ACCESS read-only

STATUS current

DESCRIPTION

"machine status ."

::= { ExampleEntry 2 }

CheckTime OBJECT-TYPE

SYNTAX TimeTicks

MAX-ACCESS read-only

STATUS current

DESCRIPTION

"machine status checking time."

::= { ExampleEntry 3 }

MonSet OBJECT-TYPE

SYNTAX Integer32

MAX-ACCESS read-write

STATUS current

DESCRIPTION

"An example to use set function."

::={ ExampleEntry 4}

END

这个文件在enterprises下定义了一个叫foxmail的节点,oid为1.3.6.1.4.1.310,foxmail下又定义了若干的节点。记的文件的名字一定要和文件第一行DEFINITIONS前的名字对应。

接下来,把MyMib.txt拷贝到net-snmp的安装目录下,在我机器上是/usr/local/share/snmp/mibs下面。然后要在配置文件snmp.conf里面,把MyMib库加进去。运行snmpconf,就可以对snmp.conf进行设置,具体代码为+MyMib。设置完成后会生成snmp.conf,把这个文件拷贝到/usr/local/share/snmp目录下,接下来,运行mib2c SecondCounter(SecondCounter是MyMib.txt里面的一个结点名字,要添加哪个结点,就在这里写哪个结点名字)。运行完以后,会生成两个文件,SecondCounter.c和SecondCounter.h,这个C文件里就定义了接点的OID,以及各个结点的响应函数,可以根据自己的需求在各个响应函数里面添加对应事件的响应(增加、删除、查询节点的值等)。把这两个文件拷贝到net-snmp的安装包文件下,/opt/net-snmp-5.4.1/agent/mibgroup目录下,然后在运行/opt/net-snmp-5.4.1下的configure命令并且添加参数—with-mib-modules=SecondCounter,进行MIB库文件的配置。配置完毕,在/opt/net-snmp-5.4.1下重新make就完成了对新MIB的添加。

Make成功以后,运行/opt/net-snmp-5.4.1/agent目录下的snmpd,然后测试一下添加是否成功。用smmptranslate命令查看我们添加的SecondCounter节点的OID号。

命令为Snmptranslate –IR –On SecondCounter,按下回车后,打印出.1.3.6.1.4.1.310.1,这就是我们定义的SecondCounter的OID号,说明我们的私有MIB在MIB库里添加成功。同样也可以查到其他节点存在,那么,就完成了私有MIB的添加。至于节点的值的响应,要根据具体的需求,写对应的函数。如果是要查询交换机里的信息,就要通过响应函数来调用client_switchcall函数,发送对应的消息,来获取需要的值。

Similar Posts:

  • SNMP私有MIB的一些问题~

    1.用ASN.1创建的snmp私有MIB是怎么获取设备上的相关信息的? 2.怎么写出一个私有MIB?(网上都是直接给出一段ASN.1,没有相应的解释)TAT 求大神们指教! --cut-- Lex_Li在2015-12-02 18:36:21回答到: 因果倒置了.是先有设备要暴露相关信息,才去写一个私有的MIB来告诉管理者这个信息要怎么取怎么管.MIB文件只是一个说明,真正获取信息还是要通过SNMP协议发包,或者使用相应的工具去发包. 至于怎么写一个私有MIB,找个IETF标准的MIB文件或者C

  • UISegmentedControl: 增加代理方法

    UISegmentedControl 没有代理方法可以设置,不能在选择之前做预处理.为此,重写了 UISegmentedControl 创建文件 RFSegmentedControl,继承自 UISegmentedControl,并添加代理方法 RFSegmentedControlDelegate 两个代理方法,分别为 shouldSelected 和 didSelected,如名字,表示是否可以选择和已经选择的意思. 增加 delegate 的变量 #import <UIKit/UIKit.h

  • 定制AjaxControlToolkit:给CalendarExtender增加清除功能

    其实像AutoCompleteExtender之类的其它扩展也是与此类似,这里只是用CalendarExtender举例子了. AjaxControlToolkit确实是个好东西,但是我实在不明白设计者是出于什么目的一定要把它捆在某一个文本框上,使得这组控件变得很难用.对日期控件来说,可能很多人用过梅花雨做的那个日期控件,那个控件确实很好用,而且其setday(this)这样的调用方式也非常简单明了,但是它存在许多问题(跟主题无关,不再细说),为了说服我的同事转用CalendarExtender

  • Cacti应用示例:用Cisco私有OID监测6509交换机风扇状态

    如上图所未, 如果显示的数值为1,则代表该组风扇处于正常工作状态. 由于思科6509配置了三组风扇,因此在添加图形模板时,将三组风扇的状态值在同一张图显示. 实现过程简述: 1.查找Cisco的私有MIB文件CISCO-ENVMON-MIB中关于风扇状态的监测OID 2.在命令行下使用net-snmp工具测试私有OID(1.3.6.1.4.1.9.9.13.1.4)能否从思科6509交换机上采集回风扇状态值 3.在Cacti中添加数据模板和图形模板 4.将图形模板应用到目标设备思科6509交换机

  • lwip-SNMP移植

    lwip中的SNMP为1.0版本.本人用的lwip1.3版本. 主要包括6个文件 1.asn1_dec.c-----snmp包解析处理 2.asn1_enc.c-----snmp包组合处理 3.mib2.c -----snmp中的mib树 4.mib_structs.c -----sanmp中对mib树的操作(包括查找,添加,删除等 ) 5.msg_in.c ----snmp接收包的处理 6.msg_out.c ---snmp发送包的处理 设置步骤 (1) lwipopts.h: #define

  • SNMP管理框架及其在Cisco路由器和交换机上的实现

    SNMP管理框架及其在Cisco路由器上的实现 SNMP管理框架包含有四个组成部分: SNMP管理者 SNMP代理 一 个用于在SNMP实体间传输管理信息的管理协议 MIB库(Management Information Base,管理信息库) SNMP 管理者 是一个利用SNMP协议对网络节点进行控制和监视的系统.其中网络环境中最常见的SNMP管理者被称为网络管理系统(NMS Network ManagementSystem),网络管理系统既可以指一台专门用来进行网络管理的服务器,也可以指某个

  • 高星级酒店网络整体解决方案

    第一章 前言 随着宽带的普及和商务客人对宽带需求的增加,酒店宽带业务在近几年飞速发展,特别是在京.沪.穗等经济发达.商务客人往来频繁的大城市,可供客人使用的宽带网络基本上已经成为星级酒店拥有的标配设施.当前酒店网络接入与使用现状 1. 当您的酒店网络系统突然断网而感到触手无措时,是否想到需要一套能协助您解决问题的系统或工具呢? 2. 当您的酒店因不能给客人提供即插即用的使用方式时,是否想到需要一个智能化的接入网关解决您的问题呢? 3. 关键时刻,给客户的邮件没有发出,客人抱怨怎么不能给我提供邮件

  • snmp管理框架及其在cisco路由器上的实现

    摘要 本文描述了SNMP协议,MIB库和它们在Cisco路由器上的实现以及Cisco路由器对SNMPv3和SNMP over IPv6的支持状况. 了解SNMP管理框架 SNMP(Simple Network Management Protocol,简单网络管理协议)是一个应用层协议,提供了SNMP管理者和SNMP代理间报文格式的消息通信.它规定了在网络环境中对设备进行监视和管理的标准化管理框架,通信的公共语言和相对应的安全控制机制. SNMP管理框架包含有四个组成部分: SNMP管理者 SNM

  • 黑马程序员-OC加强学习日记-分类、协议、block类型

    ------- ios培训. android培训.java培训.期待与您交流! ---------- 一.分类 Gategroy 1.创建一个分类 @interface 类名 (分类名) @end @implementation 类名 (分类名) @end 2.特点:(1)扩展已有类的功能 (2)分类中可以访问原有类的成员变量(定义在头文件中的成员变量) 3.语法步骤:(1)创建一个分类 (2)在分类中增加新方法的声明和实现 4.注意点:(1)分类不可以为原有类增加定义成员变量, @proper

  • 提炼游戏引擎系列:第二次迭代(下)

    前言 本文为引擎提炼第二次迭代的下篇,将会完成引擎中动画.集合和事件管理相关类的重构. 本文目的 1.提高引擎的通用性,完善引擎框架. 2.对应修改炸弹人游戏. 本文主要内容 修改动画 回顾与梳理 修改Hash和Collection 修改EventManager 整体重构 本文最终领域模型 高层划分 总结 本文源码下载 参考资料 修改动画 2D动画介绍 实现原理 一组图片(或一个图的不同位置)在同一位置以一定的时间间隔显示,就形成了动画. 精灵图片 我们可以将精灵的动画序列图合为一张大的图片,称

Tags: