2016-12-03 3 views
1

ich eine Protokolldatei aus einer Firewall in txt Form haben, zum Beispiel:Beitritt zur Ausgabe von mehreren regulären Ausdrücken

src=10.10.10.1 srcPort=15003 dst=20.20.20.1 service=443 host=FirewalName proto=tcp 
src=30.30.30.1 srcPort=18003 dst=40.40.40.1 service=8080 host=FirewalName proto=tcp 

Ich habe die regulären Ausdrücke, die Informationen, die ich brauche zu extrahieren gebaut (src, dst, Service), aber ich muss in der Lage sein, die Ausgabe der regulären Ausdrücke zu verbinden und die Ausgabe in Datei mit einem Tab zwischen jedem und "TCP" vor jedem Service = Objekt, für jede Zeile in der Protokolldatei, so die Ausgabe zu schreiben die neue Datei sieht so aus:

10.10.10.1 20.20.20.1 TCP 443 
30.30.30.1 40.40.40.1 TCP 8080 

Auch ich muss in der Lage sein, zwischen zu unterscheiden en „TCP“ und „UDP“ im Dienst = Teil der Eingabedatei, so dass das, was in die Ausgabedatei geschrieben wird, ist zum Beispiel richtig: wenn die dritte Zeile der Eingabedatei ist:

src=50.50.50.1 srcPort=21003 dst=60.60.60.1 service=161 host=FirewalName proto=udp 

I bin hier steckengeblieben und brauche Hilfe.

import re 
import sys 

with open("SFD-IPs.txt", "r") as file: 
    text = file.read() 

sources = re.findall(r'src=(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})', text) 
dest = re.findall(r'dst=(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})', text) 
service = re.findall(r'service=(\d+)', text) 


with open("output.txt", "w") as TufinReq: 
    TufinReq.write(sIP) 

f=open("output.txt", "r") 
del_list = ["src=", "dst=", "service="] 
list = [] 
for line in f: 
    for word in del_list: 
     if word in line: 
      line = line.replace(word, "") 
    list.append(line) 
f.close() 
f=open("output.txt", "w+") 
for line in list: 
    f.write(line) 
f.close() 

Antwort

1

Zuerst müssen Sie jedes Element von sources und dest aufzuspalten wie unten die gewünschten Daten abzurufen:

sources = [item.split('=')[1] for item in sources] 
dest = [item.split('=')[1] for item in dest] 

Jetzt können Sie zip() eingebaute Funktion wie folgt verwenden:

with open('output.txt', 'w') as f: 
    for item in zip(sources, dest, service): 
     f.write('{}\t{}\tTCP\t{}\n'.format(*item)) 
Wenn Sie das Protokoll hinzufügen möchten, können Sie Folgendes tun:
proto = re.findall(r'proto=(\w+)', text) 
proto = [item.upper() for item in proto] 

with open('output.txt', 'w') as f: 
    for item in zip(sources, dest, proto, service): 
     f.write('{}\t{}\t{}\t{}\n'.format(*item)) 

Ausgang:

Der Inhalt output.txt Datei für:

text = '''src=10.10.10.1 srcPort=15003 dst=20.20.20.1 service=443 host=FirewalName proto=tcp 
src=30.30.30.1 srcPort=18003 dst=40.40.40.1 service=8080 host=FirewalName proto=tcp 
src=50.50.50.1 srcPort=21003 dst=60.60.60.1 service=161 host=FirewalName proto=udp''' 

ist wie folgt:

10.10.10.1 20.20.20.1 TCP 443 
30.30.30.1 40.40.40.1 TCP 8080 
50.50.50.1 60.60.60.1 UDP 161 
+0

Vergessen Sie nicht, es zu akzeptieren :) – ettanany

0

Sie diese mit einer einzigen Regex Suche erreichen kann und ersetzen, mit einem viel einfacheren Muster.

der reguläre Ausdruck:

src=([\d\.]+).*dst=([\d\.]+).*service=(\d+).*proto=(.*) 

die Ersatzzeichenfolge:

$1 $2 $4 $3 

demo

+0

Dies funktioniert gut! Ich schätze deine Hilfe sehr – Clyde

Verwandte Themen