PowerShell 语言 分析 Windows 防火墙日志 统计被拦截的 IP 频率

PowerShell阿木 发布于 2 天前 2 次阅读


PowerShell 防火墙日志分析:统计被拦截的 IP 频率

Windows 防火墙是保护计算机免受恶意软件和网络攻击的重要工具。它记录了所有通过防火墙的入站和出站连接,包括被拦截的连接。分析这些日志可以帮助我们了解网络攻击的趋势,识别潜在的安全威胁,并采取相应的防护措施。本文将使用 PowerShell 语言编写一个脚本,用于分析 Windows 防火墙日志,统计被拦截的 IP 地址频率。

准备工作

在开始编写脚本之前,我们需要确保以下几点:

1. 具有管理员权限的 PowerShell 环境。
2. Windows 防火墙日志文件的位置。默认情况下,日志文件位于 `C:WindowsSystem32LogFilesFirewall` 目录下。
3. 确保防火墙日志文件格式为 .evtx,这是 Windows 事件日志的扩展名。

脚本编写

以下是一个 PowerShell 脚本示例,用于分析防火墙日志并统计被拦截的 IP 地址频率。

powershell
获取防火墙日志文件路径
$logPath = "C:WindowsSystem32LogFilesFirewallpfirewall.evtx"

创建一个空字典来存储 IP 地址和其对应的拦截次数
$ipFrequency = @{}

读取日志文件
try {
$log = Get-WinEvent -FilterHashtable @{LogName="Firewall"; ID=5100} -Path $logPath
} catch {
Write-Host "无法读取日志文件:$_"
exit
}

遍历日志条目
foreach ($entry in $log) {
获取被拦截的 IP 地址
$ipAddress = $entry.Properties[5].Value

如果 IP 地址已存在于字典中,则增加其计数
if ($ipFrequency.ContainsKey($ipAddress)) {
$ipFrequency[$ipAddress]++
} else {
否则,将 IP 地址添加到字典中并设置计数为 1
$ipFrequency.Add($ipAddress, 1)
}
}

对字典进行排序,按拦截次数降序排列
$sortedFrequency = $ipFrequency.GetEnumerator() | Sort-Object -Property Value -Descending

打印结果
foreach ($item in $sortedFrequency) {
Write-Host "IP 地址:$($item.Key),拦截次数:$($item.Value)"
}

保存结果到文件
$sortedFrequency | Export-Csv -Path "C:Firewall_IP_Frequency.csv" -NoTypeInformation

脚本解析

1. 获取防火墙日志文件路径:我们需要指定防火墙日志文件的路径。在这个例子中,我们使用默认路径 `C:WindowsSystem32LogFilesFirewallpfirewall.evtx`。

2. 创建字典:我们创建一个空字典 `$ipFrequency` 来存储 IP 地址和其对应的拦截次数。

3. 读取日志文件:使用 `Get-WinEvent` 命令读取防火墙日志文件。我们使用 `-FilterHashtable` 参数来指定日志名称和事件 ID(5100 表示防火墙被拦截的事件)。

4. 遍历日志条目:对于每个日志条目,我们提取被拦截的 IP 地址。

5. 统计 IP 地址频率:如果 IP 地址已存在于字典中,则增加其计数;否则,将其添加到字典中并设置计数为 1。

6. 排序和打印结果:我们将字典按拦截次数降序排列,并打印出每个 IP 地址及其拦截次数。

7. 保存结果到文件:我们将排序后的结果保存到 CSV 文件中。

总结

通过上述 PowerShell 脚本,我们可以轻松地分析 Windows 防火墙日志,统计被拦截的 IP 地址频率。这对于网络安全监控和威胁检测非常有用。在实际应用中,可以根据需要调整脚本,例如添加更多的事件 ID、过滤特定时间段的数据等。