Quoting Martin Ereth
Ich habe folgendes Problem: Ich muss das Volumen von meinem Rechner (Suse 10) zum Router aufzeichnen. Mein Papa hat einen DSL-Tarif von Arcor mit 1000MB. Nun darf ich die Hälfte verbrauchen, was darüber ist, muss ich zahlen. Nun muss ich ihn nachweisen, dass nicht alles, was drüber ist, von mir ist.
Ich möchte also den ganzen Traffic zu dieser IP von Router aufzeichnen, nicht aber zu anderen Rechnern im Netzwerk. Hat jemand eine Möglichkeit, eine Logdatei oder ähnliches aufzuzeichnen?
Zur lokalen Situation: Router ist immer an, hat auch intern immer die gleiche IP, mein Rechner ist tagsüber öfters an, das DSL-Modem ist manchmal den ganzen Tag an, manchmal auch nur eine Stunde. Der Router hat auch einen integrierten Switch.
Traffic messen geht in dem Fall am einfachsten über iptables. Entweder auf dem Clientrechner oder auf dem Router. Ungefähr so (Lösung "auf dem Router"): # Parameter definieren CLIENT=192.168.0.5 # der zu überwachende Client INTERNET=ppp0 # Netzwerk-Device, an dem das Internet hängt # Dummy-Chain zum Zählen iptables -N zaehler iptables -A zaehler -j RETURN # eingehender Traffic, der zum Client geht, muß vor dem Filtern gezählt werden iptables -I FORWARD 1 -i $INTERNET -d $CLIENT -j zaehler # ausgehender Traffic, der vom Client kommt, muß nach dem Filtern gezählt werden # deshalb diese Regel ganz am Ende des FORWARD chain (aber vor einem evtl. noch # vorhandenen REJECT oder DENY) setzen. # Wenn irgendwo entsprechender Traffic in andere Chains # abgeleitet und dort ACCEPTed wird, muß der vor dem ACCEPT auch durch den # zaehler - das geht am einfachsten, indem man sich nen Chain accept-it baut, # der aus -j zaehler und dann -j ACCEPT besteht iptables -A FORWARD -s $CLIENT -o $INTERNET -j zaehler So, nun brauchst Du noch ein kleines Skript, das den Byte Count vom Zähler-Chain ausliest und auf 0 zurücksetzt. Das geht z.B. so: #!/bin/bash AMOUNT=$(iptables -vxL traffic --zero traffic|tail -2|head -1|awk '{print $2;}') MONTH=$(date +%m) DATE=$(date) echo $MONTH $AMOUNT $DATE >> /var/log/traffic Dieses Skript pflanzst Du einfach alle paar Minuten in /etc/crontab und am besten auch noch irgendwo in /etc/init.d/rc0.d oder so (damit auch beim Shutdown die Werte weggesichert werden). Damit hast Du in /var/log/traffic ein Logfile, das Du z.B. mit awk bequem auslesen kannst: BEGIN { SUM=0 MONTH=0 } { CURRENT_MONTH=$1; CURRENT_AMOUNT=$2; if (CURRENT_MONTH != MONTH) { if (MONTH != 0) { print "Summe " MONTH ": " SUM/1000000 " Mio Bytes"; } MONTH=CURRENT_MONTH; SUM=0; } SUM += CURRENT_AMOUNT; } END { print "Summe " MONTH ": " SUM/1000000 " Mio Bytes"; } Das wird dann aufgerufen mit: awk -f traffic.awk /var/log/traffic So, das Ganze in die diversen Pfade zu legen, noch nen logrotate dazuzubasteln und den Report ein bißchen zu verschönern bleibt dem geneigten Schüler dann als Übung überlassen. -- Erhard Schwenk Akkordeonjugend Baden-Württemberg - http://www.akkordeonjugend.de k-itx it-dienstleistungen - http://www.k-itx.net