|
Packit |
667938 |
#!/usr/bin/perl -Tw
|
|
Packit |
667938 |
####################################################################
|
|
Packit |
667938 |
# linux_stats.pl 1.0 Mike Machado #
|
|
Packit |
667938 |
# mike@innercite.com #
|
|
Packit |
667938 |
# 2000-07-19 #
|
|
Packit |
667938 |
# #
|
|
Packit |
667938 |
# Script to read traffic stats off linux 2.2 and greater systems #
|
|
Packit |
667938 |
# #
|
|
Packit |
667938 |
####################################################################
|
|
Packit |
667938 |
use strict;
|
|
Packit |
667938 |
|
|
Packit |
667938 |
|
|
Packit |
667938 |
|
|
Packit |
667938 |
#### Options ####
|
|
Packit |
667938 |
my $uptimeprog = '/usr/bin/uptime'; # Set to program to give system uptime
|
|
Packit |
667938 |
my $hostnameprog = '/bin/hostname'; # Set to program to give system hostname
|
|
Packit |
667938 |
my $defaultinterface = 'eth0'; # Set to default interface
|
|
Packit |
667938 |
my $defaultstatfile = '/proc/net/dev'; # Set to traffic stats file location
|
|
Packit |
667938 |
|
|
Packit |
667938 |
|
|
Packit |
667938 |
##### Nothing below here should have to be changed #####
|
|
Packit |
667938 |
|
|
Packit |
667938 |
if (@ARGV && $ARGV[0] eq '-h') {
|
|
Packit |
667938 |
print "Usage: linux_stats.pl [interface] [stats file]\n";
|
|
Packit |
667938 |
print "\tIf left blank 'eth0' and '/proc/net/dev' are used\n";
|
|
Packit |
667938 |
print "\tInterface of 'ALL' will total all interface traffic, excluding lo\n";
|
|
Packit |
667938 |
exit;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
|
|
Packit |
667938 |
my $interface = shift || $defaultinterface;
|
|
Packit |
667938 |
my $statfile = shift || $defaultstatfile;
|
|
Packit |
667938 |
|
|
Packit |
667938 |
# Clear path and get uptime
|
|
Packit |
667938 |
delete $ENV{PATH};
|
|
Packit |
667938 |
delete $ENV{BASH_ENV};
|
|
Packit |
667938 |
my $uptime = `$uptimeprog`;
|
|
Packit |
667938 |
chomp($uptime);
|
|
Packit |
667938 |
my $hostname = `$hostnameprog`;
|
|
Packit |
667938 |
chomp($hostname);
|
|
Packit |
667938 |
|
|
Packit |
667938 |
my ($in, $out, $found);
|
|
Packit |
667938 |
open(STATS, $statfile) || die "Cannot open $statfile: $!\n";
|
|
Packit |
667938 |
while (<STATS>) {
|
|
Packit |
667938 |
my $line = $_;
|
|
Packit |
667938 |
chomp($line);
|
|
Packit |
667938 |
if (uc($interface) eq 'ALL') {
|
|
Packit |
667938 |
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+$/) {
|
|
Packit |
667938 |
next if $1 eq 'lo';
|
|
Packit |
667938 |
$in += $2;
|
|
Packit |
667938 |
$out += $3;
|
|
Packit |
667938 |
$found++;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
} else {
|
|
Packit |
667938 |
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+$/) {
|
|
Packit |
667938 |
$in = $1;
|
|
Packit |
667938 |
$out = $2;
|
|
Packit |
667938 |
$found = 1;
|
|
Packit |
667938 |
last;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
close(STATS);
|
|
Packit |
667938 |
|
|
Packit |
667938 |
if (!$found) {
|
|
Packit |
667938 |
print "0\n0\n$uptime\n$hostname: Unknown Interface: $interface\n";
|
|
Packit |
667938 |
} else {
|
|
Packit |
667938 |
print "$in\n$out\n$uptime\n$hostname: Interface: $interface";
|
|
Packit |
667938 |
if (uc($interface) eq 'ALL') {
|
|
Packit |
667938 |
print " (counted $found interface";
|
|
Packit |
667938 |
if ($found > 1) {
|
|
Packit |
667938 |
print "s";
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
print ")";
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
print "\n";
|
|
Packit |
667938 |
}
|