2

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

在 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 而不是 Java 与 SNMP4J 或类似的原因是,我有以前依赖于 HP NNM 的 perl API 的旧版 perl 代码,我需要迁移到免费软件后端以消除许可证成本。

4

3 回答 3

2

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

于 2010-12-15T16:55:03.917 回答
2

使用 Perl 库SNMP_Session.pm解析 SNMP 陷阱的简单示例:基本 SNMP - 第 194 页

于 2010-12-15T20:57:35.283 回答
2

如果你得到 SNMP_Session 库(这完全是 Perl 顺便说一句)你可以做这样的事情:

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)
于 2010-12-15T23:20:37.657 回答