使用Snmp 獲取MIB表

2021-04-01 19:24:45 字數 2730 閱讀 2066

snmp++

是一套強大的網路管理應用開發包。它提供了

snmp

網管協議所描述的所有命令,並且提供

**i資料型別的解析。

mib資料報含普通資料和表資料。在提取表資料時,由於表項的數量和

oid都不確定,所以不能通過某個特定的

oid直接獲得取值。通常,關於

snmp

的書上都會介紹使用

getnext

命令來實現表的遍歷,這種方法比較簡單,這裡主要討論該演算法的原理和如何用

snmp++

實現。mib

表是通過行和列來描述的。其中列表頭是各個表項的原始

oid,而行表頭則是

index

。這樣以來乙個

oid和乙個

index

就唯一地確定了表中的一項。比如在介面表中,

ifdescr

(oid

為1.3.6

.1.2.1.2.2.1.2

)為一列,而具體對於某乙個介面則為一行。這樣,某一具體表項的

oid就表示為:列

oid+index

的形式。下圖形象地描述了一張表的格式。

ifindex

1.3.6

.1.2.1.2.2.1.1

ifdescr

1.3.6

.1.2.1.2.2.1.2

iftype

1.3.6

.1.2.1.2.2.1.3

ifmtu

1.3.6

.1.2.1.2.2.1.4

ifspeed

1.3.6

.1.2.1.2.2.1.5

index0

******

******

***index1

******

******

***index2

******

******

***按照協議描述,最基本的方法是通過

index

來獲取某一表項。但事實上,

index

本身也是乙個表項,再加之有些表需要多個

index

,並且各種

index

的資料型別不同,比如要手工處理

ip位址型別的

index

就比較困難,所以這種方法具有很難的操作性。因此,在實際程式設計時,可以採取一些比較技巧化的方法。

從snmp

中對於getnext

命令的描述可知,如果

getnext

的引數為乙個表中某一列的表頭

oid,比如前面的

ifdescr

(1.3.6

.1.2.1.2.2.1.2

),則得到的值為該列第一行元素值,並可得到該值的

oid。再對取得的

oid使用

getnext

就可獲得該列第二行的值。如此下去,如果到了該列的最後一行,那麼用

getnext

將得到下一列的第一行。如果到了該錶的最後乙個元素,那麼用

getnext

將得到按

mib樹所得的下乙個元素值。顯然,在越界的情況下,其

oid的前部分已不同於本列表頭的

oid,所以,可以通過得到的

oid值來判斷是否越界。

以下為其主要的**:

/*從**提取某一特定表項,即表中的一列

*/void get_table(oid *item_oid, ctarget *target)

else

}else}}

以上的演算法是從表中提取一列,那麼如何提取一行呢?對於上述演算法可以加以改進以適應我們的需要。但是,

getnext

命令是按列遍歷的,當我們要用它獲得一行的時候還是必須先至少獲得一列的資訊,也就是說,在行遍歷演算法中還是要包含上述**。這種方法經過實踐是成功的,在這裡僅對演算法進行一下描述。

首先還是要執行上述**,但是,在資料處理的時候必須儲存所得到的完整

oid。我們知道,得到的

oid實際上是由列

oid+index

構成,而列

oid是已知的,那麼如果我們將得到的

oid前面的列

oid部分替換為另外的列

oid就可以獲得該行另一列的完整

oid。在多數情況下,同一表中不同的列

oid僅相差乙個數字,所以,替換方法也比較簡單。這裡假設我們只需替換一位(其它情況下只需做修改即可),演算法如下:

//按行提取表資料

oid row_oid[max_oid_num];

/*首先在此處包含前面按列提取的**,

並在資料處理處將

full_oid

儲存在陣列

row_oid

*///

假設前面已經將第一列的所有表項

oid儲存在陣列

row_oid

中了//

按行迴圈

for(int i=0; i

else

}實際上,

snmp

提取表資料的方法有很多,這裡介紹的是最簡單最基礎的一種方法。而且對於不同的開發包,還有更好的對錶支援的方法,比如

adventsnmp

開發包就有直接的表操作函式。無論採用何種方法,了解最基本的工作原理都非常有幫助。

作者blog:http://blog.csdn.net/makeitandy/

歷史經驗之使用Snmp 獲取MIB表

snmp 是一套強大的網路管理應用開發包。它提供了snmp網管協議所描述的所有命令,並且提供smi資料型別的解析。mib資料報含普通資料和表資料。在提取表資料時,由於表項的數量和oid都不確定,所以不能通過某個特定的oid直接獲得取值。通常,關於snmp的書上都會介紹使用getnext命令來實現表的...

什麼是 SNMP 和 MIB

snmp network management protocol 即簡單網路管理協議,它為網路管理系統提供了底層網路管理的框架。snmp協議的應用範圍非常廣泛,諸多種類的網路裝置 軟體和系統中都有所採用,主要是因為snmp協議有如下幾個特點 首先,相對於其它種類的網路管理體系或管理協議而言,snmp...

SNMP管理資訊庫MIB

snmp管理資訊庫mib 管理資訊庫mib指明了網路元素所維持的變數 即能夠被管理程序查詢和設定的資訊 mib給出了乙個網路中所有可能的被管理物件的集合的資料結構。snmp的管理資訊庫採用和網域名稱系統dns相似的樹型結構,它的根在最上面,根沒有名字。圖3畫的是管理資訊庫的一部分,它又稱為物件命名 ...