Seite 1 von 1

Kompletter Anfänger: Log analyse

Verfasst: Montag 9. Februar 2015, 19:27
von Mardor
Hallo,

ich versuche im Moment verschiedene Logs zu analysieren.

Hier die Beispiel-Logs:

Code: Alles auswählen

1252543170.769 386 192.168.30.103 TCP_MISS_SSL/200 0 TCP_CONNECT tunnel://192.168.34.32:443/ - DIRECT/192.168.34.32 -     DECRYPT_WBRS-DefaultGroup-test.id-NONE-NONE-DefaultRouting <Sear,5.0,-,-,-,-,-,-,-,-,-,-,-,-,-> -
1252543171.166 395 192.168.30.103 TCP_MISS_SSL/200 2061 GET https://www.example.com:443/sample.gif - DIRECT/192.168.34.32 image/gif DEFAULT_CASE-test.policy-test.id-NONE-NONE-NONE <Sear,5.0,0,-,-,-,-,0,-,-,-,-,-,-,-> -
1252543170.769 386 192.168.10.142 TCP_MISS_SSL/200 2061 GET https://www.example.com:443/sample.gif - DIRECT/192.168.34.32 image/gif DEFAULT_CASE-test.policy-test.id-NONE-NONE-NONE <Sear,5.0,0,-,-,-,-,0,-,-,-,-,-,-,-> -
1252543170.769 386 192.168.30.103 TCP_MISS_SSL/200 0 TCP_CONNECT tunnel://192.168.34.32:443/ - DIRECT/192.168.34.32 -     DECRYPT_WBRS-DefaultGroup-test.id-NONE-NONE-DefaultRouting <Sear,5.0,-,-,-,-,-,-,-,-,-,-,-,-,-> -
Hier soll im log beispielsweise nach der IP gesucht werden und dann der für diesen Eintrag der HTTP Response code ausgegeben werden. Beispielsweise soll auf bei der Suche nach "192.168.10.142" die Ausgabe "TCP_MISS_SSL/200" lauten.

Folgendes habe ich geschrieben:

Code: Alles auswählen

import sys
import re

# Zugriffsversuch
try:
    d = open ("lesen_mod_3.txt")
except:
    print("Dateizugriff nicht erfolgreich")
    sys.exit(0)

# Lesen aller Zeilen in eine Liste
allezeilen = d.readlines()

# Schliessen der Datei
d.close()

#Ausfabe und Summierung der Listenelemente
erg = re.findall("192.168.10.142",allezeilen[0:])
print(erg)
Leider erhalte ich folgende Ausgabe:

Code: Alles auswählen

Traceback (most recent call last):
  File "/Users/mschmitt/Extra/Server/sal.netmage.info/Temp/Python Files/lesen_mod_4.py", line 24, in <module>
    erg = re.findall("192.168.10.142",allezeilen[0:])
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/re.py", line 206, in findall
    return _compile(pattern, flags).findall(string)
TypeError: expected string or buffer
Eigentlich dachte ich mir ich kann die Liste nach einem String durchsuchen und erhalte dann die entsprechende Log Zeile. Das weitere vorgehen wäre gewesen die einzelnen Elemente der Log Zeile zu splitten und mir den richtigen Wert zu holen.

Hat jemand eine Idee für mich ?

Re: Kompletter Anfänger: Log analyse

Verfasst: Montag 9. Februar 2015, 19:45
von Sirius3
@Mardor: findall funktioniert nur bei Strings, wie die Fehlermeldung deutlich sagt, mit Listen kann das nichts anfangen. Zudem ist Dein regulärer Ausdruck fast schon fehlerhaft. Ich würde das auch ohne regulären Ausdruck lösen.

Re: Kompletter Anfänger: Log analyse

Verfasst: Montag 9. Februar 2015, 20:04
von Mardor
Hallo Sirius3,

das Problem ist aber:

Code: Alles auswählen

import sys
import re

# Zugriffsversuch
try:
    d = open ("lesen_mod_3.txt")
except:
    print("Dateizugriff nicht erfolgreich")
    sys.exit(0)

# Lesen aller Zeilen in eine Liste
allezeilen = d.readlines()

# Schliessen der Datei
d.close()

for zeile in allezeilen: 
    erg = re.findall("192\.168\.10\.142",zeile)
    print(erg)
Brint mir folgende Ausgabe:

Code: Alles auswählen

[]
[]
['192.168.10.142']
[]
und das ist auch nicht was ich haben möchte.

Re: Kompletter Anfänger: Log analyse

Verfasst: Montag 9. Februar 2015, 21:13
von Sirius3
@Mardor: dann solltest Du wohl das so schreiben, dass Du bekommst was Du willst. Ein if wirkt Wunder.

Re: Kompletter Anfänger: Log analyse

Verfasst: Dienstag 10. Februar 2015, 07:44
von Mardor
Hello Sirius3,

vielen Dank für den Tipp.

Code: Alles auswählen

for zeile in allezeilen: 
    if re.findall("192\.168\.10\.142",zeile):
        print(zeile,end="")
    else:
        print("Keine Uebereinstimmung")
Bin einfach ohne den Tipp nicht draufgekommen, warum auch immer.

Re: Kompletter Anfänger: Log analyse

Verfasst: Dienstag 10. Februar 2015, 08:33
von Sirius3
@Mardor: und da Du eigentlich keinen regulären Ausdruck benutzt, wäre »"192.168.10.142" in zeile« deutlich lesbarer.