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 を使用してソフトウェアを出荷することもできましたが、そうすると、避けたいと思っていたクロスプラットフォームの問題が発生してしまいます。

SNMP4J などで Java ではなく Perl を使用している理由は、以前は HP NNM の perl API に依存していたレガシー perl コードがあり、ライセンス コストを削減するためにフリー ソフトウェア バックエンドに移行する必要があるためです。

4

3 に答える 3

2

パケットを受信して​​解析するためのライブラリ ルーチンをお探しですか? UDP パケットを自分でリッスンし、受信したパケットを snmp ライブラリに渡して解析できますか? perlではなくpythonを使用していますが、それが私がやっていることです。

于 2010-12-15T16:55:03.917 に答える
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 に答える
2

SNMP トラップを解析するためにPerl ライブラリSNMP_Session.pmを使用する簡単な例: Essential SNMP - page 194 .

于 2010-12-15T20:57:35.283 に答える