Here is a shell script to see how many (kilo-, mega-, giga-, terra-) bytes pass a network interface. The output looks like this:
$ ./network-traffic.sh --help
Usage: ./network-traffic.sh [-i INTERFACE] [-s INTERVAL] [-c COUNT]
-i INTERFACE
The interface to monitor, default is eth0.
-s INTERVAL
The time to wait in seconds between measurements, default is 3 seconds.
-c COUNT
The number of times to measure, default is 10 times.
$ ./network-traffic.sh
Monitoring eth0 every 3 seconds. (RXbyte total = 706 Mb TXbytes total = 1 Gb)
RXbytes = 104 b TXbytes = 194 b
RXbytes = 80 b TXbytes = 188 b
RXbytes = 52 b TXbytes = 146 b
RXbytes = 689 b TXbytes = 8 Kb
RXbytes = 52 b TXbytes = 146 b
RXbytes = 52 b TXbytes = 146 b
RXbytes = 52 b TXbytes = 146 b
RXbytes = 52 b TXbytes = 146 b
RXbytes = 4 Kb TXbytes = 4 Kb
RXbytes = 716 b TXbytes = 5 KbHere is the script:
#!/bin/sh
usage(){
echo "Usage: $0 [-i INTERFACE] [-s INTERVAL] [-c COUNT]"
echo
echo "-i INTERFACE"
echo " The interface to monitor, default is eth0."
echo "-s INTERVAL"
echo " The time to wait in seconds between measurements, default is 3 seconds."
echo "-c COUNT"
echo " The number of times to measure, default is 10 times."
exit 3
}
readargs(){
while [ "$#" -gt 0 ] ; do
case "$1" in
-i)
if [ "$2" ] ; then
interface="$2"
shift ; shift
else
echo "Missing a value for $1."
echo
shift
usage
fi
;;
-s)
if [ "$2" ] ; then
sleep="$2"
shift ; shift
else
echo "Missing a value for $1."
echo
shift
usage
fi
;;
-c)
if [ "$2" ] ; then
counter="$2"
shift ; shift
else
echo "Missing a value for $1."
echo
shift
usage
fi
;;
*)
echo "Unknown option $1."
echo
shift
usage
;;
esac
done
}
checkargs(){
if [ ! "$interface" ] ; then
interface="eth0"
fi
if [ ! "$sleep" ] ; then
sleep="3"
fi
if [ ! "$counter" ] ; then
counter="10"
fi
}
printrxbytes(){
/sbin/ifconfig "$interface" | grep "RX bytes" | cut -d: -f2 | awk '{ print $1 }'
}
printtxbytes(){
/sbin/ifconfig "$interface" | grep "TX bytes" | cut -d: -f3 | awk '{ print $1 }'
}
bytestohumanreadable(){
multiplier="0"
number="$1"
while [ "$number" -ge 1024 ] ; do
multiplier=$(($multiplier+1))
number=$(($number/1024))
done
case "$multiplier" in
1)
echo "$number Kb"
;;
2)
echo "$number Mb"
;;
3)
echo "$number Gb"
;;
4)
echo "$number Tb"
;;
*)
echo "$1 b"
;;
esac
}
printresults(){
while [ "$counter" -ge 0 ] ; do
counter=$(($counter - 1))
if [ "$rxbytes" ] ; then
oldrxbytes="$rxbytes"
oldtxbytes="$txbytes"
fi
rxbytes=$(printrxbytes)
txbytes=$(printtxbytes)
if [ "$oldrxbytes" -a "$rxbytes" -a "$oldtxbytes" -a "$txbytes" ] ; then
echo "RXbytes = $(bytestohumanreadable $(($rxbytes - $oldrxbytes))) TXbytes = $(bytestohumanreadable $(($txbytes - $oldtxbytes)))"
else
echo "Monitoring $interface every $sleep seconds. (RXbyte total = $(bytestohumanreadable $rxbytes) TXbytes total = $(bytestohumanreadable $txbytes))"
fi
sleep "$sleep"
done
}
readargs "$@"
checkargs
printresults| About | Consultancy | Articles | Contact |
|
|
|
|
|
| References | Red Hat Certified Architect | By Robert de Bock | Robert de Bock |
| Curriculum Vitae | By Fred Clausen | +31 6 14 39 58 72 | |
| By Nelson Manning | robert@meinit.nl |
Comments
Hi! I was looking at your
Hi!
I was looking at your script and looks very neat, almost readable for my limited programming skills. Unfortunately it's not exactly what I'm looking for, but very close... I just wanna keep track of the total amount to not surpass a monthly limit.
Is there a way to modify your script to store the network traffic daily/weekly/monthly? Or at the end of each session? Something like:
ifconfig eth0 | grep bytes >>storeit.txtbut automatically...The counters spitted by ifconfig (RX bytes and TX bytes) get renewed at each session? (
man ifconfigdidn't help much). How would I execute this command every time before the counter gets renewed?Hopefully this explains the idea...
Thanks!
fbv
Ifconfig keeps track of the
Ifconfig keeps track of the traffic but resets this information at reboot.
So; if you keep your machine on for 1 month, you're fine. Just type ifconfig and read the RX and TX information.
Or keep a record, just like you explained: ifconfig eth0 | grep bytes >>storeit.txt
But when reboots happened, you'd have to open that file, do quite some logic to figure out how many bytes in total you have used.
Googling for "linux total traffic usage" showed me http://humdi.net/vnstat/ . That might be a good solution...
Anyway, good luck!
I think there might be a typo
I think there might be a typo - should the printtxbytes () be grepping for "TX bytes" instead of "RX bytes"?
That is correct, changed the
That is correct, changed the script and removed the error.