zoukankan      html  css  js  c++  java
  • MIB snmp

    1  MIB基础知识

    MIBManagement Information Base,管理信息库)是MOManaged 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.2  MIB分类

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

    1)标准MIBrfc1213, 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位组串数字(字符串;范围为0255)、对象标识符(预先定义的数据类型别名)或NULLNULL是留待的后使用的空位。

    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)简单类型:IntegerOctet StringObject IdentifierNull

    2)应用类型:IpAddressCounterGaugeTimeTicksOpaque

    v2中的

    1)简单类型:Integer32OctetStringObject IdentifierNull

    2)应用类型:IpAddressCounter32Counter64Gauge32Unsigned32TimeTicksOpaqueBIT STRING

    2.2  自定义MIB基本原则

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

    2)采用最新的SNMPV2SMI来定义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中必须是唯一的。

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

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

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

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

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

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

    8(status).可取的值为:mandatory optionalobsoletedeprecateSNMP1版中),currentobsoletedeprecateSNMP2版)。

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

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

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

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

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

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

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

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

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

    除此之外,还有一些关键字:UNITSINDEXREFERENCEDEFVAL等等,分别代表被管对象的单位、索引、参考、缺省值。这些关键字都并不是很重要,有兴趣的读者可参阅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)中的ACCESSnot-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,      }    

    上表中有三个列对象myIndexmyColumn1myColumn2

     

     

    源码如下:

    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

     

  • 相关阅读:
    flock对文件锁定读写操作的问题 简单
    hdu 2899 Strange Fuction(二分)
    hdu 2199 Can you solve this equation? (二分)
    poj 3080 Blue Jeans (KMP)
    poj 2823 Sliding Window (单调队列)
    poj 2001 Shortest Prefixes (trie)
    poj 2503 Babelfish (trie)
    poj 1936 All in All
    hdu 3507 Print Article (DP, Monotone Queue)
    fzu 1894 志愿者选拔 (单调队列)
  • 原文地址:https://www.cnblogs.com/sheng1255blog/p/4129422.html
Copyright © 2011-2022 走看看