NET-SNMP 傳送接受並處理SNMP Trap/Notification
NET-SNMP 提供了兩個工具來發送和接收trap,
* 用NET-SNMP如何傳送trap?
snmptrap 傳送trap,具體用法:
snmptrap -v 1 -c public -d localhost enterprise-oid agent trap-type specific-type uptime [OID TYPE VALUE]
agnet : 傳送方地址
trap-type : 0 , coldstart; 1, warstart;2, linkdown; 3, linkup; 4,authentication failure;5,neighbor loss,6,enterprise specific.
具體例子:
snmptrap -v 1 -c public -d localhost DAP-2590-v111:dap2590 192.168.0.25 1 0 DAP-2590-v111:wirelessLanIfDesc
s mytest
* 用NET-SNMP如何捕捉trap?
** 怎樣讓net-snmp收到trap?
C:/Program Files/Net-SNMP/usr/bin>snmptrapd -f -Le -d
執行之後NET-SNMP開始接收trap,注意這是debug模式,會將收到的trap包內容打印出。
** 碰到錯誤couldn't open udp:162 -- errno 2 ("No such file or directory")?
碰到此錯誤很可能是有程式佔用了windows的SNMP接受埠(162)。用下面命令來找出佔用此埠的程序。
netstat -ano|find "162"
如果有輸出則最後一個數字是程序號。從微軟免費下一個Process Explorer,找出佔用該埠的程序,決定是否停掉。
** 碰到錯誤 Warning: no access control information configured. This receiver will *NOT* accept any incoming notifications.
沒有設定訪問控制的情況下NET-SNMP對所有的進入trap都丟掉。因為一個snmp manager可能收到大量的trap而其中只有一小部分是真正需要處理的。具體設定可以通過net-snmp安裝目錄下的bin/snmpconf.bat來實現(用此方法需要保證計算機上已安裝ActivePerl);或者參照docs/Net-SNMP.chm->configuratoin->snmptrapd.conf->Access Control中的描述來手工修改。
**舉例,最簡單的設定的步驟(對所有的都不丟):
1.建一個snmptrapd.conf並在此檔案中加入下面這行配置。
disableAuthorization yes
2. 在執行snmptrapd的時候加入讀取配置檔案的引數。e.g.
C:/Program Files/Net-SNMP/usr/bin>snmptrapd -c "C:/Program Files/Net-SNMP/usr/bin/snmptrapd.conf" -f -Le -d
現在收到trap之後,會發現訊息已經被儘可能地解開。
* 如何呼叫其他windows程式來處理net-snmp捕捉到的trap?
1.在上面生成的檔案中,加入下面配置
traphandle default <program>
**舉例:
編寫下面批處理檔案test.bat:
@echo off
echo. >> c:/temp/log.txt
echo %date% %time% >> c:/temp/log.txt
set /P host=%=%
set /P ip=%=%
set /P oid=%=%
set /P val=%=%
echo TRAP: host=%host%; ip=%ip%; %oid% = %val%; >> c:/temp/log.txt
然後在snmptrapd.conf中加入
traphandle default c:/temp/test.bat
那麼net-snmp在收到trap時會執行test.bat,開啟c:/temp/log.txt會發現有記錄在內