一、 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.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):
例如以下oid是標量:
iso.org.dod.internet.mgmt.mib-2.system.sysDesrc.0
(2)表量(Columnar Objects):
例如以下oid是表量:
iso.org.dod.internet.mgmt.mib-2.interface.ifTable.ifEntry.ifDescr.2
iso.org.dod.internet.mgmt.mib-2.interface.ifTable.ifEntry.ifType.1
二、 自定義MIB
自定義MIB包含的內容有:模塊級別信息、對象定義(OBJECT TYPE,包括標量對象和表對象)、陷阱定義(TRAP TYPE)。
第1部分是MIB開始,第2部分引入外部定義,第3部分是模塊信息定義,第4部分是MO定義,第5部分是TRAP定義,最后是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為參考
三、理解和掌握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版)。
| status | 說明 |
| mandatory | 表示該對象的狀態是必備的 |
| optional | 表示該對象的狀態是可選的 |
| obsolete | 使用該值使得MIB的某些部分標記為過時,被標記為“廢棄”的對象將從現行版本中刪除,並在新的MIB版本中標記為“過時”。 |
| current | 表示該對象的狀態是當前可用的 |
(9)DESCRIPTION:對被管對象的功能、特征等等進行描述的關鍵字。
(10)(description):被管對象的文本描述。須用雙引號把其文本說明括起來,有時由於用MIB編譯器編譯結果太大時,可以把文本說明刪除,即只保留一個空的雙引號。
(11)(parent):包含此葉子對象的樹支,即葉子對象的父親必須是用“OBJECT IDENTIFIER”聲明。
(12)(number):在此父樹支下的第幾個葉子對象,這個數字在此父樹支下必須是唯一的。一般number都是從取1開始的。例如:“::={ myObject 22 }”,則在myObject樹支下22必須是唯一的,否則在用MIB編譯器(如pSOS所提供的MIB編譯器)進行編譯時會提示有錯。
除此之外,還有一些關鍵字:UNITS、INDEX、REFERENCE、DEFVAL等等,分別代表被管對象的單位、索引、參考、缺省值。值得注意的是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
mib內容如下:
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}
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}
END
參考地址
