使用PHP生成SNMP陷阱

时间:2010-09-29 20:36:06

标签: php snmp snmp-trap

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

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

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

4 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我知道这个问题已经过时了,但我刚刚通过Google遇到过这个问题,并考虑根据我的调查结果对其进行更新,以防其他人也登陆此处。 正如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