三二互联专业提供速度最快最稳定的美国服务器、香港服务器。中美直连,亚洲优化![ 代理登陆 ] [ 付款方式 ] [ 找回密码 ][ 电子协议责任书 ]
硬件资源保障

采用高配品牌服务器

主流强悍CPU配置

确保服务高速稳定运行

中美直连线路

中美直连亚洲优化

采用中国CN2骨干网络

保证速度飞快稳定高效

如何使用PowerShell批量查询pfirewall.log文件中被封禁IP的连接记录?

美国、香港服务器

如何使用PowerShell批量查询pfirewall.log文件中被封禁IP的连接记录?

11-22   来源:

 使用 PowerShell 批量查询 pfirewall.log 中被封禁 IP 的连接记录,核心是通过 筛选 DROP 关键字(防火墙阻断标识)、解析日志字段,实现批量提取、统计、导出,适合快速处理大量日志或多 IP 排查。以下是 4 个实用场景的脚本(直接复制可用),含详细说明:

前置准备
确认日志路径(默认路径,若自定义需替换):
C:\Windows\System32\LogFiles\Firewall\pfirewall.log
以 管理员身份 打开 PowerShell(避免权限不足无法读取日志)。
确保日志已启用 “记录丢弃的数据包”(参考前文 wf.msc 配置方法)。
场景 1:批量提取所有被封禁(DROP)的连接记录
输出所有被防火墙阻断的连接,包含关键信息(日期、时间、被封禁 IP、目标端口等),便于快速浏览:
powershell
# 日志文件路径(默认路径,自定义路径需修改)
$logPath = "C:\Windows\System32\LogFiles\Firewall\pfirewall.log"
 
# 读取日志,筛选 DROP 记录,解析关键字段
Get-Content -Path $logPath -ErrorAction SilentlyContinue |
  Select-String -Pattern "DROP" |  # 仅保留被封禁的记录
  ForEach-Object {
    $fields = $_.Line -split "\s+"  # 按空格分割日志字段(日志默认空格分隔)
    # 只处理有效字段(避免日志表头/异常条目)
    if ($fields.Count -ge 8) {
      [PSCustomObject]@{
        日期       = $fields[0]
        时间       = $fields[1]
        动作       = $fields[2]  # 固定为 DROP
        协议       = $fields[3]  # TCP/UDP/ICMP
        被封禁IP   = $fields[4]  # 攻击源IP(核心字段)
        源端口     = $fields[5]  # 攻击源端口
        服务器IP   = $fields[6]  # 目标服务器IP
        目标端口   = $fields[7]  # 服务器被攻击的端口(如3389、80)
        完整记录   = $_.Line     # 保留完整日志行(便于核查)
      }
    }
  } |
  Format-Table -AutoSize  # 自动调整表格列宽,美观显示
输出效果示例:
日期 时间 动作 协议 被封禁 IP 源端口 服务器 IP 目标端口
2025-11-22 09:15:30 DROP TCP 192.168.1.100 54321 10.0.0.5 3389
2025-11-22 09:16:45 DROP TCP 192.168.1.101 63210 10.0.0.5 80
场景 2:按指定 IP 批量查询(精准定位某一被封禁 IP 的所有记录)
若已知被封禁 IP(如 192.168.1.100),快速提取该 IP 的所有阻断记录:
powershell
$logPath = "C:\Windows\System32\LogFiles\Firewall\pfirewall.log"
$targetIP = "192.168.1.100"  # 替换为你的被封禁IP
 
Get-Content -Path $logPath -ErrorAction SilentlyContinue |
  Select-String -Pattern "DROP.*$targetIP" |  # 匹配 DROP + 目标IP(精准筛选)
  ForEach-Object {
    $fields = $_.Line -split "\s+"
    if ($fields.Count -ge 8) {
      [PSCustomObject]@{
        日期       = $fields[0]
        时间       = $fields[1]
        协议       = $fields[3]
        被封禁IP   = $fields[4]
        目标端口   = $fields[7]
        连接状态   = "已被防火墙阻断"
      }
    }
  } |
  Sort-Object -Property 日期, 时间  # 按时间排序,便于追溯攻击时序
场景 3:批量统计被封禁 IP 的攻击次数(按攻击频率排序)
快速识别高频攻击 IP(如暴力破解源),输出 IP 及对应的攻击次数,方便优先处理:
powershell
$logPath = "C:\Windows\System32\LogFiles\Firewall\pfirewall.log"
 
Get-Content -Path $logPath -ErrorAction SilentlyContinue |
  Select-String -Pattern "DROP" |
  ForEach-Object {
    $fields = $_.Line -split "\s+"
    if ($fields.Count -ge 5) { $fields[4] }  # 仅提取被封禁IP
  } |
  Where-Object { $_ -notmatch "::1|127.0.0.1" } |  # 排除本地IP(避免干扰)
  Group-Object |  # 按IP分组统计
  Select-Object @{Name="被封禁IP"; Expression={$_.Name}},
                @{Name="攻击次数"; Expression={$_.Count}} |
  Sort-Object -Property 攻击次数 -Descending  # 按攻击次数降序排列
输出效果示例:
被封禁 IP 攻击次数
192.168.1.100 28
192.168.1.101 15
203.0.113.5 8
场景 4:批量导出被封禁 IP 记录到 CSV(便于存档 / 分析)
将所有被封禁记录导出为 CSV 文件(Excel 可直接打开),适合长期存档或进一步数据分析:
powershell
$logPath = "C:\Windows\System32\LogFiles\Firewall\pfirewall.log"
$exportPath = "C:\Temp\被封禁IP连接记录.csv"  # 导出路径(可自定义)
 
# 确保导出目录存在(如C:\Temp不存在则自动创建)
$exportDir = Split-Path -Path $exportPath -Parent
if (-not (Test-Path -Path $exportDir)) {
  New-Item -Path $exportDir -ItemType Directory -Force | Out-Null
}
 
# 提取记录并导出CSV
Get-Content -Path $logPath -ErrorAction SilentlyContinue |
  Select-String -Pattern "DROP" |
  ForEach-Object {
    $fields = $_.Line -split "\s+"
    if ($fields.Count -ge 8) {
      [PSCustomObject]@{
        日期       = $fields[0]
        时间       = $fields[1]
        动作       = $fields[2]
        协议       = $fields[3]
        被封禁IP   = $fields[4]
        源端口     = $fields[5]
        服务器IP   = $fields[6]
        目标端口   = $fields[7]
        日志完整行 = $_.Line
      }
    }
  } |
  Export-Csv -Path $exportPath -Encoding UTF-8 -NoTypeInformation  # 导出CSV
使用方式:
导出后打开 C:\Temp\被封禁IP连接记录.csv,可用 Excel 筛选、排序,或导入到数据分析工具。
关键优化与注意事项
避免日志表头干扰:脚本中通过 $fields.Count -ge 8 过滤表头(表头字段数不足),确保只处理有效连接记录。
权限问题:若提示 “无法访问文件”,需以管理员身份运行 PowerShell,或先将日志文件复制到桌面再读取(绕过系统目录权限限制)。
日志编码:默认日志为 ANSI 编码,Get-Content 可正常读取;若日志编码异常,可添加 -Encoding Default 参数。
大日志处理:若日志文件过大(如超过 100MB),可添加 -ReadCount 1000 分批读取,提升效率:
Get-Content -Path $logPath -ReadCount 1000 -ErrorAction SilentlyContinue
排除无效 IP:脚本中已排除本地回环 IP(127.0.0.1、::1),避免无关记录干扰。
扩展:实时监控被封禁 IP(动态查看新阻断记录)
若需实时监控新增的被封禁连接,可添加 -Wait 参数实现实时刷新:
powershell
$logPath = "C:\Windows\System32\LogFiles\Firewall\pfirewall.log"
 
Get-Content -Path $logPath -Wait -ErrorAction SilentlyContinue |  # -Wait:实时监听日志更新
  Select-String -Pattern "DROP" |
  ForEach-Object {
    $fields = $_.Line -split "\s+"
    if ($fields.Count -ge 8) {
      "[{0} {1}] 被封禁IP: {2} → 攻击端口: {3}" -f $fields[0], $fields[1], $fields[4], $fields[7]
    }
  }
运行后会实时输出新的阻断记录,适合临时监控攻击行为。
通过以上脚本,可高效完成批量查询、统计、导出等操作,覆盖日志分析的核心需求。若需调整字段、筛选条件(如按端口 / 时间范围),可留言说明场景,可进一步优化脚本。

三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快

上一篇:如何在Notepad++中使用正则表达式查询pfirewall.log文件中被封禁IP的连接记录? 下一篇:如何在pfirewall.log文件中查找被封禁IP的连接记录?

美国GIA服务器三二互联版权所有 WWW.250.cc 2008-2015 All Rights Reserved
三二互联 - 专业的美国C3服务器、香港vps、抗DOOS流量清洗、云备份系统、网站加速系统、美国GIA服务器和香港云服务器产品提供商
三二互联24小时在线工单系统为您提供全面、专业、周到的技术支持与服务
咨询热线:400-679-9994(免长话费)