On Mon, Sep 23, 2002 at 10:36:09PM +0200, Christian Waldner wrote:
Am Montag, 23. September 2002 22:09 schrieben Sie:
Hallo!
Hat jemand eine Idee wie man Traffic Accounting hinbekommen kann? Meine Idee ist, mit iptables/ipchains den Traffic zu messen, und diese Werte jede Minute per Script auszulesen.
du könntest es einfach mit ipchains machen mit
OK, das mitprotokollieren funktioniert, fehlt nur noch das Auswerten.
Hier die Lösung für die, die es interessiert:
/etc/ppp/ip-up.d/ourLanSettings: """ ### Start der Traffic Accounting Regeln # Traffic kann mit folgendem Kommando angeschaut # werden: # # ipchains -v -x -L | \ # grep -E '(inlog|ininet|outlog|outinet|ineth|outeth)' | \ # grep -v references
ipchains -N inlog ipchains -A input -j inlog ipchains -A inlog -j RETURN
ipchains -N outlog ipchains -A output -j outlog ipchains -A outlog -j RETURN
ipchains -N outinet ipchains -A output -i ppp0 -j outinet ipchains -A outinet -j RETURN
ipchains -N ininet ipchains -A input -i ppp0 -j ininet ipchains -A ininet -j RETURN
ipchains -N outeth ipchains -A output -i eth1 -j outeth ipchains -A outeth -j RETURN
ipchains -N ineth ipchains -A input -i eth1 -j ineth ipchains -A ineth -j RETURN
### Ende der Traffic Accounting Regeln
# ... Restliche Regeln
""" Ende /etc/ppp/ip-up.d/ourLanSettings
/home/root/scripts/logTraffic.py: """ #!/usr/bin/env python import popen2 import string import time import re
#Ein- und Ausgangsregeln fuer Netzwerk, Internet und beides:
chains=["inlog", "ineth", "ininet", "outlog", "outeth", "outinet"] logfile="/var/log/network-traffic.log"
#Lese die Counter von ipchains. Loesche den counter #gleichezeitig:
(stdout, stdin)=popen2.popen2("ipchains -n -x -v -L -Z | grep -E '(%s)' | grep -v references" % (string.join(chains, "|"))) output=stdout.readlines() stdout.close()
traffic=[] for line in output: match=re.match(r'^\s*(\d*)\s*(\d*) (\w*).*$', line) if not match: raise("Fehler: konnte Zeile nicht parsen: %s" % line) pakete=match.group(1) bytes=match.group(2) chain=match.group(3) traffic.append((pakete, bytes, chain))
if len(chains)!=len(traffic): raise("Fehler: Nicht fuer alle Chains wurde eine Zeile von ipchains ausgeben")
curr_time=time.strftime("%Y-%m-%d %H:%M:%S")
fd=open(logfile, "at") for chain in traffic: fd.write("<time>%s</time> <chain>%s</chain> <packets>%s</packets> " "<bytes>%s</bytes>\n" % (curr_time, chain[2], chain[0], chain[1])) fd.close() """ Ende logTraffic.py
crontab -e (als root): """ PATH=/bin:/usr/bin:/usr/local/bin:/sbin:~/scripts #min std tag-des-monats monat wochentag
#Alle 5 Minuten den Traffic abspeichern:
0-59/5 * * * * logTraffic.py """
Erstelltes Log-File: /var/log/netzwerk-traffic.log: """ <time>2002-09-24 22:40:01</time> <chain>inlog</chain> <packets>3622</packets> <bytes>1363964</bytes> <time>2002-09-24 22:40:01</time> <chain>ininet</chain> <packets>1024</packets> <bytes>1174671</bytes> <time>2002-09-24 22:40:01</time> <chain>ineth</chain> <packets>2598</packets> <bytes>189293</bytes> <time>2002-09-24 22:40:01</time> <chain>outlog</chain> <packets>2888</packets> <bytes>1370378</bytes> <time>2002-09-24 22:40:01</time> <chain>outinet</chain> <packets>776</packets> <bytes>54819</bytes> <time>2002-09-24 22:40:01</time> <chain>outeth</chain> <packets>2112</packets> <bytes>1315559</bytes> <time>2002-09-24 22:45:02</time> <chain>inlog</chain> <packets>637</packets> <bytes>55121</bytes> <time>2002-09-24 22:45:02</time> <chain>ininet</chain> <packets>64</packets> <bytes>14649</bytes> <time>2002-09-24 22:45:02</time> <chain>ineth</chain> <packets>573</packets> <bytes>40472</bytes> <time>2002-09-24 22:45:02</time> <chain>outlog</chain> <packets>508</packets> <bytes>68226</bytes> <time>2002-09-24 22:45:02</time> <chain>outinet</chain> <packets>60</packets> <bytes>4128</bytes> <time>2002-09-24 22:45:02</time> <chain>outeth</chain> <packets>448</packets> <bytes>64098</bytes> <time>2002-09-24 22:50:01</time> <chain>inlog</chain> <packets>387</packets> <bytes>36585</bytes> <time>2002-09-24 22:50:01</time> <chain>ininet</chain> <packets>61</packets> <bytes>12338</bytes> <time>2002-09-24 22:50:01</time> <chain>ineth</chain> <packets>326</packets> <bytes>24247</bytes> <time>2002-09-24 22:50:01</time> <chain>outlog</chain> <packets>277</packets> <bytes>48013</bytes> <time>2002-09-24 22:50:01</time> <chain>outinet</chain> <packets>55</packets> <bytes>3889</bytes> <time>2002-09-24 22:50:01</time> <chain>outeth</chain> <packets>222</packets> <bytes>44124</bytes> <time>2002-09-24 22:55:01</time> <chain>inlog</chain> <packets>288</packets> <bytes>21283</bytes> <time>2002-09-24 22:55:01</time> <chain>ininet</chain> <packets>17</packets> <bytes>1516</bytes> <time>2002-09-24 22:55:01</time> <chain>ineth</chain> <packets>271</packets> <bytes>19767</bytes> <time>2002-09-24 22:55:01</time> <chain>outlog</chain> <packets>188</packets> <bytes>26519</bytes> <time>2002-09-24 22:55:01</time> <chain>outinet</chain> <packets>19</packets> <bytes>896</bytes> <time>2002-09-24 22:55:01</time> <chain>outeth</chain> <packets>169</packets> <bytes>25623</bytes> """
Über Fragen, Hinweise oder Verbesserungsvorschläge freue ich mich.
thomas