Net-SNMPのPerlモジュールでTrap送信

このQ&Aのポイント
  • Net-SNMP ver5.2.2を使用してVineLinuxでTrap送信を行うためのPerlスクリプトを作成しています。
  • 現在、SNMPv2cのTrapをポストすることが目的ですが、送信されるTrapのバージョンはv1となってしまいます。
  • また、oid部分の変更やパラメータの無しに変更しても、送信されるTrap内容には変化がありません。
回答を見る
  • ベストアンサー

Net-SNMPのPerlモジュールでTrap送信

現在VineLinuxにNet-SNMP ver5.2.2を インストールした環境で Trapを送信するPerlスクリプトを作成しております。 やりたいことは、マネージャに対し SNMPv2cのTrapをポストすることです。 # 現段階ではSNMPv2であればどのようなTrap # でも構いません。 net-snmp-5.2.2/perl/SNMP/README の内容にならって、下記のようなスクリプトを 作成しました(一部を抜粋)。 ------- スクリプト Start ------- 《 省 略 》 # TrapSessionオブジェクトを生成 $sess = new SNMP::TrapSession(DestHost=>$host, Community=>$comm); # Trap送信 $sess->trap(oid => 'snmpRisingAlarm', uptime => 1234, [[ifIndex, 1, 1], [sysLocation, 0, "here"]]); 《 省 略 》 ------- スクリプト End ------- READMEによると上記フォーマットは v2のものとなるはずですが、 本処理によって送信されるTrapのバージョンは v1となってしまいます。 また、oid部分を変更しても 送信するTrap内容の変化はなく、さらに $sess->trap(); とパラメータ無しに変更しても 同じ内容のTrapが送信されているようです...。 全てにおいて勉強不足状態での質問で 大変恐縮ではありますが、 御存じの方がいらっしゃいましたら、 ご教授お願い致します。

  • ch09
  • お礼率100% (7/7)
  • Perl
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

まず、SNMPが何かもわからない素人であることを先に述べておきますが:-) READMEを見ると、 Version - default '1', [2 (same as 2c), 2c, 3] という項目があります。ので、TrapSessionでVersion => 2 を渡すと解決しないでしょうか。 また、以下のCPANモジュールもあるようです。 http://search.cpan.org/~dtown/Net-SNMP-5.2.0/

ch09
質問者

お礼

ありがとうございます。 実は本件を書き込んだあと, TrapSessionにVersionのパラメータが あることに気づきを2を渡すようにしたのですが, 結果はTrap自体ポストすることが出来なくなりました; # ってことはこのモジュールはv1Trapしか # ポストできないのかと考え始めました 私はSNMPだけでなくperlについても素人で, 今まで開発はCでしか行ったことがありません...。 webサイトで色々みていたところ, use NET::SNMPと宣言するモジュールについては snmmpv2_trap()というメソッドが あるらしく,このモジュールを裏で探していたんです。 CPANってところで公開されていたんですね。 Perl自体やモジュールに関する知識が乏しいため 大変助かりました!! CPANのモジュールで試してみたいと思います!! APIのI/Fを調べるのに,また時間を費やしそうですが... 本当にありがとうございます。

関連するQ&A

  • Net-Snmpのtraphandleよりshell起動

    【環境】RedHat Linux as 3 【現在】  Net-SnmpのTrapHandleを取得し  標準入力から受けた情報をファイルに出力する処理を作成中です。 出力するファイル名を現在時刻にしたいのですが  シェルを実行してもファイルが出力されません。  Perl初心者で手探りで調査していますが煮詰まってしまいました。  すみませんがご教示願います。 【処理内容】  ・snmptrapd.conf  traphandle default /root/bin/trap.sh ・trap.sh  #!/usr/bin/perl  @tim = localtime(time);  $tim[5] += 1900;  $tim[4] += 1;  for($idx=0;$idx<5;$idx++){    $tim[$idx] = sprintf("%02d",$tim[$idx]);  }  while (<STDING>) {    $buf. = $_;  }  open (FILE,">>/tmp/$T[5]$T[4]$T[3].txt");  print FILE $buf;  print FILE "--------\n";  close(FILE);

    • ベストアンサー
    • Perl
  • BlatJ:フォームを使ったメール送信-

    ほんとにホトホト困っています。 どなたか教えていただけますか? ======== Perlでアンケートフォームを作り、その内容をメール送信しようと思っているのですが、NTサーバーに"Sendmail"機能が無いので、フリーソフトの"BlatJ"というものを入れてみたのですが、以下の疑問点があります。 1.コマンドラインからのインストールがうまくいってない?。  Readmeファイルの通りしたのですが、テスト用メール送信CGIさえうまくいかないのでインストールで失敗しているかもしれません。インストールが成功しているかどうか確認する方法はないですか? 2.メールの送信方法として"BlatJ ファイル名 -t送信先アドレス"と書かれてあります。実際どのようにしてPerlに組み込むのでしょうか? どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • SNMPトラップについて

    こんばんは。 JP1でCiscoなどネットワーク機器の監視を検討しています。 機器からのSNMPトラップで障害を検知したいと思っています。 そこで、SNMPトラップの設計をしたいのですが、 トラップ番号は機器ベンダーにより、異なるのでしょうか?。 ベンダー間で標準化されたトラップを使用したいと思っていましたが 機器ベンダーに調べる必要があるのでしょうか?。 アドバイスをお願いします。

  • PerlでSMTP-AUTH認証をする

    現在、さくらのレンタルサーバにてperlスクリプトを稼動しています。 今回、さくらのレンタルサーバのメール認証がPOP before SMTPからSMTP認証(SMTP-AUTH)に変更になりましたので、perlスクリプト内で自動メール送信させるのにNet::SMTP::TLSモジュールを利用することにしました。そこで (1)SMTPサーバー名、ポート番号、ユーザー名、パスワードを設定する (2)宛先などの必要な設定をする (3)メール内容を設定する (4)メールヘッダを設定する (5)メールを送信する という流れで現在perlスクリプトを以下のように記述しました。 #!/usr/bin/perl use CGI::Carp qw(fatalsToBrowser); use Net::SMTP::TLS; use Authen::SASL; my $smtp = Net::SMTP::TLS->new($mailhost, Port => $mailport, User => $mail_username, Password => $mail_password ); $smtp->mail($from_mail); $smtp->to($tomail); $smtp->data(); $smtp->datasend($header); $smtp->datasend($message); $smtp->dataend(); $smtp->quit; 変数の値は割愛していますが、 上記のスクリプトは、POP before SMTPの時は問題なくメール送信できたのですが、サーバのメール認証がSMTP認証(SMTP-AUTH)に変更になってからは以下のようなエラーが出ます。 invalid SSL_version specified at /usr/local/perl/5.8/lib/perl5/site_perl/5.8/IO/Socket/SSL.pm line 418 何か間違いであるとか、他に必要な設定がありますでしょうか? 宜しくご教授お願いいたします。

    • ベストアンサー
    • Perl
  • perlがうごきません

    <html> <head> <title>form3</title> </head> <body> <form action="form3.cgi" method="post" name="form3"> <input type="text"name="form3"> <input type="submit"value="送信"> </form> </body> </html> ::::::::::::::::::::::::::::::: #! /usr/bin/perl if($ENV{"REQUEST_METHOD"} eq "GET"){ $str=$ENV{QUERY_STRING"}; }else{ read(STDIN, $str, $ENV{"CONTENT_LENGTH"}); } $str=~ tr/+/ /; $str=~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c", hex($1))/eg; foreach(split(/&/, $str)){ my ($key, $value)=split(/=/, $_); $data{$key}=$value; } print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head><title>form3</title></head>\n"; print "<body>$data{'form3'}</body>\n"; print "</html>\n"; exit; :::::::::::::::::::::::::::::::: どうしてもうごきません。 どこかスクリプトがまちがっているのでしょうか。 パールのパスはあっています。

    • ベストアンサー
    • Perl
  • Perlでの$ENV{REMOTE_ADD}の信ぴょう性を教えてくださ

    Perlでの$ENV{REMOTE_ADD}の信ぴょう性を教えてください。 Perlによる、CGIサイトを運営しています。 IPアドレスを$ENV{REMOTE_ADD}で取得し、Firewall内プライベートアドレス(10.*.*.*)以外はloginをしないと内容が表示されないようにスクリプトをつくり、Firewallの内外から動作確認し、きちんと動いていたのでそのまま運用していました。 ところが、先日海外(ハワイ)に行った際、アップルストアでそのサイトにアクセスした際にloginなしで内容が表示されてしまいました。 アップルストアに置いてあったPCなので、IP偽装などは行っていないと思われますので、どうして見えるのだろうかわかりません。 $ENV{REMOTE_ADD}で取得した値は信ぴょう性がないのでしょうか?それとも、10.*.*.*はグローバルアドレスとして使用可能なのでしょうか?

    • ベストアンサー
    • Perl
  • pp (Perl Packager) で requireの代わりになるもの

    ActivePerl v5.8.7 をWin-2000で使っています。 オリジナルのスクリプト内で、これもオリジナルのモジュールをrequireしている場合に、 ppでexe形式に変換できるのですが、他のPCでコピーして使おうとしたときに、 ”require先のファイルが無い”とエラーになってしまいます。 これを回避する方法はないでしょうか? (requireの代わりに、該当箇所にモジュールファイルの内容すべてをペーストしてしまう、ということで一時凌ぎはできるのですが、何か違うような気がしています) よろしくお願いいたします。 ------------------------ #!perl require "c:\\perl\\sub\\userfunc.pm"; : : ------------------------ pp -o sample.exe sample.pl c:\perl\sub\userfunc.pm とやって、exeを作っています。 (c:\perl\sub\userfunc.pmを持たないPCで)実行すると、 C:\>sample.exe Can't locate c:\perl\sub\userfunc.pm in @INC (@INC contains: ・・・/inc CODE(0xdca6ac) . CODE( 0xdca7cc)) at script/sample.pl line 2.

    • ベストアンサー
    • Perl
  • はじめまして。

    はじめまして。 現在、無料で配布されているスクリプトを見て、perlを勉強しています。 以下の内容についてですが、どうしても分からないのでどなたか教えてただけませんか。 $test=$_ ? "abc":"def"; $_が0の場合は$testは「def」になり、$_g1の場合は$testは「abc」となるのですが、ここで使われている「?」と「:」の意味というか使い方が分かりません。 「?」はメタ文字かと思って調べてみましたが、それらしい内容のサイトを見つけられませんでした。 どなたかよろしくお願いします。

    • ベストアンサー
    • Perl
  • CiscoのスイッチでSNMPでモジュールダウンのTrapをあげたい

    シスコのCatalyst6500でも4500でもモジュールタイプの機器ならなんでもいいのですが、モジュールが死んでしまった時にTrapをあげるよう設定したいです。 "snmp-server enable traps module"というコマンドがあるようですが、このコマンドでは何スロット目のモジュールが認識しなくなったのか分からないのでは?と思います。 そもそも認識しなくなったモジュールのTrapはあげることが出来るのでしょうか。出来るならどのような設定か教えていただきたいです。

  • PHPでSNMPトラップは受け取れる?

    PHPでSNMPトラップは受け取れるのでしょうか? PHPには、いくつかのSNMPの関数があり、MIBの値などは取ってくれるのですが、トラップを受け取れるのかはよく分かりません。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう