有没有人知道如何使用php发送SNMP陷阱?或者如何在 Linx 中发送 SNMP 陷阱?我使用Net-SNMP从终端发送陷阱。但它没有告诉MIB需要放置的确切位置,我无法使用"snmptrap"命令发送陷阱。我需要在RedHat Linux服务器中使用它。
MIB 搜索路径:/home/user/.snmp/mibs:/usr/local/share/snmp/mibs 找不到模块 (MY-MIB):在 1 行(无) MY-MIB::clientrap: 未知对象标识符
这是我得到的错误。我确信我按照 NET-SNMP 的建议将 MIB 文件放在/home/user/.snmp/mibs 和/usr/local/share/snmp/mibs 中。然后我不知道错误是怎么来的。还有其他MIB搜索路径吗?我不知道。
PHP 中似乎没有直接的方法来发送 SNMP 陷阱,答案也是如此。所以最后我想出了自己的方法,依靠Net-Snmp本身。我真正想要的是从一个php程序发送Snmp陷阱。我终于能够通过Linux终端在Net-Snmp库的帮助下做到这一点。以下是步骤。
- 安装 Net-Snmp
:有两种方法可以在 Linux 机器中安装 net-Snmp 包
1) 通过下载 Net-Snmp 软件包,如 http://www.net-snmp.org/wiki/index.php/Net-Snmp_on_Ubuntu 中所述 sourceforge.net。
2)通过安装pysnmp模块 - 这种方法似乎更简单。您也可以通过两种不同的方式做到这一点。
- 通过手动下载库并通过运行python脚本成功提取来安装
- 只需使用命令 sudo pip 安装 pysnmp ,假设您已经安装了 pip。
这里描述了这两种方法 - https://pynet.twb-tech.com/blog/snmp/python-snmp-intro.html
我们安装 pysnmp 的原因是 pysnmp 包会自动安装 NET-SNMP 的基本库,即使它是为 Python 程序制作的。
通过键入命令 snmpd --version 或 snmpget 或 snmptrap 等来确认 NET-SNMP 的安装。
使用命令查找 MIB 搜索路径
snmpget -Dparse-mibs 2>&1 | grep directory
。它将显示 Net-Snmp 查找 MIB 文件的路径。通常结果是:parse-mibs: 扫描目录/var/www/html/User/.snmp/mibs parse-mibs:无法打开 MIB 目录/var/www/html/User/.snmp/mibs parse-mibs: 扫描目录/usr/local/share/snmp/mibs
将".txt"格式的MIB文件复制(上传)到可用的MIB搜索路径之一。通常它是
/
usr/local/share/snmp/mibs
使用命令发送陷阱
snmptrap -v 2c -c public 192.168.1.1:162 " MIBNAME-MIB::trapname MIBNAME-MIB::message1 s "Hi" MIBNAME-MIB::message2 s "It Work"
所以我们现在有了 shell 命令。我们可以使用 exec() 函数在 php 中运行它。`
exec("snmptrap -v 2c -c public *192.168.1.1:162* '' MIBNAME-MIB::trapname MIBNAME-MIB::message1 s 'Hi' MIBNAME-MIB::message2 s 'It works'", $output, $result);
请注意,"192.168.1.1:162"是管理器 IP 以及端口号。MIBNAME 是 MIB 文件中给出的 MIB 模块名称,trapname 是 MIB 文件中的陷阱名称。
假设您在给定的IP中有一台工作的SNMP管理器计算机,可以按照SNMP管理器中MIB文件中给定的格式接收Snmp陷阱。