С некоторой помощью (также благодаря SO) я придумал скрипт Powershell, который анализирует некоторые правила брандмауэра.
Сценарий составлен так:
$filepath = 'C:\test.txt'
$getfile = Get-Content $filepath -Raw
$zones = $getfile -split ("From .* To .*)"
$zones_groups = foreach ($zone in $zones) {
$groups = $zones -split "^Rule .*"
foreach ($group in $groups) {
$group = [pscustomobject]@{
Rule_Number = ([regex]"^Rule .*").Match($section).Groups[1].Value
Action = @(([regex]"Rule \d+ Allow|Deny").Matches($section) | ForEach-Object {
$_.Groups.Value[1]
})
Source = @(([regex]"^ IP: .* -> .* Iface").Matches($section) | ForEach-Object {
$_.Groups.Value[1]
})
Destination = @(([regex]"-> .* ").Matches($section) | ForEach-Object {
$_.Groups.Value[1]
})
Bytes_Packets = @(([regex]"Bytes, Packets: ").Matches($section) | ForEach-Object {
$_.Groups.Value[1]
})
Usage = @(([regex]"Usage :").Matches($section) | ForEach-Object {
$_.Groups.Value[1]
})
}
if ($group.Name){
$group
}
}
}
Входной файл делится на «зоны безопасности» (например, LAN или WAN) и разделяет правила вывода для каждой зоны. Например:
From LAN to LAN
Current Size: 9
Save count: 9
Maximum Size: 1100
Policy Elem connCount: 1
Rule 1 Allow Service Any -> Any (Enabled)
IP: Any -> All Management IP Addresses Iface: Any (ffffffff) -> Any (ffffffff)
Logging: Enabled Management: Enabled
Allow Fragmented Packets: Enabled Packet Monitor: Disabled
Flow Reporting: Disabled
Auto Rule: Disabled
Users Included:All, Excluded: None
Schedule: Always on (on)
Comment: Auto-added management Rule
[...]
Bytes,Packets: Rx: 1234567890, 1234567890 Tx: 1234567890, 1234567890
Usage: 1234567890
[...]
Rule 2
[...]
From LAN to WAN
Rule 1
[...]
Rule 2
[...]
Проблема, с которой я сталкиваюсь, заключается в том, что при попытке напечатать, например, группы, они работают нормально только для первой группы, но затем сценарий идет бесконечно l oop , но я не могу понять, почему. Я предполагаю, что это может быть что-то, связанное с обоими циклами foreach.
Желаемый результат будет примерно таким:
Zone name: "From LAN to LAN", Rule 1, Action: Allow, Source: "Any", Destination: "Any", Bytes,Packets: "Rx: 1234567890, 1234567890 Tx: 1234567890, 1234567890", Usage: 1234567890
Заранее спасибо за вашу помощь