我使用 PowerShell 检测当前是否有人通过 RDP 连接:
Get-WinEvent Microsoft-Windows-TerminalServices-LocalSessionManager/Operational | Where-Object {$_.Id -eq 24 -or $_.Id -eq 25} | Select-Object -First 1 -Property *
从那里,我可以得到IP。获取相同信息的另一种方法是:
netstat -n | findstr ":3389" | findstr "ESTABLISHED"
但是,在我的网络上,大多数通过 RDP 登录的用户都将通过 OpenVPN 进行连接,因此他们会话的 IP 始终是 OpenVPN 服务器的 IP。
现在,显然 RDP 主机能够与原始 RDP 客户端进行通信。我怎样才能找到有关该 RDP 客户端身份的任何信息?(IP、主机名、netbios 名称,任何能帮助我识别机器或用户的东西)
我也不能使用用于登录远程桌面的帐户,因为在我感兴趣的特定情况下,人们共享相同的登录会话,因此它始终是 RDP 主机上的同一用户。
我会搜索客户端计算机名称。
%CLIENTNAME%
环境变量保持这个值。在用户会话中的主机上,它可以从命令行或脚本中使用:
但是,请注意,在具有多个用户共享同一会话的系统上,使用共享用户帐户,此值可能会过时。
在主机上获取当前登录会话的一种更可靠的方法是从注册表中获取值。根据使用的 Windows 版本,它将位于以下位置之一:
示例 1 (NT 5.2):
示例 2 (NT 6.3):
示例 3 (NT 6.1) 从用户环境运行的批处理脚本:
其中
***
inS-1-5-21-***
是用户 SID。请注意,还会有一个类似
HKEY_USERS\S-1-5-21-***_Classes
的不会保存CLIENTNAME
子键。可靠地为您获取客户端名称的方法是检查
HKEY_USERS\S-1-5-21-***\Volatile Environment
子CLIENTNAME
键,如果它不存在,则枚举其中的键Volatile Environment
并检查其中任何一个具有子键的全整数值名称(1
,2
等)的CLIENTNAME
键。执行此操作的 Python 函数:
所有这些方法都适用于 Windows 终端服务器和 Citrix 服务器(在 Receiver 4.12 上检查)。
另一种方法是安装 PowerShell cmdlet 并使用它捕获信息:
或者,具体来说