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