hat700
Goto Top

CLI Konfig Textdatei auslesen und per Script in CSV umwandeln

Hallo zusammen,

ganz sicher bin ich nicht der erste mit dieser Anforderung, aber im Dschungel all der Beiträge hier, habe ich keinen passenden gefunden. Ich möchte gerne die Firewall-Regelwerke aus einer CLI Konfigigurationsdatei in eine übersichtliche Tabelle umwandeln. Dabei muss lediglich Zeile für Zeile des CLI Outputs analysiert und in in eine neue Datei umgeschrieben werden.

Die Quelldatei enthält mehrere Konfigblöcke in Form des folgenden Formats (Fortinet Firewall):

config firewall policy
Auslesen ab hier:
edit 11 set name "Internet_Access" set uuid frwe59sdf8we4wjfa set srcintf "OfficeLAN" set dstintf "Internet" set srcaddr "all" set dstaddr "all" set action accept set schedule "always" set service "HTTP" "HTTPS" set logtraffic all set fsso disable set nat enable next edit 15 set name "File-Server_Access" set uuid 9805efsfquqfsf set srcintf "OfficeLAN" set dstintf "DataCenter" [...] next
Auslesen bis hier:
end

Das Script muss also in der Quelldatei lediglich nach den "edit" (neue Regel), "set" (Regel Parameter) und "next" (Regel Ende) Statements suchen, die Konfigurationsparameter auslesen und mit Semikolon getrennt in eine neue Datei geschrieben werden. Der Output sollte dann z.B. so aussehen:

ID;Name;SrcIntf; DstIntf;...
11;Internet_Access;OfficeLAN;Internet;...
15;File-Server_Access;OfficeLAN;DataCenter;...
[...]

Dabei sind WENN DANN Abfragen erforderlich, da nicht alle Konfigurationen einheitliche Konfigurationsparemeter haben. Ich suche also beispielsweise nach "set nat " und was dahinter steht ist der Wert den ich in der Spalte "NAT" der CSV Datei benötige. Ist kein "set nat " Statement vorhanden, bleibt die Zelle leer.

Ich hatte sowas früher schon mal mit VBS gemacht. Ist allerdings schon fast 20 Jahre her. Umsetzen würde ich es gerne mit einer möglichst simplen Script Sprache möglichst ohne zusätzliche Software auf Windows 10. Was würdet ihr empfehlen und könnt ihr mir ein Beispielscript zum selber Loslegen vorlegen?

Besten Dank im Voraus! VG, Hakan

Content-ID: 563420

Url: https://administrator.de/contentid/563420

Ausgedruckt am: 24.11.2024 um 07:11 Uhr

143728
Lösung 143728 06.04.2020 aktualisiert um 13:15:45 Uhr
Goto Top
möglichst ohne zusätzliche Software auf Windows 10.
Powershell z.B., ist standardmäßig mit an Bord, für deinen Fall hier mal schnell den Code zusammen geworfen:
Pfade anpassen, laufen lassen und über CSV freuen face-smile.
$file = 'D:\firewall.log'  
$csv = 'D:\test.csv'  

[regex]::matches(( gc $file -raw),'(?ism)^edit.*?^next').Captures | %{  
    $obj = [ordered]@{}
    [regex]::matches($_.Value,'(?im)^set\s+([^\s]+)\s+([^\r\n]+)').Captures | %{  
        $obj.($_.Groups[1].Value) = $_.Groups[2].Value.replace('"','')  
    }
    [pscustomobject]$obj
} | export-csv $csv -Delimiter ";" -NoType -Encoding UTF8  
Gruß c.
hat700
hat700 06.04.2020 um 14:02:40 Uhr
Goto Top
Super. Danke für die prompte Rückmeldung. Werde mich da gleich bei nächster gelegenheit dran machen und berichten face-wink
hat700
hat700 15.04.2020 um 22:46:51 Uhr
Goto Top
Danke nochmal, das war im Prinzip genau das, was ich suchte. Es funktioniert allerdings nicht ganz, ohne zusätzliche Eingriffe. Es müssen im ersten Konfigblock alle möglichen set-Parameter vorhanden sein, sonst wird die CSV nicht korrekt erstellt. Aber damit kann ich leben.