2024年4月27日发(作者:)

windows下用NET-SNMP接受并处理SNMP Trap/Notification .

分类: Network Programming 2009-09-09 13:19 1791人阅读 评论(0) 收藏 举报

*. 如何确认windows能否接受到设备发的trap?

阅读设备文档,确保操作能让设备产生trap,然后在计算机上用Wireshark捕捉SNMP

消息。

* 用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/来实现(用此方法需要保证计算机上已安装

ActivePerl);或者参照

docs/->configuratoin->->Access Control中的描述

来手工修改。

**举例,最简单的设定的步骤(对所有的都不丢):

1.C:/Program Files/Net-SNMP/usr/bin下建一个并在此文件中加

入下面这行配置。

disableAuthorization yes

2. 在运行snmptrapd的时候加入读取配置文件的参数。e.g.

C:/Program Files/Net-SNMP/usr/bin>snmptrapd -c "C:/Program

Files/Net-SNMP/usr/bin/" -f -Le -d

或者,把文件放到/usr/etc/snmp下,在运行snmptrapd的时候,

就不用加入读取配置文件的参数

e.g.

C:/Program Files/Net-SNMP/usr/bin>snmptrapd -f -Le -d

现在收到trap之后,会发现消息已经被尽可能地解开。

* 如何调用其他windows程序来处理net-snmp捕捉到的trap?

1.在上面生成的文件中,加入下面配置

traphandle default

**举例:

编写下面批处理文件:

@echo off

echo. >> c:/temp/

echo %date% %time% >> c:/temp/

set /P host=%=%

set /P ip=%=%

set /P oid=%=%

set /P val=%=%

echo TRAP: host=%host%; ip=%ip%; %oid% = %val%; >> c:/temp/

然后在中加入

traphandle default c:/temp/

那么net-snmp在收到trap时会执行,打开c:/temp/会发现有记录在