PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ip accounting



basko
26.01.05, 20:26
hi leute... ich brauch wiedermal euren rat, leider bin ich echt ratLOS! :(

hab folgende aufgabenstellung: ip accounting mit shellskript mit:
1) externes tool zb tcpdump oder iptabels :mad:
2) packet und byte counter (prock / net device) :eek:

die ergebnisse in eine datei.. auswerten und aufsummieren!
sagmal hat irgendwer eine ahnung?? bitte wäre echt nett!
tcpdump versteh ich ja noch aber was is proc / net genau? und wie soll man das auswerten? immer grepn is doch fad? :(

mfg

hmarburg
26.01.05, 21:50
hi leute... ich brauch wiedermal euren rat, leider bin ich echt ratLOS! :(

hab folgende aufgabenstellung: ip accounting mit shellskript mit:
1) externes tool zb tcpdump oder iptabels :mad:
2) packet und byte counter (prock / net device) :eek:

die ergebnisse in eine datei.. auswerten und aufsummieren!
sagmal hat irgendwer eine ahnung?? bitte wäre echt nett!
tcpdump versteh ich ja noch aber was is proc / net genau? und wie soll man das auswerten? immer grepn is doch fad? :(

mfg

paket und bytecounter -> ntop

basko
26.01.05, 22:14
danke! gibt es keine andere möglichkeit? ntop ist ein daemon... ich sollte dies mit herkömmlichen mitteln schaffen... :confused: :confused: :confused:

mfg

mkahle
26.01.05, 22:24
danke! gibt es keine andere möglichkeit? ntop ist ein daemon... ich sollte dies mit herkömmlichen mitteln schaffen... :confused: :confused: :confused:

daemons sind unter .nix herkömmliche Mittel

hab folgende aufgabenstellung: ip accounting mit shellskript mit
wer stellt Dir denn solche Aufgaben? :confused:

basko
26.01.05, 22:31
der lehrer :(

ich soll tcpdump oder iptables verwenden und (packet und byte counter) des kernels (device proc/net)
HILFE!!!

mfg

mkahle
26.01.05, 22:48
Auch wenn ich sonst fertige Lösungen hier poste, ist dieses Thema recht komplex und ich weiß nicht, wie weit Ihr gehen sollt, da so Themen wie "soll es bootfest sein", "was passiert beim Überlauf der Counter", etc. das ganze (fast) beliebig komplex machen können.

Aber hier einen Ansatz:

interface=eth0
set `grep $interface: /proc/net/dev`
bytesOut=${2}
pktsOut=${3}
bytesIn=${10}
pktsIn=${11}

Addieren in der bash:

summe=$(($arg1+$arg2))

viel Erfolg ... und: daemons sind besser ;)

basko
26.01.05, 22:50
danke! ich werds gleich probieren!

de aufgabe lautet:

Aufgabenstellung:

Es soll ein Shellskript zur Messung von IP Traffic über das / die Ethernet Interface(s) Ihres Linuxsystems geschrieben werden.

Verwenden Sie dazu:

a.) Ein externes Tool zur Messung exakter Werte z.B. tcpdump oder iptables (auch für Firewall gut geeignet). Wie arbeiten diese Tools?

b.) Packet und Byte Counter des Kernels (Device proc/net )


Die Ergebnisse die das jeweilige Tool liefert sollen ausgewertet / aufsummiert werden.

Speichern Sie die Ergebnisse in eine Datei und stellen Sie diese Datei mit Ihrem Skript übersichtlich tabellarisch und färbig dar.

Zeigen Sie alle Werte, Wochen und Tageswerte für jedes Interface an.
Welche Ergebnisse sind für Accounting interessant?

Als Vergleich in Ihrer Darstellung verwenden Sie auch die Ergebnisse des Packet und Byte Counters des Linux Kernels (Device proc/net ).


-------------------------
solltest noch ideen habn raus damit bitte bitte ;)

mkahle
27.01.05, 10:27
hier hast Du mal was zum experimentieren:

saveIfCounter:

#!/bin/bash
#
SaveDir=/var/log
NetDevs=/proc/net/dev
CounterFilePrefix=ifCounters

# make sure we have a sane env
PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin

# preliminary checks
[ -d $SaveDir ] || {
echo "Save directory '$SaveDir' does not exist!"
exit 1
}
[ -w $SaveDir ] || {
echo "Save directory '$SaveDir' is not writable!"
exit 1
}
[ -e $NetDevs ] || {
echo "Cannot read net devices file '$NetDevs'"
exit 1
}

timestamp=`date "+%s"`
grep ":" $NetDevs | tr ":" " " |
while read ifName bytsIn pktsIn x x x x x x bytsOut pktsOut x; do
[ -z "$ifName" ] && continue
echo $timestamp $bytsIn $pktsIn $bytsOut $pktsOut >>$SaveDir/$CounterFilePrefix.$ifName
done


calcThroughput:

#!/bin/bash
#
SaveDir=/var/log
CounterFilePrefix=ifCounters

# define system architecture (32Bit, 64Bit)
# this affects how wrapped counters are interpreted
Arch=32

# interface counters are 32Bit unsigned integers and wrap
# around if max is reached
counterMax=`echo "2^$Arch-1" | bc`

# make sure we have a sane env
PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin

counterDiff() {
cDiff=0
[ $# -ne 2 ] && return
cDiff=`echo "if ($1>=$2) $1-$2 else $counterMax-$2+$1+1" | bc`
}

# preliminary checks
[ -d $SaveDir ] || {
echo "Save directory '$SaveDir' does not exist!"
exit 1
}

# get list of interface counter files
fileList=`ls $SaveDir/$CounterFilePrefix.* 2>/dev/null`

for fname in $fileList; do
timestampP=0
ifName=${fname##*.}
echo "Interface: $ifName (Average values in 'per second')"
printf "%-18s %10s %10s %10s %10s\n" "Time" "AvgBytesIn" "AvgBytesOut" "AvgPktsIn" "AvgPktsOut"
while read timestamp bytsIn pktsIn bytsOut pktsOut x; do
if [ $timestamp -gt $timestampP -a $timestampP -gt 0 ] ; then
deltaTime=$((timestamp-$timestampP))
timeClear=`date --date "1/1/1970 0:0:$timestamp" "+%d.%m.%y %H:%M:%S"`
counterDiff $bytsIn $bytsInP ; bytsInDiff=$cDiff
counterDiff $bytsOut $bytsOutP ; bytsOutDiff=$cDiff
counterDiff $pktsIn $pktsInP ; pktsInDiff=$cDiff
counterDiff $pktsOut $pktsOutP ; pktsOutDiff=$cDiff
avgBytsIn=`echo "$bytsInDiff/$deltaTime" | bc`
avgBytsOut=`echo "$bytsOutDiff/$deltaTime" | bc`
avgPktsIn=`echo "$pktsInDiff/$deltaTime" | bc`
avgPktsOut=`echo "$pktsOutDiff/$deltaTime" | bc`
printf "%-18s %10u %10u %10u %10u\n" "$timeClear" $avgBytsIn $avgBytsOut $avgPktsIn $avgPktsOut
fi
timestampP=$timestamp
bytsInP=$bytsIn
pktsInP=$pktsIn
bytsOutP=$bytsOut
pktsOutP=$pktsOut
done <$fname
echo
done


/edit: timestampP=0 muß natürlich in die äußere Schleife ...

basko
27.01.05, 14:05
ich danke dir recht herzlich!!!

ich werde das umgehend ausprobieren... scheinst die rettung in der not zu sein! ;)

nochmals danke danke!!!

mfg