[PLUG] monitoring MAGNITUDE of internet activity - how?
Keith Lofstrom
keithl at kl-ic.com
Thu Mar 2 19:48:44 UTC 2017
On Wed, Mar 01, 2017 at 04:33:57PM -0600, Richard Owlett wrote:
> Is there a tool which can be
> "turned on" at time t0
> "turned off" at time t1
> which will report the number of
> "uploaded" bytes
> "downloaded" bytes
> in that interval?
For your purposes, perhaps you pipe a standard interface
reporting tool into a text file that you can edit into
.cvs format for a spreadsheet.
However, sometimes the easiest way to do stuff is to learn
a scripting language and automate a task. The good thing
about scripting languages is that you can always look at
the program to remind yourself how it works.
A decade ago, I wrote a cheesy perl hack to wrap around
"ifconfig" to look at total bandwidth used, then modified
it a year ago to look at specific interface usage. It is
very dependent on the behavior of /sbin/ifconfig for an
old distro, but it is easy to modify. It would be even
easier if "standard" tool maintainers were more
intelligent and responsible and less "creative".
Keith
--------------------------------------------------
#!/usr/bin/perl
# ifbr60 - average traffic rate for 60 seconds
# depends on specific behavior of /sbin/ifconfig
# V0.1.1 Keith Lofstrom KLIC 2016 Jan 30
my $delay = 60 ;
use bigint ; # the byte counts can be very large
my $ifc ; # interface name
my $encap ; # type of encapsulation
my $mac ; # mac (hardware) address
my $updn ; # interface up or down?
my $inet ; # ipv4 internet address
my $txrx ; # sum of transmit and receive bytes
my $err ; # sum of transmit and receive errors
my $ifcNum = scalar(@ARGV);
my @r, @t;
for my $pass (0..1) {
my $ifcnt = -1 ;
foreach my $port (@ARGV) {
$ifcnt += 1 ; # start at 0
open (IFOUT, "/sbin/ifconfig |" );
while (<IFOUT>) {
if( /(\w+)\s+Link encap:(\w+)/ ) {
$ifc = $1 ;
} elsif( /inet addr:([\d\.]+)/ ) {
$inet = $1 ;
} elsif( /RX bytes:(\d+).+TX bytes:(\d+)/ ) {
if( $port eq $ifc ) {
printf "%4s%14s%16s.r%16s.t\n", $ifc,$inet,$1,$2 ;
if( $pass == 0 ) {
$r[$ifcnt] = $1 ;
$t[$ifcnt] = $2 ;
} else {
my $rd = ( $1 - $r[$ifcnt] ) / $delay ;
my $td = ( $2 - $t[$ifcnt] ) / $delay ;
printf "%4s%14s%15.3f/s %15.3f/s\n\n", $ifc,$inet,$rd,$td ;
}
}
}
}
}
if( $pass == 0 ) {
printf("\n");
sleep $delay;
}
}
close IFOUT;
--
Keith Lofstrom keithl at keithl.com
More information about the PLUG
mailing list