snmp網路管理協議在通訊裝置中使用得很廣,大部分的通訊裝置的網管介面都支援snmp標準協議。最近在實際工作做有所接觸,下面就說說自己開發過程中的問題和心得。
一般來講snmp由網管終端(如pc上的nmc)和裝置中的agent組成,也就是通常所講的上位機與下位機。我的工作住要是pc部分的網管的開發。目前我所知道的開源的snmp開發包有snmp++和net-snmp兩個,snmp++是由hp公司人員開發的,後來公開了源**,我就是用的snmp++。net-snmp最初是由美國卡內基梅龍大學開發的,後來也成為了乙個開源專案。
要開發snmp方面的程式就必須要對snmp協議有基本的認識,snmp主要由mib,**i等部分,mib就是對每乙個被管理對的標識,而**i則定義了管理的資料編碼實現,這些內容都可以在iso的rfc文件中找到,這就不多說了,看書來得更快。snmp利用udp協議來傳輸資料報,主要有getrequest報文、getnextrequest報文、getresponse報文、setrequest報文和trap報文五種。
genaddress address("192.168.10.169"); //agent的ip位址
if ( !address.valid())
oid oid("1.3.6.1.4.1.10811.1.5.1.1.10.1.4");//mib物件
if ( !oid.valid())
snmp_version version=version1;//snmp版本號,這裡是v1
int retries=1;//udp包重發次數,預設值為1
int timeout=400; //超時時間
octetstr community("public");//讀訪問串
octetstr wrcommunity("public");//寫訪問串
int status;
snmp snmp( status);
if ( status != snmp_class_success)
pdu pdu;//夠造乙個pdu報文
vb vb;
vb.set_oid( oid);
pdu += vb;
ctarget target( address);//設定網管目標
target.set_version( version);
target.set_retry( retries);
target.set_timeout( timeout);
target.set_readcommunity( community);
target.set_writecommunity( wrcommunity);
if (( status = snmp.get( pdu,target))== snmp_class_success)
else
snmp++對各種操作都提供了阻塞和非阻塞操作,阻塞操作要等agent返回值或則超時後才返回,而非阻塞則可以立即返回。在實際中要根據情況選擇採用哪一種, 非阻塞操作中要加snmp.eventlistholder->snmpprocesspendingevents()函式來獲取事件。
有了基本的操作後,網管的主要工作就是對agent資料定時的採集,然後分析資料,產生裝置告警。一直以來對管理很多裝置時,資料採集速度就很慢,找不到很好的解決辦法,有待討論。
SNMP網路管理協議
網路管理系統的組成 1.被管理節點 裝置 被監視的裝置 2.網路管理 是駐留在網路裝置中的軟體模組,對來自管理站的資訊查詢 和 動作執行 的請求作出響應,主動向管理站提供一些重要的非請求資訊 3.網路管理工作站 資訊的接收點,指令的傳送點 與在不同的被管理節點中的 進行通訊,並顯示這些 狀態的中心裝...
SNMP網管協議 網路管理協議
snmp 簡單網路管理協議 和cmip 通用管理資訊協議 都是目前世界上最主要的兩種網管協議。總的來說,snmp和cmip兩種協議是相同點比較多。首先兩者的管理目標和基本組成部分是相同的,由5個部分組成 被管裝置,若干被管 至少乙個網路管理器,乙個公共網路管理協議,一種或多種管理資訊庫 mib 目標...
snmp 簡單網路管理協議
snmp是基於tcp ip協議族的網路管理標準,是一種在ip網路中管理網路節點 如伺服器 工作站 路由器 交換機等 的標準協議。snmp能夠使網路管理員提高網路管理效能,及時發現並解決網路問題以及規劃網路的增長。網路管理員還可以通過snmp接收網路節點的通知訊息以及告警事件報告等來獲知網路出現的問題...