1. 程式人生 > >NET-SNMP 傳送接受並處理SNMP Trap/Notification

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會發現有記錄在內