traptoemail
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:2k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. #!/usr/bin/perl
  2. # This is a snmptrapd handler script to convert snmp traps into email
  3. # messages.
  4. # Usage:
  5. # Put a line like the following in your snmptrapd.conf file:
  6. #  traphandle TRAPOID|default /usr/local/bin/traptoemail [-f FROM] [-s SMTPSERVER]b ADDRESSES
  7. #     FROM defaults to "root"
  8. #     SMTPSERVER defaults to "localhost"
  9. use Net::SMTP;
  10. use Getopt::Std;
  11. $opts{'s'} = "localhost";
  12. $opts{'f'} = 'root@' . `hostname`;
  13. chomp($opts{'f'});
  14. getopts("hs:f:", %opts);
  15. if ($opts{'h'}) {
  16.     print "
  17. traptoemail [-s smtpserver] [-f fromaddress] toaddress [...]
  18.   traptoemail shouldn't be called interatively by a user.  It is
  19.   designed to be called as an snmptrapd extension via a "traphandle"
  20.   directive in the snmptrapd.conf file.  See the snmptrapd.conf file for
  21.   details.
  22.   Options:
  23.     -s smtpserver      Sets the smtpserver for where to send the mail through.
  24.     -f fromaddress     Sets the email address to be used on the From: line.
  25.     toaddress          Where you want the email sent to.
  26. ";
  27.     exit;
  28. }
  29. die "no recepients to send mail to" if ($#ARGV < 0);
  30. # process the trap:
  31. $hostname = <STDIN>;
  32. chomp($hostname);
  33. $ipaddress = <STDIN>;
  34. chomp($ipaddress);
  35. $maxlen = 0;
  36. while(<STDIN>) {
  37.     ($oid, $value) = /([^s]+)s+(.*)/;
  38.     push @oids, $oid;
  39.     push @values, $value;
  40.     $maxlen = (length($oid) > $maxlen) ? length($oid) : $maxlen;
  41. }
  42. $maxlen = 60 if ($maxlen > 60);
  43. $formatstr = "%" . $maxlen . "s  %sn";
  44. die "illegal trap" if ($#oids < 1);
  45. # send the message
  46. $message = Net::SMTP->new($opts{'s'}) || die "can't talk to server $opts{'s'}n";
  47. $message->mail($opts{'f'});
  48. $message->to(@ARGV) || die "failed to send to the recepients ",join(",",@ARGV),": $!";
  49. $message->data();
  50. $message->datasend("To: " . join(", ",@ARGV) . "n");
  51. $message->datasend("From: $opts{f}n");
  52. $message->datasend("Subject: trap received from $hostname: $values[1]n");
  53. $message->datasend("n");
  54. $message->datasend("Host: $hostname ($ipaddress)n");
  55. for($i = 0; $i <= $#oids; $i++) {
  56.     $message->datasend(sprintf($formatstr, $oids[$i], $values[$i]));
  57. }
  58. $message->dataend();
  59. $message->quit;