【问题标题】:How to get IP or Hostname of connected Windows RDP users?如何获取已连接 Windows RDP 用户的 IP 或主机名?
【发布时间】:2012-04-20 16:59:20
【问题描述】:

我有一个 vbs 脚本,用于监控远程登录到服务器的用户 它使用“qwinsta”来获取用户名,我可以简单地循环等待断开连接。

但是 qwinsta 不返回远程用户的主机名或 IP 地址。我已经搜索了一上午,找不到任何 cmd 命令或 wmi 命令来根据用户名或会话 ID 获取已连接用户的 ip/host。

有没有人有任何其他想法来获取此信息?我找到了这个提供 IP 地址的外部实用程序:http://home.fnal.gov/~jklemenc/tslistusers.html,但我宁愿不使用外部程序。我假设它正在使用某种 wmi 或其他方法来获取我可以在我自己的脚本中以某种方式执行的 ipaddress。

我知道我可以使用 netstat 和过滤端口 3389 来仅获取 RDP 会话并以这种方式获取 IP,但从那时起我无法知道哪个 IP 属于哪个用户。

【问题讨论】:

    标签: session wmi rdp wsh


    【解决方案1】:

    此信息通过(大部分)未记录的 API WinStationQueryInformationW 公开。据我所知,它没有通过 WMI 或任何命令行实用程序或 COM 对象公开。

    如果您可以使用 .NET 语言,您可以使用 Cassia library 来处理 Win32 API 调用 - 请参阅 ITerminalServicesSession.RemoteEndPoint(以访客身份登录下载最新的主干构建 here)。从 VBScript using tlbexp and regasm 中使用 Cassia 应该是可以的,但我还没有尝试过。

    【讨论】:

      【解决方案2】:

      您可以在批处理文件中使用下面的代码将主机名的文本文件传递到数组中并查询每个 rdp 会话信息... (只需确保 Server_List.txt 文件位于您创建的批处理文件旁边)

      @echo off
      setlocal EnableDelayedExpansion
      echo RDPSessionINFO > ./results.txt
      echo ============== >> ./results.txt
      
      set i=0
      for /F %%a in (Server_List.txt) do (
         set /A i+=1
         set array[!i!]=%%a
      )
      set n=%i%
      
      for /L %%i in (1,1,%n%) do echo !array[%%i]! >> ./results.txt && qwinsta /server:!array[%%i]!>> ./results.txt && echo =================== >> ./results.txt
      
      start notepad.exe ./results.txt
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-02
        • 2021-01-27
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多