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

SNMP编程

开发平台:

C/C++

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