halloICKEbins
Anmeldungsdatum: 12. September 2017
Beiträge: 226
|
Mahlzeit, wollte meine bestehendes Script erweitern aber leider matcht er nicht richtig! Hier der alte Codeschnipsel: | 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: | 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: 180
|
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)
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: 180
|
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)
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: | 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: 180
|
Ist das eigentlich dein gesamter Code? Bzw. könntest du eventuell den gesamten Code posten? Inklusive brauchbaren Testdaten wärs noch besser! ☺
|
halloICKEbins
(Themenstarter)
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
| CONNECTION_RE_PASS = re.compile(r'.*%s.*?%s > %s' % (PASS ,IP_PATTERN, IP_PATTERN))
|
|
NORACSA
Anmeldungsdatum: 31. Januar 2010
Beiträge: 180
|
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
| 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...
|