如何获取远程桌面客户端的IP地址?在RDP连接时如何触发shell命令?


23

有没有一种方法可以在服务器上使用PowerShell(或其他方法)来确定远程桌面客户端的IP地址?(我正在使用Windows Server 2008 R2 x64)

编辑:我发现我可以grep netstat的stdout来检索此信息是非常可行的,因此当客户端连接时如何触发脚本/ shell命令?


在什么情况下?该脚本将以用户,管理员还是其他人的身份运行?
Zoredache

这是在LAN,WAN还是Internet中?
Zapto 2012年

我将RDP保持对Internet的开放状态,因此我知道哪些IP是我的,哪些不是。我不确定它将在谁的支持下运行,我想有什么能让我检索该信息的。
chaz 2012年

我做了一些搜索,而这篇文章(serverfault.com/questions/314386/listing-users-using-rdp)看起来很接近您的需求。我只是对Powershell不够熟练,无法使其成为目标/返回和IP
Skawt,2012年

该事件类型及其提供的信息仍然无法提供远程IP,它在事件日志中提供给我的最接近的信息是“计算机”
chaz 2012年

Answers:


21

在命令提示符下,您可以运行以下命令以获取连接到RDP(端口3389)的远程IP的列表。

netstat -n | find ":3389" | find "ESTABLISHED"

我敢肯定,可以在powershell中编写脚本(甚至只是普通的旧批处理文件)。如果您有兴趣,我明天可以提供示例。


在它非常有效地工作之前,我已经使用了它,现在,我只需要找到一种在RDP客户端连接时触发脚本的方法。
chaz 2012年

12

好的,我发现task schedulerWindows附带的应用程序可以配置为可以运行批处理脚本的位置,该脚本在事件日志中的事件生成时触发。通过UI,您可以选择事件类型,事件源和事件ID,在这种情况下,我使用4264(是的,它捕获所有登录类型)。在这里,我改用一个简单的批处理脚本:

SET logfile="rdp_ip_logs.log"
date /T>>%logfile%
time /T>>%logfile%
netstat -n | find ":3389" | find "ESTABLISHED">>%logfile%

此外,我发现了一个关于如何订阅这个超级有用的例子/监听事件写在.NET: http://msdn.microsoft.com/en-us/library/bb552514(v=vs.90).aspx 我”我最终将用它来将某些事件写入数据库以进行基于Web的检查。

该解决方案的唯一缺点是,如果启用了远程桌面服务并且连接了多个人,则无法在netstat输出中区分它们。


1
当您将它们放在一起时,这实际上是一个非常优雅的解决方案。我也不知道增强的任务计划程序功能。做得好!
约翰·荷马

对于旧版本的时间表中,您可以用批处理文件和脚本evtmon.vbs做到这一点看blogs.technet.microsoft.com/netmon/2007/02/22/...
斯科特- [R

5

如果不需要编写脚本,则可以在安全事件日志中查找事件ID4624。将出现以下一行:

源网络地址:192.168.xxx.xxx


4264用于登录,对于记录活动域控制器类型的登录很有用。我需要连接RDP客户端的当前IP,该帐户登录无关,并且我相信可以通过grepping / piping netstat的stdout来进行检索。我的意思是现在,如果有一种方法可以触发RDP连接上的shell命令/脚本/程序的执行,那就太好了。
chaz 2012年

实际上4624(typo)是正确的,该事件ID上显示多种登录类型。
chaz 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.