dualpri.pl
上传用户:shbosideng
上传日期:2013-05-04
资源大小:1555k
文件大小:2k
源码类别:

SNMP编程

开发平台:

C/C++

  1. #!c:perlbin
  2. # dualpri.pl
  3. #
  4. #
  5. # Created by  Eric Billeter 
  6. # returns:
  7. # Modems in use (value1)
  8. # Chassis Capacity (value2)
  9. use SNMP_Session;
  10. use BER;
  11. use Socket;
  12. use strict;
  13. %snmpget::OIDS = (  'value1' =>  '1.3.6.1.4.1.429.1.16.4.1.2',
  14.                  );
  15. my($community,$router) = split /@/, $ARGV[0];
  16. die <<USAGE  unless $community && $router;
  17. USAGE: dualpri.pl 'SNMP_community'@'aaa.bbb.ccc.ddd'
  18. Where 'aaa.bbb.ccc.ddd' is the ip address for the Network Management Card.
  19. USAGE
  20. my($sysName,$sysUptime,$interfaces,$value1,$value2) =
  21.     snmpgettable($router,$community,'value1');
  22. exit(0);
  23. sub snmpgettable{
  24.   my($host,$community,$var) = @_;
  25.   my($next_oid,$enoid,$orig_oid, 
  26.      $response, $bindings, $binding, $value, $inoid,$outoid,
  27.      $upoid,$oid,@table,$tempo);
  28.   die "Unknown SNMP var $varn" 
  29.     unless $snmpget::OIDS{$var};
  30.   
  31.   $orig_oid = encode_oid(split /./, $snmpget::OIDS{$var});
  32.   $enoid=$orig_oid;
  33.   srand();
  34.   my $session = SNMP_Session->open ($host ,
  35.                                  $community, 
  36.                                  161);
  37.   for(;;)  {
  38.     if ($session->getnext_request_response(($enoid))) {
  39.       $response = $session->pdu_buffer;
  40.       ($bindings) = $session->decode_get_response ($response);
  41.       ($binding,$bindings) = decode_sequence ($bindings);
  42.       ($next_oid,$value) = decode_by_template ($binding, "%O%@");
  43.       # quit once we are outside the table
  44.       last unless BER::encoded_oid_prefix_p($orig_oid,$next_oid);
  45.         my $bulkindex = 3;
  46.         while( $bulkindex < "96" ){     
  47.         $tempo = substr ($value,$bulkindex,1);
  48.         $bulkindex=$bulkindex+4;
  49.         if( ord($tempo) eq '5' or ord($tempo) eq '3' or ord($tempo) eq '22' ){$value1=$value1 + 1 ;
  50.                 }
  51.         if( ord($tempo) eq '2' or ord($tempo) eq '5' or ord($tempo) eq '3' or ord($tempo) eq '22' ){$value2=$value2 + 1 ;
  52.                 }
  53.         }
  54.       push @table, $tempo;
  55.     } else {
  56.       die "No answer from $ARGV[0]n";
  57.     }
  58.     $enoid=$next_oid;
  59.   }
  60.   $session->close (); 
  61. if( $value1 eq ''){$value1 = 0 };
  62. if( $value2 eq ''){$value2 = 0 };
  63.      print "$value1n";
  64.      print "$value2n";
  65.   return (@table);
  66. }