• ベストアンサー
  • すぐに回答を!

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が送信されているようです...。 全てにおいて勉強不足状態での質問で 大変恐縮ではありますが、 御存じの方がいらっしゃいましたら、 ご教授お願い致します。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数1561
  • ありがとう数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/

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • net-snmpが起動できません

    net-snmpを起動しておき、mrtgを使ってトラフィックなどの情報を見ようとしたのですが、 net-snmpがうまく起動できません。 [root@*******]# /etc/init.d/snmpd start と入力すると [root@*******]# snmpd ư: /usr/sbin/snmpd: symbol lookup error: /usr/sbin/snmpd: undefined symbol: snmp_log_syslogname とエラーを返されてしまい、このエラーの内容もよくわかりません。 OSはFedora Core 3で、 [root@*******]# yum -y install net-snmp としてインストールし、 snmpd.confを次のように設定しています。 ・コミュニティの設定 com2sec local localhost private com2sec mynetwork 192.168.0.0/24 public ・グループの設定 group MyROGroup v1 mynetwork group MyROGroup v2c mynetwork ・ビューの設定 view all included .1 80 ・アクセス権の設定 access MyROGroup "" any noauth exact all none none access MyRWGroup "" any noauth exact all all none ・ディスク使用率の設定 disk / 10000 デフォルトの設定ファイルから変更したのは以上です。 どうしたらうまく起動できるようになるのか、どなたかご教示お願いします。

  • 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
  • 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
  • Net::SMTPだけで添付ファイルつきのメールを送信したいです。

    フォームの内容をCSVファイルに出力し、CSVファイルをメールに添付して送信する機能をPerlで実現したいのですが、 諸事情によりパッケージ(MIMEなど)の導入ができないため、ActivePerlに標準で入っているNet::SMTPだけを使用して実現する必要があります。 どうすれば実現可能か御教示いただけると幸いです。 IIS6.0 ActivePerl 5.10.0

  • BlatJ:フォームを使ったメール送信-

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

    • ベストアンサー
    • Perl
  • perlでSMPT認証してメールを送信したい。

    こんばんわ。 Perlで一点伺いたいことがございます。 SMTP認証して、メールを送信したいのですが ネット上でサンプルをさがしてきて実際に試したのですが うまくいきません。 どうしたらいでしょうか?以下が実施に動かしているコードです。 #!/perl/perl/bin/perl use strict; use warnings; use CGI::Carp qw(fatalsToBrowser); print"content-type: text/html\r\n\r\n"; print "Hello World!\n"; use Net::SMTP; #SMTPサーバの指定 my $mailhost = 'smtp.gmail.com'; my $mailport = 587; my $mail_username = 'XXX@gmail.com'; my $mail_password = 'パスワード'; my $to_mail = '宛先'; my $from_mail = '送信先'; my $smtp = Net::SMTP->new($mailhost,Port => $mailport); $smtp->auth($mail_username, $mail_password); #メールの送信先 $smtp->mail($from_mail); $smtp->to($to_mail); #メールの内容 $smtp->data(); $smtp->datasend("From: $from_mail\n"); $smtp->datasend("To: $to_mail\n"); $smtp->datasend("Subject: test\n"); $smtp->datasend("\n"); $smtp->datasend("test\n"); #メール内容終わり $smtp->dataend(); #接続を切る。 $smtp->quit; print $smtp; ほぼコピーアンドペーストなのですが、うまくいきません。 とりあえず、newしたオブジェクト $smtpを出力してみると アドレス的なものが表示されます。 Net::SMTP=GLOB(0x7d15ec) ただ、これは認証情報が適当でも出力されるようです。 何度やってもメールは届いていないようなので認証の時点でまちがっているのでしょうか? ただ、認証情報は実際にメールソフトで使っているものなので、間違いないと思うのですが、識者の方よろしくご教授お願いします。

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

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

  • snmp trap を表示できるフリーソフト

    open view までは入れることができないのですが 試験的に snmp trap を受けて表示させたいと思っています。 何かフリーウェアでいいソフトないでしょうか? win か freebsd で探しています。 よろしくお願いします。

  • 外部スクリプトを切り離して実行させたい

    負荷が高まった時に何が原因か調べる為に外部スクリプトを呼び出したいのですが、 スクリプトの中で外部スクリプトを呼び出すと、実行が終わるまで待ってしまいます。 たとえばこの様な1.shを実行した場合 1.shの中身 #!/bin/sh AVERAGE=`uptime|awk '{print $(NF-2)}'|sed 's|\.||;s|,||'` if [ $AVERAGE -gt 500 ] ; then 2.sh fi ~略~ 負荷が高まり,2.shを実行して、fiの後の処理は2.shが終わるまで待つ事になってしまいます。 2.shの実行を切り離してfiの後の処理もスムーズに行いたいです。 現在、切り離しの為、メール送信させてトリガで2.shを動かしてますが、 mailユーザで2.shを実行すると、動作が非常に遅いのです。 root権限で、かつ画面がある状態で実行すると高速に処理されるようでした。 メール送信時に実行するスクリプトを1.5.shに、sudoを利用して root権限で実行されるようにしましたが、画面がない為か処理が遅いのです。 1.5.shの中身 sudo su - root -c "2.sh" tty?のようなことだと考えてますが(アバウトですいません)画面がない所から実行すると よくないようで、メールトリガのやり方でなく、1.shから2.shを実行する時に切り離すことが できないだろうかと考えました。 画面が問題なら解決しないかもしれないですが、 どなたかご存知の方がいたら教えてくださいませ。

  • Perl メールフォーム

    Perl勉強中です。ご教示お願いします。 #!/usr/bin/perl -w use Encode qw(from_to encode); use Net::SMTP; use strict; my $from = 'xxxx@xxxxx.jp'; my $mailto= 'xxxx@xxxxx.jp'; my $mailcc= 'xxxx@xxxxx.jp'; my $subject = 'ホームページからのお問い合わせ'; from_to($subject, 'shiftjis', 'iso-2022-jp'); encode('MIME-Header-ISO_2022_JP', $subject); my $header = << "MAILHEADER"; From: $from To: $mailto CC: $mailcc Subject: $subject Mime-Version: 1.0 Content-Type: text/plain; charset = 'ISO-2022-JP" Content-Trensfer-Encoding: 7bit MAILHEADER my $message = "テスト"; from_to($message, 'shiftjis', 'iso-2022-jp'); my $smtp = Net::SMTP->new('xxxx-xxxx.jp'); if ( !$smtp ) { print "メールサーバーにアクセスできません!"; exit; } #メール送信 $smtp->mail($from); $smtp->to($mailto); $smtp->to($mailcc); $smtp->data(); $smtp->datasend($header); $smtp->datasend($message); $smtp->dataend(); $smtp->quit; 現在ここまでできています。 「ホームページ→お問い合わせクリック→メール送信」 そして、今回教えていただきたいのが、 イメージなのですが、 ホームページ→お問い合わせクリック→メールフォームのページに移動→内容入力 →確認ボタンクリック→確認画面→送信ボタンクリック→送信+送ってきた人へ自動返信(定型文) という風にしたいのですが、どうすればいいのかわかりません・・・ できればコードを教えて頂ければ嬉しいです。

    • ベストアンサー
    • Perl