diff --git a/if-traffic b/if-traffic new file mode 100755 index 00000000..cf4e1db1 --- /dev/null +++ b/if-traffic @@ -0,0 +1,108 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-15 -*- +# Hey, c'est du -*- python-*-, ça ! +# +# Ecrit mi-février par Chep pour les besoins locaux... +# + +import string,shelve,pickle,sys + +def tuple_to_dico(tup) : + "construit un dictionnaire à partir du tuple d'une interface" + fields={ 0:'in', 1:'inp', 2:'ierr', 3:'idrop', 4:'ififo', 5:'iframe', 6:'icompressed', + 7:'imulticast', 8:'out', 9:'outp', 10:'oerr', 11:'odrop', 12:'ofifo', 13:'cols', + 14:'carrier', 15:'ocompressed' } + dic = {} + for n in fields.keys() : + dic[ fields[n] ] = data[ n ] + if dic['outp']: dic['colr'] = long((100 * dic['cols']) / dic['outp']) + else: dic['colr'] = 0L + + dic['npi'] = dic['ierr']+dic['idrop'] + dic['ififo'] + dic['iframe'] +dic['icompressed'] + dic['npo'] = dic['oerr']+dic['odrop']+dic['ofifo']+dic['carrier']+dic['ocompressed'] + + dic['mnpi'] = 1000 * dic['npi'] + dic['mnpo'] = 1000 * dic['npo'] + dic['unpi'] = 1000 * dic['mnpi'] + dic['unpo'] = 1000 * dic['mnpo'] + + if dic['inp']: dic['npir'] = long((100 * dic['npi']) / dic['inp']) + else: + if dic['ierr']: dic['npir'] = 99L # erreurs et pas de paquets entrants ! + else: dic['npir'] = 0L + if dic['outp']: dic['npor'] = long((100 * dic['npo']) / dic['outp']) + else: + if dic['oerr']: dic['npor'] = 99L + else: dic['npor'] = 0L + + # totaux dans les deux sens (tnp = total nasty pkts,tgp = total good pkts) + dic['tnp'] = dic['npi'] + dic['npo'] + dic['tgp'] = dic['inp'] + dic['outp'] + return dic + + +if len(sys.argv) < 2: + sys.stderr.write("""usage: %s ethN [var1] [var2] [long ifname]\n +var1 and var2 can be : + in: incoming bytes + out: outgoing bytes + cols: collisions + inp: incoming packets + outp: outgoing packets + colr: collision ratio, in percent (cols / outp) + npi : incoming 'nasty' packets + npo : outgoing 'nasty' packets + mnpi : 1000 * npi + mnpo : 1000 * npo + npir: incoming 'nasty' packet ratio + npor: outgoing 'nasty' packet ratio + +default var1 and var2 are in,out. +Result is to be fed to MRTG. +""" % (sys.argv[0])) + sys.exit(0) + +iface = sys.argv[1] +ifname = iface + +if len(sys.argv) > 2: + var1 = sys.argv[2] + if len(sys.argv) > 3: + var2 = sys.argv[3] + if len(sys.argv) > 4: + ifname = sys.argv[4] + else: var2 = 'out' +else: + var1 = 'in' + var2 = 'out' + +fd = open('/proc/net/dev','r') +sl = fd.readlines() +fd.close() + +Ifaces = {} +for s in sl: + ln = string.split(s,':') + if len(ln) < 2: continue + data = string.split(ln[1]) + try : + n = long(data[1]) + except : continue + for k in range(len(data)): + data[k] = long(data[k]) + Ifaces[string.strip(ln[0])] = tuple_to_dico(data) + +i = Ifaces[iface] + +# python1.5 fait str(1234L) =="1234L", il faut enlever le L.. +ver=sys.version[0] +if ver[0]=='1' : + s1 = str( i[var1])[:-1] + s2 = str( i[var2])[:-1] +else : + s1 = str( i[var1]) + s2 = str( i[var2]) + +print "%s\n%s\n\n%s" % (s1, s2 ,ifname) + +