Windows Server 2019 查询远程登录源 IP 地址(含 RDP 和网络登录)
🖥️
本文记录如何在 Windows Server 2019 上启用登录审计,并通过 PowerShell 脚本提取远程登录的用户名和源 IP 地址(RDP、远程共享、远程 PowerShell 等)。适合系统运维、主机安全、渗透测试场景下使用。
🧾 一、背景
在实际运维或安全审计中,我们经常需要查询谁登录过 Windows 服务器,特别是远程桌面(RDP)连接的来源 IP。Windows 会将这些信息记录在事件查看器的 Security
日志中,但需要我们手动开启审计策略,并编写查询脚本进行提取。
⚙️ 二、启用“登录”事件审计策略
在默认情况下,Windows 不一定会记录完整的登录日志。我们需要使用 auditpol
命令手动启用。
-
以管理员身份打开 命令提示符(CMD)
执行以下命令:
auditpol /set /subcategory:"登录" /success:enable /failure:enable
如果是英文系统,则将
"登录"
替换为"Logon"
。
如不确定子类别名称,可执行:
auditpol /list /subcategory:"*"
查找系统中实际使用的名称。
🧪 三、使用 PowerShell 查询登录源 IP
执行以下 PowerShell 脚本,可以提取最近 200 条登录日志(事件 ID 4624)中为远程登录(LogonType 10 或 3)的记录:
Get-WinEvent -LogName Security -MaxEvents 200 |
Where-Object { $_.Id -eq 4624 } |
ForEach-Object {$data = $_.Properties$logonType = $data[8].Value$ip = $data[18].Value$user = $data[5].Valueif ($logonType -eq 10 -or $logonType -eq 3) {[PSCustomObject]@{Time = $_.TimeCreatedUser = $userIPAddress = $ipLogonType = $logonType}}
} | Format-Table -AutoSize
📖 四、登录类型(LogonType)说明
LogonType | 含义 |
2 | 本地交互式登录 |
3 | 网络登录(如 SMB/共享) |
4 | 批处理(计划任务) |
5 | 服务登录 |
7 | 解锁 |
10 | 远程桌面(RDP) |
11 | CachedInteractive |
🧩 五、效果示例
Time User IPAddress LogonType ---- ---- --------- --------- 2025/06/27 20:56:15 Administrator 192.168.1.10 10 2025/06/27 21:12:03 guest 192.168.1.200 3
🛠️ 六、常见问题
1. auditpol
提示“参数错误”?
检查是否使用了正确的子类别名称。中文系统请使用 "登录"
,英文系统使用 "Logon"
。
-
日志中
IP
显示为空?
那是本地登录或使用 localhost
登录,不记录 IP 地址。建议筛选掉 ::1
和 127.0.0.1
。
🧩 七、进阶建议
-
可以将输出保存为
.csv
或.json
日志 -
也可以定期调度脚本自动生成登录报表
-
配合防火墙、入侵检测系统形成闭环审计
✅ 八、总结
通过本方法,你可以轻松:
-
启用登录审计
-
查询远程登录用户及其源 IP
-
支持日志归档与审计合规要求
这在多用户管理服务器、远程维护、安全取证中非常实用。