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

SNMP编程

开发平台:

Unix_Linux

  1. use strict;
  2. use vars qw();
  3. use SNMP qw();
  4. &SNMP::initMib();
  5. &SNMP::loadModules(
  6.   'RFC2127-MIB',
  7.   );
  8. sub trap_call_setup;
  9. sub trap_dummy;
  10. #
  11. # should eventually get these out of the MIB...
  12. #
  13. my %dispatch_table = (
  14.   'isdnMibCallInformation', &trap_call_setup,
  15.   '.', &trap_dummy,
  16. );
  17. sub trap_dispatcher
  18. {
  19.   my $session = shift;
  20.   my $ref = shift;
  21.   my $trapType;
  22.   my ($reqid, $addr, $community);
  23.   # if this is a timeout, then there will be no args...
  24.   if (defined($ref)) {
  25.     $ref->[1]->[2] = SNMP::translateObj($ref->[1]->val);
  26.     $trapType = $ref->[1]->val;
  27.     my $args = shift;
  28.     ($reqid, $addr, $community) = @{$args};
  29.   } else {
  30.     $trapType = 'timeout';
  31.   }
  32.   if (defined($dispatch_table{$trapType})) {
  33.     &{$dispatch_table{$trapType}}($session, $ref);
  34.   } elsif (defined($dispatch_table{'.'})) {
  35.     &{$dispatch_table{'.'}}($session, $ref);
  36.   } else {
  37.     # don't do anything... silently discard.
  38.   }
  39. }
  40. sub trap_dummy
  41. {
  42.   my $session = shift;
  43.   my $ref = shift;
  44.   my $trapType = $ref->[1]->val;
  45.   warn "unexpected trap " . $trapType;
  46. }
  47. sub trap_call_setup
  48. {
  49.   my $session = shift;
  50.   my $varlist = shift;
  51.   my $args = shift;
  52.   my $ifIndex = $varlist->[2]->val;
  53.   my $isdnBearerOperStatus = $varlist->[3]->val;
  54.   my $isdnBearerPeerAddress = $varlist->[4]->val;
  55.   my $isdnBearerPeerSubAddress = $varlist->[5]->val;
  56.   my $isdnBearerInfoType = $varlist->[6]->val;
  57.   my $isdnBearerCallOrigin = $varlist->[5]->val;
  58.   my ($reqid, $ipaddr, $community) = @{$args};
  59.   printf "Call from %s", $isdnBearerPeerAddress;
  60.   printf "*%s", $isdnBearerPeerSubAddress if ($isdnBearerPeerSubAddress ne '');
  61.   printf "n";
  62. }
  63. my $session = new SNMP::Session(
  64.   DestHost => '0.0.0.0',
  65.   LocalPort => 162,
  66.   Version => '2c',
  67.   UseEnums => 0,
  68.   );
  69. if (!defined($session)) {
  70.   die "can't create listener session";
  71. }
  72. # otherwise assume that ErrorNum is zero...
  73. $session->SNMP::_catch([&trap_dispatcher, $session]);
  74. &SNMP::MainLoop();