MIB snmp

1  MIB基础知识

MIB(Management Information Base,管理信息库)是MO(Managed Object管理对象)定义的集合。MIB文件是按照ASN.1定义的文本文件。

每个管理对象都对应一个节点,并且用OID(Object Identifier)来标识;数据管理对象对应叶子节点;所有的管理对象形成了一棵管理树。

1.1 基本概念

对象标识:对象标识是一种数据类型,它指明一种授权命名的对象。表示为一个整数序列,以点分隔。

MIB树:表示对象标识的整数构成一个树型结构,类似于DNS和文件系统。

对象标识从顶部开始,顶部没有标识,以root表示。所有的MIB变量都从1.3.6.1.2.1这个标识开始。树上的每个节点还有文字名,例如:1.3.6.1.2.1就和iso.org.dod.internet.memt.mib对应。

图1 管理信息库的对象命名举例

1.2  MIB分类

MIB依据数据的通用性可以分为:

(1)标准MIB:rfc1213, rfc1471 , rfc1724, rfc2618等等

注: 通用性MIB rfc1213习惯称为MIB-II

(2)自定义MIB:当标准MIB信息不足以描述厂商设备,需要自定义MIB,但首先要向IANA组织申请编号。

1.3 MIB管理对象的基本属性

管理对象的四个基本属性如下:

(1)对象类型(Object Type):定义了一个特定对象的名字,例如sysUpTime。这个名字只是一个标示符。MIB对象既可以用这个标示符来表示,也可以用相应的MIB号码来表示。例如定义internet OBJECT IDENTIFIER ::= { iso org(3) dod(6) 1 }

那么既可以用internet也可以用字串 .1.3.6.1来表示这个对象。

(2)语法(Syntax) :指定了数据类型,例如整数、8位组串数字(字符串;范围为0至255)、对象标识符(预先定义的数据类型别名)或NULL。NULL是留待的后使用的空位。

(3)访问(Access):表明了这个特定对象的访问级别。合法的值有:只读、读写、只写和不可存取。

(4)状态(Status):定义了这个对象的实现需要:必备的(被管理节点必须实现该对象);可选的(被管理对象可能实现该对象):或者已废弃的(被管理设备不需要再实现该对象)

1.4  MIB两种对象类型

(1)标量(Type-Specific Objects):

sysDescr OBJECT-TYPE

SYNTAX DisplayString (SIZE(0..255))::= {system 1}

OID: mib-2.system.1.0

(2)表量(Columnar Objects):

OID:

mib-2.interface.ifTable.ifEntry.ifDescr.2

mib-2.interface.ifTable.ifEntry.ifDescr.6

mib-2.interface.ifTable.ifEntry.ifType.2

mib-2.interface.ifTable.ifEntry.ifType.6

2  自定义MIB

自定义MIB包含的内容有:模块级别信息、对象定义(OBJECT TYPE,包括标量对象和表对象)、陷阱定义(TRAP TYPE)。

第1行是MIB开始

第2-7行引入外部定义

第8-13行是模块信息定义

第19-28行是MO定义

第30-36行是TRAP定义

第37行是MIB结束

2.1  常用对象类型

v1中的

(1)简单类型:Integer、Octet String、Object Identifier、Null

(2)应用类型:IpAddress、Counter、Gauge、TimeTicks、Opaque

v2中的

(1)简单类型:Integer32、OctetString、Object Identifier、Null

(2)应用类型:IpAddress、Counter32、Counter64、Gauge32、Unsigned32、TimeTicks、Opaque、BIT STRING

2.2  自定义MIB基本原则

(1)优先采用标准MIB:如果确实无法满足要求才考虑自定义MIB

(2)采用最新的SNMPV2-SMI来定义MIB:使用最新的SNMPv2定义MIB可以使得对MIB的描述更详尽,可用的类型也更丰富。

(3)层次清晰,定义时顺序合理

— 先定义根节点。

— 在定义对象前,如有自定义类型,应当先书写自定义类型的定义。

— 先定义标量对象,再表量对象。

(4)符合惯例,以标准MIB为参考

3 理解和掌握ASN.1句法

3.1  对象标识符 类型(OBJECT IDENTIFIER)

在ASN.1中,对象标识符 类型 描述对象的抽象信息,MIB树中的每一个标号是用对象标识符描述的。由于树的各个分支是用数值表示的,所以实际上对象标识符是一个整数数值的序列。它用OBJECT IDENTIFIER来声明,如:

myBranch OBJECT IDENTIFIER ::= { parentBranch 10 }

其中myBranch是一个子树支,它定义在parentBranch树支下,“10”是子树myBranch在父树支parentBranch下的一个唯一对象标识符,即通常所说的OID。在parentBranch树支下,可以定义多个子树支,但子树支的名字和数字(如上的10)不能重复,即必须是唯一的。

3.2  标量(叶子)对象标识符——简单变量

在一个树支下,读者可以定义多个子树,也可以定义被管理资源的管理对象,其定义的句法如下:

(objectname) OBJECT-TYPE

SYNTAX (syntax)

ACCESS (access)

STATUS (status)

DESCRIPTION (description)

::= { (parent) (number) }

sysContact OBJECT-TYPE

SYNTAX  DisplayString (SIZE (0..255))

ACCESS  read-write

STATUS  mandatory

DESCRIPTION

"The textual identification of the contact person

for this managed node, together with information

on how to contact this person."

::= { system 4 }

以上的各部分解释如下:

(1)(objectname). 这是被对象的名字,ASN.1句法要求所有对象的名字必须以小写字母开头,而且该名字在MIB中必须是唯一的。

(2)OBJECT-TYPE.这是一个每一个叶子对象的所必须的关键字。

(3)SYNTAX.被管对象类型的关键字,说明随后跟着的是一个类型。

(4)(syntax).被管对象的类型,ASN.1句法要求所有的对象类型必须以大写字母开头,其中已预定义了的类型有Counter、Gauge、DisplayString、INTEGER等等,请参阅“3.对象语法定义”及“5.ASN.1的派生类型”。

(5)ACCESS.被管对象的访问方式的关键字。在SNMP第二版中为MAX-ACCESS关键字。

(6)(access).被管对象的访问方式,可为如下列举值中之一:read-only、read-write、 no-accessible,SNMP第2版中又新增了read-create。

(7)STATUS.被管对象的状态的关键字。

(8)(status).可取的值为:mandatory 、optional、obsolete、deprecate(SNMP第1版中),current、obsolete、deprecate(SNMP第2版)。

其中:mandatory为该对象的状态是必备的

optional为该对象的状态是可选的

obsolete为该对象的状态是不再使用

deprecate使用该值使得MIB的某些部分标记为过时,被标记为“废弃”的对象将从现行版本中删除,并在新的MIB版本中标记为“过时”。

current为该对象的状态是当前可用的。

(7)DESCRIPTION.对被管对象的功能、特征等等进行描述的关键字。

(8)(description).被管对象的文本描述。须用双引号把其文本说明括起来,有时由于用MIB编译器编译结果太大时,可以把文本说明删除,即只保留一个空的双引号。

(9)(parent).包含此叶子对象的树支,即叶子对象的父亲必须是用“OBJECT IDENTIFIER”声明。

(10)(number).在此父树支下的第几个叶子对象,这个数字在此父树支下必须是唯一的。一般number都是从取1开始的。例如:“::={ myObject 22 }”,则在myObject树支下22必须是唯一的,否则在用MIB编译器(如pSOS所提供的MIB编译器)进行编译时会提示有错。

除此之外,还有一些关键字:UNITS、INDEX、REFERENCE、DEFVAL等等,分别代表被管对象的单位、索引、参考、缺省值。这些关键字都并不是很重要,有兴趣的读者可参阅RFC1155的说明。值得注意的是INDEX关键字在表对象定义中必须存在的,否则表内的对象不能使用。

3.3  表类型

SNMP表是一个特殊类型的声明,表内声明的对象称为列对象,声明如下:

(tablename) OBJECT-TYPE

SYNTAX SEQUENCE OF (tabletype)

ACCESS not-accessible

STATUS  mandatory

DESCRIPTION (description)

::= { (parent) (number) }

(entryname) OBJECT-TYPE

SYNTAX (tabletype)

ACCESS not-accessible

STATUS  mandatory

DESCRIPTION (description)

::= { (tablename) 1 }

(tabletype) ::= SEQUENCE {

(column1) (column1type),

(column2) (column2type),

(columnN) (columnNtype) }

读者也许注意到(tablename)和(entryname)中的ACCESS为not-accessible,这是因为表和行对象没有叶子对象,因此不能被SNMP访问。ASN.1句法中关于定义一个表的规则如下:

(1) 在表名(tablename)的命名中,必须要有一个“Table”关键字,例如定义一 个表对象“myTable”

(2) 同样,在表对象下面的表目(entryname)也须有一个“Entry”关键字,例如 “myEntry”。

(3) (column1)是表的列对象,(column1type)是此列对象的类型 为了加深理解,举个

子如下:

myTable  OBJECT-TYPE

SYNTAX  SEQUENCE OF MyEntry

ACCESS  not-accessible

STATUS  mandatory

DESCRIPTION    " 这是一个表名为myTable的表对象. "  ::={ myParent 1 }

myEntry  OBJECT-TYPE

SYNTAX  MyEntry

ACCESS  not-accessible

STATUS  mandatory

DESCRIPTION

" 这是一个表的表目,其中INDEX关键字必须存在,它的索引值为列对象中的第一个对象"

INDEX  {myIndex }

::={ myTable 1 }

MyEntry::=

SEQUENCE  {

myIndex  INTEGER,

myColumn1  INTEGER,

myColumn2  OCTET STRING,      }

上表中有三个列对象myIndex、myColumn1、myColumn2

源码如下:

XXX-TEST-MIB DEFINITIONS ::= BEGIN

IMPORTS

enterprises

FROM RFC1155-SMI

Integer32

FROM SNMPv2-SMI

DisplayString

FROM SNMPv2-TC;

xxx OBJECT IDENTIFIER ::= {enterprises 22566}

zkClassInfoTable OBJECT IDENTIFIER ::= {xxx 1}

zkClassInfoTable2 OBJECT IDENTIFIER ::= {xxx 2}

zkClassInfoTable OBJECT-TYPE

SYNTAX   SEQUENCE OF ZkClassInfoEntry

MAX-ACCESS not-accessible

STATUS  current

DESCRIPTION

"

This is test table.

"

::= {xxx 1}

zkClassInfoEntry OBJECT-TYPE

SYNTAX    ZkClassInfoEntry

MAX-ACCESS  not-accessible

STATUS  current

DESCRIPTION

"

This is teat entry.

"

INDEX  {zkClassInfoIndex}

::= {zkClassInfoTable 1}

ZkClassInfoEntry ::= SEQUENCE {

zkClassInfoIndex  Integer32,

zkClassInfoSex Integer32,

zkClassInfoAge Integer32,

zkCLassInfoName  DisplayString,

zkClassInfoAddress  DisplayString

}

zkClassInfoIndex OBJECT-TYPE

SYNTAX  Integer32

MAX-ACCESS read-write

STATUS current

DESCRIPTION

"

"

::= {zkClassInfoEntry 1}

zkClassInfoSex OBJECT-TYPE

SYNTAX  Integer32  {

man(1),

woman(2)

}

MAX-ACCESS read-write

STATUS current

DESCRIPTION

"

"

::= {zkClassInfoEntry 2}

zkClassInfoAge OBJECT-TYPE

SYNTAX  Integer32

MAX-ACCESS read-write

STATUS current

DESCRIPTION

"

"

::= {zkClassInfoEntry 3}

zkCLassInfoName OBJECT-TYPE

SYNTAX  DisplayString

MAX-ACCESS read-write

STATUS current

DESCRIPTION

"

"

::= {zkClassInfoEntry 4}

zkClassInfoAddress OBJECT-TYPE

SYNTAX  DisplayString

MAX-ACCESS read-write

STATUS current

DESCRIPTION

"

"

::= {zkClassInfoEntry 5}

zkClassInfoTable2 OBJECT-TYPE

SYNTAX   SEQUENCE OF ZkClassInfoEntry2

MAX-ACCESS not-accessible

STATUS  current

DESCRIPTION

"

This is test table.

"

::= {xxx 2}

zkClassInfoEntry2 OBJECT-TYPE

SYNTAX    ZkClassInfoEntry2

MAX-ACCESS  not-accessible

STATUS  current

DESCRIPTION

"

This is teat entry.

"

INDEX  {zkClassInfoIndex}

::= {zkClassInfoTable2 1}

ZkClassInfoEntry2 ::= SEQUENCE {

zkClassInfoSex2 Integer32,

zkClassInfoAge2 Integer32,

zkCLassInfoName2  DisplayString,

zkClassInfoAddress2  DisplayString

}

zkClassInfoSex2 OBJECT-TYPE

SYNTAX  Integer32

MAX-ACCESS read-write

STATUS current

DESCRIPTION

"

"

::= {zkClassInfoEntry2 1}

END

XXX-TEST_MIB DEFINITIONS ::= BEGIN

IMPORTS

enterprises

FROM RFC1155-SMI

Integer32

FROM SNMPv2-SMI

DisplayString

FROM SNMPv2-TC;

xxx OBJECT IDENTIFIER ::= {enterprises 40256}

zkClassInfoTable OBJECT IDENTIFIER ::= {xxx 1}

zkClassInfoTable2 OBJECT IDENTIFIER ::= {xxx 2}

zkClassInfoTable OBJECT-TYPE

SYNTAX   SEQUENCE OF ZkClassInfoEntry

MAX-ACCESS not-accessible

STATUS  current

DESCRIPTION

"

This is test table.

"

::= {xxx 1}

zkClassInfoEntry OBJECT-TYPE

SYNTAX    ZkClassInfoEntry

MAX-ACCESS  not-accessible

STATUS  current

DESCRIPTION

"

This is teat entry.

"

INDEX  {zkClassInfoIndex}

::= {zkClassInfoTable 1}

ZkClassInfoEntry ::= SEQUENCE {

zkClassInfoIndex  Integer32,

zkClassInfoSex Integer32,

zkClassInfoAge Integer32,

zkCLassInfoName  DisplayString,

zkClassInfoAddress  DisplayString

}

zkClassInfoIndex OBJECT-TYPE

SYNTAX  Integer32

MAX-ACCESS read-write

STATUS current

DESCRIPTION

"

"

::= {zkClassInfoEntry 1}

zkClassInfoSex OBJECT-TYPE

SYNTAX  Integer32  {

man(1),

woman(2)

}

MAX-ACCESS read-write

STATUS current

DESCRIPTION

"

"

::= {zkClassInfoEntry 2}

zkClassInfoAge OBJECT-TYPE

SYNTAX  Integer32

MAX-ACCESS read-write

STATUS current

DESCRIPTION

"

"

::= {zkClassInfoEntry 3}

zkCLassInfoName OBJECT-TYPE

SYNTAX  DisplayString

MAX-ACCESS read-write

STATUS current

DESCRIPTION

"

"

::= {zkClassInfoEntry 4}

zkClassInfoAddress OBJECT-TYPE

SYNTAX  DisplayString

MAX-ACCESS read-write

STATUS current

DESCRIPTION

"

"

::= {zkClassInfoEntry 5}

zkClassInfoTable2 OBJECT-TYPE

SYNTAX   SEQUENCE OF ZkClassInfoEntry2

MAX-ACCESS not-accessible

STATUS  current

DESCRIPTION

"

This is test table.

"

::= {xxx 2}

zkClassInfoEntry2 OBJECT-TYPE

SYNTAX    ZkClassInfoEntry2

MAX-ACCESS  not-accessible

STATUS  current

DESCRIPTION

"

This is teat entry.

"

INDEX  {zkClassInfoIndex}

::= {zkClassInfoTable2 1}

ZkClassInfoEntry2 ::= SEQUENCE {

zkClassInfoSex2 Integer32,

zkClassInfoAge2 Integer32,

zkCLassInfoName2  DisplayString,

zkClassInfoAddress2  DisplayString

}

zkClassInfoSex2 OBJECT-TYPE

SYNTAX  Integer32

MAX-ACCESS read-write

STATUS current

DESCRIPTION

"

"

::= {zkClassInfoEntry2 1}

END

时间: 2024-10-15 17:13:29

MIB snmp的相关文章

snmp基础知识

1; 全称为simple network management protocol,中文为简单网络管理协议. 2; snmp协议的版本; 1; snmp v1(版本1); 有三个community认证, 分别是read-only( 只能获取信息 ).read-write( 能获取信息,也能发送控制指令 ).trap( agent主动联机nms ); 2; snmp v2(版本2); 功能增强,但仍基于community的认证; 因此又称2c版本; 3; snmp v3(版本3); 这个版本认证加强

SNMP协议总结

说明:本文仅供学习交流,转载请标明出处,欢迎转载! SNMP(Simple Network Management Protocal),简单网络管理协议,其前身是SGMP协议(简单网关监控协议),该协议的作用是对网络上的设备进行监视管理,是一种应用层协议. 基于TCP/IP的网络管理包括两个部分:网络管理器(也叫管理进程,manager)和被管设备(代理),被管设备对应的进程称为代理进程.管理器控制盒监视着一组代理,通常情况下,管理器是主机,代理是路由器或服务器.代理把相关性能信息存储在数据库中,

一次对SNMP服务的渗透测试

SNMP安全相关信息是需要各位安全开发人员,渗透测试工程师以及白帽子所需要关心的内容,在本篇文章中,作者通过对其漏洞的分析和实践直观的让读者对其相关内容进行了解.对入门学员可能会有所帮助. Hacking SNMP Service – The Post Exploitation :Attacking Network – Network Pentesting原文地址:http://www.websecgeeks.com/2017/ - ce-part-1-post.htmlhttp://www.w

基于SNMP的MIB扩展方法研究

文章较长,此文章背景:毕业设计,直接去搜索我的毕业设计选题,当时还傻傻的用百度,在百度文库和CSDN等下载了很多论文.搜索到的论文有以下几种: 1)完全胡扯,听说MIB“树状”模型,直接就有写ta用二叉树实现了,恩,我上次用了Java和氧化还原反应成功拿到抓到外星人,你信不信? 2)介绍了很多知识背景,然后一下子ta们就实现了,他们做了什么工作很少涉及. 3)有位盆友一直写自己在做这件事情,ta也说网上有很多方法,但是没有有价值的方法,ta决定实现一个,但是,ta再也没有更新ta的博客.o(╯□

Examples of MIB Variables - SNMP Tutorial

30.5 Examples of MIB Variables Versions 1 and 2 of SNMP each collected variables together in a single large MIB, with the entire set documented in a single RFC. After publication of the second generation, MIB-II, the IETF took a different approach by

SNMP与MIB

简单网络管理协议(SNMP:Simple Network Management Protocol)是一套网络管理协议,注意,SNMP是一个强大的网络管理协议,而不是"简单"的.利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态.修改网络设备配置.接收网络事件警告等. TCP/IP网络管理由3部分组成: 一个管理信息库M I B( Management Information Base).管理信息库包含所有代理进程的所有可被查询和修改的参数. 关于 M

SNMP协议以及著名的MIB详解

SNMP协议介绍  简单网络管理协议(SNMP:Simple Network Management Protocol)是由互联网工程任务组(IETF:Internet Engineering Task Force )定义的一套网络管理协议.该协议基于简单网关监视协议(SGMP:Simple Gateway Monitor Protocol).利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态.修改网络设备配置.接收网络事件警告等.虽然SNMP开始是面向基于IP的

lwip 2.0.2 snmp mib ipv6

Submitted by Harald.T.Alvestrand at uninett.no from host aun.uninett.no (129.241.1.99) using a WWW entry form. Authorization gave nothing. OID value: 1.3.6.1.2.1 OID description:Base OID for MIB-2 defined SNMP variables Superior references 1.3.6.1.2 

Installing MIB in Ubuntu and Solving the Error “SNMP Cannot Find Module …”

Has noticed an error after executing the command snmpwalk with the indication of MIB instead of OID: 1 2 snmpwalk -v 2c -c public 192.168.0.1 ifIndex ifIndex: Unknown Object Identifier (Sub-id not found: (top) -> ifIndex) And: 1 2 3 4 5 6 7 8 9 10 11