【snmp】MIB結構與語法


 

一、 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):

  例如以下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)簡單類型: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為參考

 

三、理解和掌握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-writeno-accessibleSNMP2版中又新增了read-create

7STATUS:被管對象的狀態的關鍵字。

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

status 說明
mandatory 表示該對象的狀態是必備的
optional 表示該對象的狀態是可選的
obsolete 使用該值使得MIB的某些部分標記為過時,被標記為“廢棄”的對象將從現行版本中刪除,並在新的MIB版本中標記為“過時”。
current 表示該對象的狀態是當前可用的

 

9DESCRIPTION:對被管對象的功能、特征等等進行描述的關鍵字。

10)(description):被管對象的文本描述。須用雙引號把其文本說明括起來,有時由於用MIB編譯器編譯結果太大時,可以把文本說明刪除,即只保留一個空的雙引號。

11)(parent):包含此葉子對象的樹支,即葉子對象的父親必須是用“OBJECT IDENTIFIER”聲明。

12)(number):在此父樹支下的第幾個葉子對象,這個數字在此父樹支下必須是唯一的。一般number都是從取1開始的。例如:“::={ myObject 22 }”,則在myObject樹支下22必須是唯一的,否則在用MIB編譯器(如pSOS所提供的MIB編譯器)進行編譯時會提示有錯。

除此之外,還有一些關鍵字:UNITSINDEXREFERENCEDEFVAL等等,分別代表被管對象的單位、索引、參考、缺省值。值得注意的是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

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

 

 

參考地址

MIB結構和語法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM