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畫的是管理資訊庫的一部分,它又稱為物件命名 ...