5

我正在拼命寻找一种从 PHP 生成 SNMP 陷阱的方法。我知道使用 snmpget 的内置方法,但我无法弄清楚如何发送 SNMP 陷阱。

有人知道它的类/代码片段吗?除了使用 exec 调用 cli 工具之外,搜索网络并没有带来任何东西,这对我来说绝对是没有选择的。

我怀疑有必要使用 socket_create 和相应的功能来手动生成 UDP 包......

4

4 回答 4

6

据我所知,没有使用 php 生成陷阱/通知的本地方法。甚至 SNMP 扩展也只允许获取和设置请求。因此,完成此操作的唯一(快速)方法是调用诸如 net-snmp 之类的外部工具。正确的命令行将类似于

snmptrap -v 1 -c public manager enterprises.spider test-hub 3 0 '' interfaces.iftable.ifentry.ifindex.1 i 1

将针对接口 1(取自手册页)向管理器发送一个通用的 linkUp 陷阱。要从 php 执行此操作,net-snmp 二进制文件应位于系统路径上,您可以调用execshell_execproc_open

显然,您也可以自己发送陷阱,方法是将其编码为原始字节数组并通过 UDP 套接字发送,但是您必须自己实现一个 BER 编码器和一个 SNMP 数据包编码器,我不建议这样做。供您参考,您将需要这些信息:

于 2010-10-07T08:22:50.070 回答
3

没有核心 SNMP 陷阱库。甚至可以帮助您打包 SNMP udp 数据包的任何核心库。然而,我确实找到了这个废弃的项目。http://code.google.com/p/php-snmp/它提供了发送简单陷阱所需的大部分内容。

更活跃但更复杂的似乎是http://www.activeexperts.com/network-component/howto/snmpts/php/

于 2011-12-07T17:54:47.133 回答
1

对于最近(2019 年)搜索此类库的任何人,我发现https://github.com/FreeDSx/SNMP支持发送 SNMPv1 和 SNMPv2 陷阱(包括通知请求)。

于 2019-06-25T10:30:18.953 回答
0

我知道这个问题很老,但我只是通过谷歌发现它,并想根据我的发现更新它,以防其他人也登陆这里。正如 Jek 所回答的,使用 net-snmp 是最好的解决方案。虽然最初的帖子说他不想使用任何外部组件,但考虑到您现在可以通过 apt-get(查找包 php-snmp)为许多 Linux 发行版添加 net-snmp,而且我肯定会在 Windows 上安装将同样容易。使用它的最大好处是,从 PHP 5.3.3 开始,PHP 固有地具有使用 SNMP 的内置接口函数,因此您不必使用 exec、shell_exec 或 proc_open。一切都可以在 PHP 环境中完成。见http://php.net/manual/en/book.snmp.php

于 2017-02-28T07:32:16.657 回答