command line network bandwidth tool?

Razvan Corneliu C.R. "d3vi1" VILT razvan.vilt at linux360.ro
Mon Nov 3 16:49:50 UTC 2003


On Mon, 2003-11-03 at 03:10, nosp wrote:
> Anyone recommend a command-line network bandwidth tool they use on
> fedora?  I'm talking about something to show MB/sec across the local
> machine's network interface(s), and perhaps more (breakdown by protocol,
> etc.).  I can't find any pre-packaged ones in fedora (bad search
> criteria?) but have seen ntop, ipband, and iptraf mentioned on the
> web...
> 
Have you tried netrate (python) by Alex Popa???
I've attached it to this message...
> Thanks
> 
> 
> --
> fedora-list mailing list
> fedora-list at redhat.com
> http://www.redhat.com/mailman/listinfo/fedora-list

---BEGIN-OF-CODE---

#!/usr/bin/python

# netrate - a program to "graphically" show on a linux console
# the transfer rate on each interface
# also tested on rxvt

# it will display the transfer rate for the last second (coming soon),
# and the transfer rate for the last SECONDS seconds.
# 

NUM_SAMPLES=20			# number of samples per second
NUM_SECONDS=5			# number of seconds
MIN_RATE=1024.0			# max_rate does not go below this value

# terminal settings
TERM_HOME='\x1b[H'
TERM_CLR_EOL='\x1b[K'
TERM_CLR_SCREEN='\x1b[J'
TERM_IN_COLOR='\x1b[41m'		# red
TERM_OUT_COLOR='\x1b[42m'		# green
TERM_NORMAL_COLOR='\x1b[m'		# no attributes

TERM_WIDTH=80

from string import split
from time import time,sleep
from sys import stdin,stdout,argv,exit
from getopt import getopt


# help
def help():
    print "Usage:\n\t%s -h\n"%argv[0]
    print "\t%s [-w width] [-s seconds] [-n num_samples]\n"%argv[0]
    exit()

# main
options,junk=getopt(argv[1:],"hw:s:n:")
del junk
for i in options:
    if(i[0]=='-h'):
        help()
    if(i[0]=='-w'):
        try:
            TERM_WIDTH=int(i[1])
        except:
            help()
    if(i[0]=='-s'):
        try:
            NUM_SECONDS=int(i[1])
        except:
            help()
    if(i[0]=='-n'):
        try:
            NUM_SAMPLES=int(i[1])
        except:
            help()
del options

delay=1.0/NUM_SAMPLES

statfile=open('/proc/net/dev','r')
# first get the current status...
tmp=statfile.readlines()
statfile.close()
del statfile
tmp=tmp[2:]
num_interfaces=len(tmp)
interfaces=[0,]*num_interfaces
initial_in=[]
initial_out=[]
max_rate=MIN_RATE

for i in range(num_interfaces):
    tokens=split(tmp[i][7:])
    interfaces[i]=split(tmp[i][:6])[0]
    initial_in.append(float(tokens[0]))
    initial_out.append(float(tokens[8]))
    
total=NUM_SAMPLES*NUM_SECONDS
times=[time()-1.0]*total
in_values=[]
out_values=[]

for i in range(total):
    in_values.append(initial_in[:]*num_interfaces)
    out_values.append(initial_out[:]*num_interfaces)

del initial_in,initial_out

current=0
last=1


# print samples[0][1][0][1]
# print interfaces

# I keep a circular buffer, so samples[current] is the current sample,
and 
# samples[last] is the earliest sample, which will be overwritten next
time

stdout.write(TERM_HOME+TERM_CLR_SCREEN)

while 1:
    statfile=open('/proc/net/dev')
    tmp=statfile.readlines()
    tmp=tmp[2:]
    statfile.close()
    
    times[current]=time()
    for i in range(num_interfaces):
        tokens=split(tmp[i][7:])
	in_values[current][i]=float(tokens[0])
	out_values[current][i]=float(tokens[8])

    sleep(delay)
    stdout.write(TERM_HOME)

    stdout.write('Max Rate: %10.2f\n'%max_rate)
    for i in range(num_interfaces):
	time_diff=times[current]-times[last]
	stdout.write('%-10s: in:%10.2f bytes/sec   out:%10.2f bytes/sec'\
	    %(interfaces[i],\
	    (in_values[current][i]-in_values[last][i])/time_diff,\
	    (out_values[current][i]-out_values[last][i])/time_diff))
	stdout.write(TERM_CLR_EOL+'\n')
	in_rate=(in_values[current][i]-in_values[last][i])/time_diff
	out_rate=(out_values[current][i]-out_values[last][i])/time_diff
	max_rate=max(in_rate,out_rate,max_rate)
	stdout.write(TERM_IN_COLOR+(' '*int(TERM_WIDTH*in_rate/max_rate))\
	    +TERM_NORMAL_COLOR+TERM_CLR_EOL+'\n')
	stdout.write(TERM_OUT_COLOR+(' '*int(TERM_WIDTH*out_rate/max_rate))\
	    +TERM_NORMAL_COLOR+TERM_CLR_EOL+'\n')
    stdout.flush()
    current=current+1
    last=last+1
    if(current==total):
	current=0
	max_rate=max(max_rate*0.90,MIN_RATE)
    else:
	if(last==total):
	    last=0


---END-OF-CODE





More information about the fedora-list mailing list