
Ich habe viel darüber gelesen, wie ich es durch Notepad++ ersetzen kann, aber ich komme einfach nicht weiter.
Hier ist ein Beispiel für eine Juniper-Konfiguration, die ich in eine andere Sprache ändern werde:
set policy id 3016 from "CSA" to "Untrust" "1.1.1.1/32" "2.2.2.2/32" "SSH" permit log
set policy id 3016
set dst-address "3.3.3.3/32"
exit
!
set policy id 3053 name "Footprints" from "Untrust" to "CSA" "Blocked Addresses" "Any" "ANY" deny log
set policy id 3053
exit
Jetzt möchte ich dies in Fortinet Language ändern, aber um diesen Prozess zu starten, muss es nach bestimmten Variablen suchen. Die wenigen Dinge, die ich ändern muss, sind:
set policy id 3016 from "CSA" to "Untrust" "1.1.1.1/32" "2.2.2.2/32" "SSH" permit log
set policy id 3016
set dst-address "3.3.3.3/32"
exit
!
set policy id 3053 name "Footprints" from "Untrust" to "CSA" "Blocked Addresses" "Any" "ANY" deny log
set policy id 3053
exit
Zu
edit 0
set srcintf "CSA"
set dstintf "Untrust"
set srcaddr "1.1.1.1/32"
set dstaddr "2.2.2.2/32" "3.3.3.3/32"
set action accept
set schedule "always"
set service "SSH"
set fsso disable
set nat enable
next
edit 0
set name "Footprints"
set srcintf "Untrust"
set dstintf "CSA"
set srcaddr "Blocked Addresses"
set dstaddr "all"
set action accept
set schedule "always"
set service "ALL"
set fsso disable
set nat enable
next
also habe ich zunächst Folgendes versucht, um loszulegen:
Suchen (set policy id (.+))
und Ersetzen durch edit 0
– Dadurch wird scheinbar alles hervorgehoben und ich habe eine leere Konfiguration, in der nur noch 0 bearbeitet werden kann.
Dann habe ich versucht, mit „Suchen (set policy id *)
und Ersetzen durch edit 0
“ zu arbeiten. Dadurch bleibt alles übrig, aber es sieht nun wie folgt aus: (Im Grunde wird vor XXXX eine 0 eingefügt.
edit 03016 from "CSA" to "Untrust" "1.1.1.1/32" "2.2.2.2/32" "SSH" permit log set policy id 3016 set dst-address "3.3.3.3/32" exit
Ich wäre für jede Hilfe sehr dankbar, da sie mir Stunden ersparen könnte!!!!
Antwort1
Meiner Meinung nach sollten Sie ein Skript in Ihrer bevorzugten Skriptsprache schreiben.
Wenn Sie diese Aufgabe jedoch wirklich mit Ntepad++ erledigen möchten, gibt es hier eine Regex-Lösung. Wie Sie sehen, sind der Regex und der Ersatz etwas komplex und erfordern gute Kenntnisse, um sie beizubehalten.
Ctrl+H
Finde was:
set policy id \d+ (?:(?:(?!exit).)*?name (".+?"))?(?:(?!exit).)*?from (".+?")(?:(?!exit).)*?to (".+?")(?:(?!exit).)*?("\d{1,3}(?:\.\d{1,3}){3}/\d+"|"[\w ]+") ("\d{1,3}(?:\.\d{1,3}){3}/\d+"|"[\w ]+") (".+?")(?:(?:(?!exit).)*?set dst-address (".+?"))?(?:(?!exit).)+?exit
Ersetzen mit:
edit 0\n\t(?1set name $1\n\t:)set srcintf $2\n\tset dstintf $3\n\tset srcaddr $4\n\tset dstaddr $5(?7 $7:)\n\tset action accept\n\tset schedule "always"\n\tset service $6\n\tset fsso disable\n\tset nat enable\nnext
ÜBERPRÜFEN Groß-/Kleinschreibung beachten
ÜBERPRÜFEN Umwickeln
ÜBERPRÜFEN Regulären Ausdruck
ÜBERPRÜFEN
. matches newline
Replace all
Find All in Current Document
Erläuterung:
set policy id \d+ # literally and digits for id
(?: # non capture group
(?:(?!exit).)*? # 0 or more any character but not the word "exit"
name (".+?") # name is captured in group 1
)? # end group, optional
(?:(?!exit).)*? # 0 or more any character but not the word "exit"
from (".+?") # from is captured in group 2
(?:(?!exit).)*? # 0 or more any character but not the word "exit"
to (".+?") # to is captured in group 3
(?:(?!exit).)*? # 0 or more any character but not the word "exit"
("\d{1,3}(?:\.\d{1,3}){3}/\d+"|"[\w ]+") # group 4, src IP or literal like "Blocked Addresses"
("\d{1,3}(?:\.\d{1,3}){3}/\d+"|"[\w ]+") # group 5, dst IP or literal like "Any"
(".+?") # group 6, service
(?: # non capture group
(?:(?!exit).)*? # 0 or more any character but not the word "exit"
set dst-address # literally
(".+?") # group 7, 1 or more any character, not greedy
)? # end group, optional
(?:(?!exit).)*? # 0 or more any character but not the word "exit"
exit # literally
Ersatz:
edit 0\n\t # edit 0 followed by linefeed and tabulation
(?1 # if group 1 exists, (name)
set name $1\n\t # print the name (group 1)
: # else
# nothing
) # end if
set srcintf $2\n\t # and so on ...
set dstintf $3\n\t
set srcaddr $4\n\t
set dstaddr $5
(?7 $7:)\n\t
set action accept\n\t
set schedule "always"\n\t
set service $6\n\t
set fsso disable\n\t
set nat enable\n
next
Bildschirmaufnahme (vorher):
Bildschirmaufnahme (nachher):
Hier finden Sie eine vollständige ErklärungHier