2012-04-20 25 views
1

我有一個vbs腳本,用於監視遠程登錄到服務器的用戶。 它使用「qwinsta」獲取用戶名,我可以簡單地通過等待斷開連接進行循環。如何獲取連接的Windows RDP用戶的IP或主機名?

但qwinsta不返回遠程用戶的主機名或IP地址。我搜索了整個上午,無法找到任何cmd命令或wmi命令來獲取基於用戶名或會話ID的連接用戶的IP /主機。

有沒有人有任何其他想法得到這個信息?我發現這個外部工具給出了ip地址:http://home.fnal.gov/~jklemenc/tslistusers.html,但我寧願不使用外部程序。我假設它使用了一些wmi或其他方法來獲得我可以在自己的腳本中以某種方式執行的ipaddress。

我知道我可以使用netstat和過濾端口3389來獲得只有RDP會話並獲得IP的方式,但我無法知道哪個IP屬於哪個用戶。

回答

1

此信息通過(大部分)未公開的API WinStationQueryInformationW公開。就我所知,它不通過WMI或任何命令行工具或COM對象公開。

如果你可以使用.NET語言,你可以使用Cassia library處理Win32 API調用 - 看ITerminalServicesSession.RemoteEndPoint(由作爲來賓登錄下載最新的樹幹搭建here)。應該可以使用VBScript using tlbexp and regasm中的Cassia,但我還沒有嘗試過。

1

您可以在批處理文件中使用下面的代碼將主機名的文本文件傳遞到數組中,並分別查詢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 
相關問題