staging.inyokaproject.org

[Python3] - match mit re nach IP und mehr

Status: Gelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

halloICKEbins

Avatar von halloICKEbins

Anmeldungsdatum:
12. September 2017

Beiträge: 226

Mahlzeit,

wollte meine bestehendes Script erweitern aber leider matcht er nicht richtig!

Hier der alte Codeschnipsel:

1
2
3
4
5
6
7
8
IP_PATTERN = r'([0-9]{1,3}(?:\.[0-9]{1,3}){3})(?:\.([0-9]{1,5}))?'
CONNECTION_RE = re.compile(r'%s > %s' % (IP_PATTERN, IP_PATTERN))

with open(file) as search_terms:
    for line in search_terms:
        match = CONNECTION_RE.search(line)
        if match:
            source_ip, source_port, target_ip, target_port = match.groups()

Hier der neue Codeschnipsel:

1
2
3
4
5
6
7
8
9
PASS = r'(pass)'
IP_PATTERN = r'([0-9]{1,3}(?:\.[0-9]{1,3}){3})(?:\.([0-9]{1,5}))?'
CONNECTION_RE_PASS = re.compile(r'.*%s.*%s > %s' % (PASS ,IP_PATTERN, IP_PATTERN))

with open(file) as search_terms:
    for line in search_terms:
        match = CONNECTION_RE.search(line)
        if match:
            pass_str, source_ip, source_port, target_ip, target_port = match.groups()

Beispieleintrag:

Sep 20 00:00:01.666554 rule 10/(match) pass in on em34: 1.1.1.1.44 > 22.22.22.22.44: S 15454:145454(0)

Wenn ich es auf "block" umschreibe findet er gar nichts. Ziel ist es nach "pass" oder "block" in Verbindung mit den IP's und Ports zu filtern!

wo liegt mein Fehler?

NORACSA

Anmeldungsdatum:
31. Januar 2010

Beiträge: 182

Einen Fehler hätte ich auf die Schnelle schon mal gefunden: im unteren Codesnipplet ist CONNECTION_RE nicht definiert. Aber daran wirds wohl nicht liegen...

halloICKEbins

(Themenstarter)
Avatar von halloICKEbins

Anmeldungsdatum:
12. September 2017

Beiträge: 226

Ah sorry...doch ist im Orginalscript...ist ein Copy & Paste Fehler von mir beim Übertragen in das Forum!

Und richtig, dass ist es leider nicht ... das Script läuft ohne Fehler durch!

NORACSA

Anmeldungsdatum:
31. Januar 2010

Beiträge: 182

Könntest du ein bisschen mehr Beispieldaten zur Verfügung stellen? Und meinst du, mit:

Wenn ich es auf "block" umschreibe findet er gar nichts.

Dass er nichts mehr findet wenn du nur die erste Capturing-Group in der RegEx umschreibst von (pass) auf (block)?

halloICKEbins

(Themenstarter)
Avatar von halloICKEbins

Anmeldungsdatum:
12. September 2017

Beiträge: 226

Habe gerade nochmal rumgetestet und vermute der Fehler liegt irgendwo nachfolgend im Quellcode, da es so ohne Probleme funktioniert:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import re,sys

PASS = r'(pass)'
IP_PATTERN = r'([0-9]{1,3}(?:\.[0-9]{1,3}){3})(?:\.([0-9]{1,5}))?'
CONNECTION_RE_PASS = re.compile(r'.*%s.*%s > %s' % (PASS ,IP_PATTERN, IP_PATTERN))

match = CONNECTION_RE_PASS.search('Sep 20 00:00:01.666554 rule 10/(match) pass in on em34: 1.1.1.1.44 > 22.22.22.22.44: S 15454:145454(0)')
if match:
    pass_str, source_ip, source_port, target_ip, target_port = match.groups()
    print (pass_str, source_ip, source_port, target_ip, target_port)

Dann werde ich wohl nochmal schauen müssen ☹

NORACSA

Anmeldungsdatum:
31. Januar 2010

Beiträge: 182

Ist das eigentlich dein gesamter Code? Bzw. könntest du eventuell den gesamten Code posten? Inklusive brauchbaren Testdaten wärs noch besser! ☺

halloICKEbins

(Themenstarter)
Avatar von halloICKEbins

Anmeldungsdatum:
12. September 2017

Beiträge: 226

Habe den Fehler gefunden:

Es muss bei CONNECTION_RE_PASS = re.compile(r'.*%s.*%s > %s' % (PASS ,IP_PATTERN, IP_PATTERN)) noch ein Fragezeichen rein, da er sonst das erste Oktett der IP abschneidet!

Also

1
CONNECTION_RE_PASS = re.compile(r'.*%s.*?%s > %s' % (PASS ,IP_PATTERN, IP_PATTERN))

NORACSA

Anmeldungsdatum:
31. Januar 2010

Beiträge: 182

halloICKEbins schrieb:

Habe den Fehler gefunden:

Es muss bei CONNECTION_RE_PASS = re.compile(r'.*%s.*%s > %s' % (PASS ,IP_PATTERN, IP_PATTERN)) noch ein Fragezeichen rein, da er sonst das erste Oktett der IP abschneidet!

Also

1
CONNECTION_RE_PASS = re.compile(r'.*%s.*?%s > %s' % (PASS ,IP_PATTERN, IP_PATTERN))

Ah, das habe ich unbewusst beim Herumprobieren gemacht. .* sollte man immer mit ? ungreedy machen, außer man hat gute Gründe...

Antworten |