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

本文介绍如何使用NET-SNMP工具捕获并处理SNMP Trap消息,包括配置NET-SNMP接收Trap、解决常见错误及通过自定义程序处理Trap的方法。

*. 如何确认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/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会发现有记录在内

### 3.1 解决 `snmptrapd` 无法找到 MIB 模块的问题 当 `snmptrapd` 启动时,如果系统日志中出现类似 `Cannot find module` 的警告,表明 SNMP 无法加载所需的 MIB 文件。这种情况通常是因为 MIB 文件未正确安装或未被 `snmptrapd` 所识别。为了解决该问题,需确保 MIB 文件已正确安装放置在默认路径 `/usr/share/snmp/mibs/` 中。 可以通过以下命令安装标准 MIB 模块: ```bash sudo apt install snmp-mibs-downloader ``` 安装完成后,需要启用 SNMP 的 MIB 加载功能。编辑 `/etc/snmp/snmp.conf` 文件,注释掉以下行以启用 MIB 解析: ```conf # mibs : ``` 修改为: ```conf mibs : ALL ``` 此配置允许 `snmptrapd` 加载所有已安装的 MIB 模块[^1]。 ### 3.2 处理 `logOption` 未知警告 `snmptrapd` 的配置文件中如果使用了 `logOption` 参数,但启动时提示 `logOption` 未知,说明当前版本的 `snmptrapd` 不支持该选项。该问题通常出现在较旧版本的 SNMP 工具中。 解决方法是使用 `agentAddress` 和 `agentXSocket` 等替代参数,或升级 `snmp` 软件包到最新版本以支持 `logOption` 功能。如果无法升级,可以改用系统日志(syslog)记录方式: ```bash sudo nano /etc/snmp/snmptrapd.conf ``` 将 `logOption` 替换为: ```conf authCommunity log,execute public ``` 然后重启 `snmptrapd` 服务: ```bash sudo systemctl restart snmptrapd ``` 这样可以避免因 `logOption` 未知而导致的配置警告[^1]。 ### 3.3 解决 SNMP TRAP 端口 162 被占用的问题 默认情况下,`snmptrapd` 监听在 UDP 端口 162。如果启动失败提示端口已被占用,可通过以下命令检查端口占用情况: ```bash sudo netstat -tulnp | grep 162 ``` 若发现端口被其他进程占用,可使用 `kill` 命令终止占用进程: ```bash sudo kill <PID> ``` 若需更改 `snmptrapd` 的监听端口,可在 `/etc/snmp/snmptrapd.conf` 中添加: ```conf agentAddress udp:1620 ``` 随后重启服务以应用新端口配置: ```bash sudo systemctl restart snmptrapd ``` 此方式可有效避免端口冲突问题[^1]。 ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值