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