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

SNMP编程

开发平台:

C/C++

  1. #!/usr/bin/perl -Tw
  2. ####################################################################
  3. #  linux_stats.pl     1.0            Mike Machado                  #
  4. #                                    mike@innercite.com            #
  5. #                                    2000-07-19                    #
  6. #                                                                  #
  7. #  Script to read traffic stats off linux 2.2 and greater systems  #
  8. #                                                                  #
  9. ####################################################################
  10. use strict;
  11. #### Options ####
  12. my $uptimeprog = '/usr/bin/uptime'; # Set to program to give system uptime
  13. my $hostnameprog = '/bin/hostname'; # Set to program to give system hostname
  14. my $defaultinterface = 'eth0'; # Set to default interface
  15. my $defaultstatfile = '/proc/net/dev'; # Set to traffic stats file location
  16. ##### Nothing below here should have to be changed #####
  17. if (@ARGV && $ARGV[0] eq '-h') {
  18. print "Usage: linux_stats.pl [interface] [stats file]n";
  19. print "tIf left blank 'eth0' and '/proc/net/dev' are usedn";
  20. print "tInterface of 'ALL' will total all interface traffic, excluding lon";
  21. exit;
  22. }
  23. my $interface = shift || $defaultinterface;
  24. my $statfile = shift || $defaultstatfile;
  25. # Clear path and get uptime
  26. delete $ENV{PATH};
  27. delete $ENV{BASH_ENV};
  28. my $uptime = `$uptimeprog`;
  29. chomp($uptime);
  30. my $hostname = `$hostnameprog`;
  31. chomp($hostname);
  32. my ($in, $out, $found);
  33. open(STATS, $statfile) || die "Cannot open $statfile: $!n";
  34. while (<STATS>) {
  35. my $line = $_;
  36. chomp($line);
  37. if (uc($interface) eq 'ALL') {
  38. if ($line =~ /^s+(.*):s*(d+)s+d+s+d+s+d+s+d+s+d+s+d+s+d+s+(d+)s+d+s+d+s+d+s+d+s+d+s+d+s+d+$/) {
  39. next if $1 eq 'lo';
  40. $in += $2;
  41. $out += $3;
  42. $found++;
  43. }
  44. } else {
  45. if ($line =~ /^s+$interface:s*(d+)s+d+s+d+s+d+s+d+s+d+s+d+s+d+s+(d+)s+d+s+d+s+d+s+d+s+d+s+d+s+d+$/) {
  46. $in = $1;
  47. $out = $2;
  48. $found = 1;
  49. last;
  50. }
  51. }
  52. }
  53. close(STATS);
  54. if (!$found) {
  55. print "0n0n$uptimen$hostname: Unknown Interface: $interfacen";
  56. } else {
  57. print "$inn$outn$uptimen$hostname: Interface: $interface";
  58. if (uc($interface) eq 'ALL') {
  59. print " (counted $found interface";
  60. if ($found > 1) {
  61. print "s";
  62. }
  63. print ")";
  64. }
  65. print "n";
  66. }