#!/usr/bin/perl -w # (C) 2003-2007 Willem Jan Hengeveld # Web: http://www.xs4all.nl/~itsme/ # http://wiki.xda-developers.com/ # # $Id: netmon 1502 2007-04-15 07:54:20Z itsme $ # use strict; # gives trafic info on all network devices. use IO::File; my $maxdepth= 601; my @s= (getstats()); my $i=0; while (1) { sleep(1); push @s, getstats(); if ($#s>$maxdepth) { shift @s; } print "\033[1;1H"; if (($i%30)==0) { print "\033[2J"; } for my $d (qw(1 5 10 30 60 300 600)) { last if ($d>=$#s); writespeed($s[-1-$d], $s[-1], $d); printf("\n"); } $i++; } sub writespeed { my ($s1, $s2, $d)= @_; # printf("%-10s %8s %8s %8s %8s %8s %8s %8s %8s\n", sprintf("%2d:%02d", int($d/60), $d%60), qw(inb inpkt outb outpkt infrm outfrm inerr outerr)); for my $if (sort keys %$s2) { next if (!exists $s1->{$if}); printf("%-6s : %s %s %s %s %s %s %s %s\n", $if, bps($s1,$s2,$if,0, $d), pps($s1,$s2,$if,1, $d), bps($s1,$s2,$if,8, $d), pps($s1,$s2,$if,9, $d), pps($s1,$s2,$if,5, $d), pps($s1,$s2,$if,13, $d), pps($s1,$s2,$if,2, $d), pps($s1,$s2,$if,10, $d)); } } sub bps { my ($s1,$s2,$if,$n, $d) = @_; my $bps= ($s2->{$if}[$n]- $s1->{$if}[$n])/$d; my $limit= 1; my @names= (" ", qw(k M G)); for (0..$#names) { if ($bps<$limit*1000) { return sprintf("%7.2f%s", $bps/$limit, $names[$_]); } $limit*=1000; } return "########"; } sub pps { my ($s1,$s2,$if,$n, $d) = @_; return bps($s1,$s2,$if,$n, $d); } sub getstats { my $fh= IO::File->new("/proc/net/dev", "r") or die "procnetdev: $!\n"; my %stats; while (<$fh>) { if (/^(.{6}):\s*(\d.*\d)\s*$/) { my ($if, $statsline)= ($1, $2); $if =~ s/\s//g; next if ($statsline =~ /^(0|\s)+/); $stats{$if}= [split(/\s+/, $statsline)]; } } $fh->close(); return \%stats; }