針對開發(fā)SNMPTrap的總結(jié).docx
《針對開發(fā)SNMPTrap的總結(jié).docx》由會員分享,可在線閱讀,更多相關(guān)《針對開發(fā)SNMPTrap的總結(jié).docx(4頁珍藏版)》請在裝配圖網(wǎng)上搜索。
淺談Linux中開發(fā)SNMP Trap SNMP Trap 是一種標(biāo)準(zhǔn)的報告機制,廣泛應(yīng)用在各種網(wǎng)絡(luò)管理軟件中。本文詳細(xì)介紹了 SNMP Trap 的基本概念,以及 Linux 下面 net-snmp 對SNMP Trap的開發(fā)與應(yīng)用。 1. SNMP Trap簡介 SNMP簡單網(wǎng)絡(luò)管理協(xié)議(Simple Network Management Protocol)是一種應(yīng)用層協(xié)議,是TCP/IP協(xié)議族的一部分。它使網(wǎng)絡(luò)設(shè)備之間能夠方便地交換管理信息。能夠讓網(wǎng)絡(luò)管理員管理網(wǎng)絡(luò)的性能,發(fā)現(xiàn)和解決網(wǎng)絡(luò)問題及進(jìn)行網(wǎng)絡(luò)的擴充。 SNMP Trap 是 SNMP 的一部分,當(dāng)被監(jiān)控段出現(xiàn)特定事件,可能是性能問題,甚至是網(wǎng)絡(luò)設(shè)備接口宕掉等,代理端會給管理站發(fā)告警事件。假如在特定事件出現(xiàn)的時刻,不是由 Agent 主動通知 NMS(Network Management Station ),那么 NMS 必須不斷地對 Agent 進(jìn)行輪詢。這是非常浪費計算資源的方法,正如人們用中斷通知 CPU 數(shù)據(jù)的到達(dá),而不是讓 CPU 進(jìn)行輪詢一樣。Trap 通知是更加合理的選擇。 總的來說,SNMP Trap 就是被管理設(shè)備主動發(fā)送消息給 NMS 的一種機制。 2. SNMP Trap報文 Trap PDU不同于其他類型的PDU格式,Trap PDU包含的部分都是為描述事件而定義的,見下圖所示: PDU enterprise agent-addr generic-trap specific-trap time- stamp var-list … 各部分的解釋如下: enterprise:企業(yè)標(biāo)識、對象標(biāo)識。 agent-addr:產(chǎn)生Trap的被管理設(shè)備的地址。 generic-trap:用于識別Trap的類型,取值0-6,6代表特殊代碼的擴展。 specific-trap:與generic-trap一起標(biāo)識擴展Trap類型。 time-stamp:時間戳,系統(tǒng)從上次啟動到產(chǎn)生該Trap的系統(tǒng)時間。 var-list:綁定的對象標(biāo)識-值等數(shù)據(jù)。 3. 設(shè)計一個 Trap 消息 Trap 消息也是用 MIB 來定義的。在下面的例子中,我們定義了一個 Trap 消息:fxPortReset、fxPortResetOK。 樹型結(jié)構(gòu)如下: fxBMDevTrap . 1.3.6.1.4.1.33619.10.3.1.52 +----fxBMDevAlarm . 1.3.6.1.4.1.33619.10.3.1.52.1 +----fxBMPortAlarm . 1.3.6.1.4.1.33619.10.3.1.52.1.1 |----fxPortReset . 1.3.6.1.4.1.33619.10.3.1.52.1.1.1 |----fxPortResetOK . 1.3.6.1.4.1.33619.10.3.1.52.1.1.2 fxPortReset、fxPortResetOK被定義為 NOTIFICATION類型,即 SNMPv2 類型的 Trap。 4. SNMP Trap的實現(xiàn) 把定義的MIB命名為fxBMDevTrap.txt,利用mib2c.notify.conf配置文件,生成fxBMDevTrap.c和fxBMDevTrap.h。此生成方法參照mib2c工具的使用。 由模版生成的文件,不論哪種對象,都會有固定模式的整體結(jié)構(gòu)。在模版文件中對節(jié)點進(jìn)行定義,函數(shù)定義。處理函數(shù),用來處理代理端所要發(fā)送的數(shù)據(jù),數(shù)據(jù)的添加就是我們要手工實現(xiàn)的。我們所要做的工作就是把所需上報的數(shù)據(jù)導(dǎo)入到其中。 模版是針對單個變量來處理的: 1) Trap處理函數(shù) int send_fxPortReset_trap( void ) 其實現(xiàn)主要為: snmp_varlist_add_variable(&var_list, snmptrap_oid, OID_LENGTH(snmptrap_oid), ASN_OBJECT_ID, fxPortReset_oid, sizeof(fxPortReset_oid)); 首先添加trap對象,指定告警的對象為fxPortReset。 如果trap需要根據(jù)情況綁定數(shù)據(jù),以提供更多事件信息,可繼續(xù)添加數(shù)據(jù)到鏈表,也可指定綁定數(shù)據(jù)的對象標(biāo)識符。 snmp_varlist_add_variable(&var_list, fxBMPortIndex_oid, OID_LENGTH(fxBMPortIndex_oid), ASN_INTEGER, (u_char *)&temp, sizeof(temp)); 如果有多組數(shù)據(jù)綁定,就要簡單重復(fù)調(diào)用snmp_varlist_add_variable 函數(shù),因此鏈表var_list包含了指定類型的數(shù)據(jù)。 一個 SNMP Trap創(chuàng)建成功后,調(diào)用相應(yīng)的API將其發(fā)送出去即可: send_v2trap( var_list ); 最后需要做清理工作,代碼如下: snmp_free_varbind( var_list ); 具體可參考源代碼包~\agent\mibgroup\examples下的notification.c和notification.h文件。 2) Trap的觸發(fā) SNMP Trap是由Agent主動發(fā)出,NMS不對Trap做響應(yīng)。當(dāng)某個事件發(fā)生時,就會發(fā)送Trap消息。因此在事件觸發(fā)時,可以調(diào)用上面的Trap處理函數(shù)發(fā)送。相應(yīng)地事件調(diào)用相應(yīng)的事件處理函數(shù),例如:在端口重啟時就可以調(diào)用send_fxPortReset_trap(),來發(fā)送PortReset的Trap。 3) SNMP_TRAP_API 關(guān)于SNMP Trap的發(fā)送,NET-SNMP給出了三個api函數(shù):send_easy_trap, send_trap_vars, send_v2trap。 send_easy_trap: 發(fā)送SNMPv1和SNMPv2標(biāo)準(zhǔn)的Trap消息; send_trap_vars: 發(fā)送可添加綁定數(shù)據(jù)的Trap消息; send_v2trap: 支持綁定數(shù)據(jù)的SNMPv2擴展Trap。 參照源碼,send_easy_trap和send_v2trap最終都是調(diào)用send_trap_vars,只是傳遞參數(shù)不同而已。 5. NET-SNMP Trap實現(xiàn) 1) NET-SNMP Trap配置 我們將生成的XXX.c和XXX.h靜態(tài)編譯到snmpd進(jìn)程中,Trap的發(fā)送還需指定管理端地址和端口。在配置文件中,添加下面關(guān)鍵字: authtrapenable 1 //打開trap自動告警的開關(guān),1代表開啟、2代表關(guān)閉 trapsink host [community] [port] //指定trap發(fā)送的地址、共同體和端口 共同體和端口可以不指定,默認(rèn)為public和162。 SNMPv2的Trap關(guān)鍵字為trap2sink。 2) SNMP Trap查看 MG-SOFT管理軟件可以接收Trap消息,啟動MIB Browser->Tools->Trap Ringer Console。在顯示面板上可以查看接收到Trap的發(fā)送端、接收端、時間、共同體、協(xié)議版本、對象以及綁定的數(shù)據(jù)等信息。 SNMP Trap分兩大類:標(biāo)準(zhǔn)Trap、擴展Trap。 標(biāo)準(zhǔn)Trap: generic字段標(biāo)示Trap類型,specific字段為0,Time字段表示從snmpd啟動到Trap發(fā)生所經(jīng)歷的時間,enterprise標(biāo)示對象sysObjectID的值。 擴展Trap: generic字段均為6,enterprise和specific在Trap定義中給出,擴展的 Trap 通常是由以下幾個部分連接而成:enterprise + 0 + specific trap??捎蒭nterprise和specific一起來判斷該Trap對象,其他與標(biāo)準(zhǔn)Trap相同。 3) 其他問題 當(dāng)開啟MG-SOFT軟件的Trap Ringer Console工具時,往往出現(xiàn)綁定162端口出錯,可能原因是162端口已經(jīng)被占用。解決方法有兩種: a) 禁用服務(wù),打開Windows下的本地服務(wù),禁用windows自己的SNMP Trap功能,開啟MG-SOFT SNMP Trap Service。 b) 修改端口,打開MIB Browser->View->MIB Browser Preferences,設(shè)置Trap Ringer下的Ports,這里默認(rèn)用的是162,我們也可以改成其他未使用的端口。同樣地,snmpd的配置文件中trapsink也要指定相同地端口。 總結(jié) 本文只關(guān)注SNMP Trap 的相關(guān)概念和開發(fā)方法。雖然 SNMP Trap能簡單地創(chuàng)建而且輕松地發(fā)送到指定管理端,但似乎這并不是重點,關(guān)鍵地事件什么時候發(fā)生,以及事件發(fā)生后如何通知snmpd進(jìn)程發(fā)送Trap,都可以說是十分復(fù)雜的問題。對此,作為一個有理想的程序員,還需要堅定不移地繼續(xù)深入地了解更多 SNMP 的知識。- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 針對 開發(fā) SNMPTrap 總結(jié)
鏈接地址:http://www.szxfmmzy.com/p-9063311.html