使用PHP生成SNMP陷阱

5
我正在拼命寻找一种从PHP生成SNMP陷阱的方法。我知道使用snmpget的内置方法,但我无法弄清楚如何发送SNMP陷阱。
是否有人知道一个类/代码片段可用于此?在网上搜索没有带来任何其他内容,除了使用exec调用cli工具,这绝对不是我的选择。
我怀疑需要使用socket_create和相应的功能手动生成UDP包...
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

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

显然,您也可以将trap作为原始字节数组编码并通过UDP套接字发送它,但是这样做您需要自己实现BER编码器和SNMP数据包编码器,我不建议这样做。供您参考,您需要以下信息:


谢谢你的回答 - 但使用外部程序绝对不是一个选项。我会检查你在回答中提供的链接并尝试自己解决问题。 - glutorange

3

1

如果有人在今天(2019年)正在寻找这样的库,我发现 https://github.com/FreeDSx/SNMP 支持发送SNMPv1和SNMPv2陷阱(包括通知请求)。


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


谢谢您的回答 - 但我已经很清楚 PHP 中的这个功能。我一直在寻找一种发送 SNMP Trap 的方法。使用 SNMP GET/SET 不是我需要的。抱歉。 - glutorange

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接