我的perl脚本如何从托管系统接收SNMP陷阱?

时间:2010-12-15 12:28:23

标签: perl snmp net-snmp

我想做以下几点,但我不确定我是否使用最好的方法:

在Sparc / Solaris 10计算机上运行的perl脚本应等待传入的SNMP陷阱数据包(例如,在端口162上)。当它收到陷阱时,它应解码它并对其进行一些处理,然后继续等待下一个陷阱。

我看过David M. Town的Net :: SNMP,但我认为它只允许发送请求和接收响应。我在本文档中找不到等待自发陷阱消息的方法: http://search.cpan.org/dist/Net-SNMP/lib/Net/SNMP.pm

另一方面,Net-SNMP软件包似乎是一个非常强大且使用良好的库,但即使在那里,文档也没有为我提供明确的路径。 SNMP :: TrapSession允许我发送陷阱,但不接收它们(?)。

一些谷歌搜索引导我建议我应该使用“snmptrapd”二进制文件并使用它的嵌入式perl函数,在snmptrapd收到消息时调用我的脚本。这可能有效,但由于嵌入式perl选项需要在没有大文件支持的情况下编译perl二进制文件,因此这样做是不切实际的。我不拥有目标系统,因此无法替换编译器/解释器。我可以使用专门编译的perl发送我的软件,但这会给我带来我希望避免的跨平台问题。

我使用Perl而不是使用SNMP4J或类似的Java的原因是我有遗留的perl代码以前依赖于HP NNM的perl API,我需要转移到免费软件后端以消除许可证费用。

3 个答案:

答案 0 :(得分:2)

您是否正在寻找接收解析数据包的库例程?你可以自己监听UDP数据包,然后将你收到的任何数据包传递给snmp库来解析它们吗?这就是我正在做的事情,虽然我使用的是python而不是perl。

答案 1 :(得分:2)

使用Perl库SNMP_Session.pm解析SNMP陷阱的一个简单示例:Essential SNMP - page 194

答案 2 :(得分:2)

如果你得到了SNMP_Session库(完全是Perl btw),你可以这样做:

my $trap_session = SNMPv1_Session->open_trap_session ();
my ($trap, $sender_addr, $sender_port) = $trap_session->receive_trap ();
my @blah = $trap_session->decode_trap_request ($trap)