Come posso ottenere l'indirizzo IP di un client desktop remoto? E come posso attivare un comando shell su RDP connect?


23

Esiste un modo per determinare l'indirizzo IP di un client desktop remoto utilizzando PowerShell (o qualche altro metodo) sul server? (Windows Server 2008 R2 x64 è quello che sto usando)

EDIT: Trovo che posso grep stdout di netstat per recuperare queste informazioni che è molto fattibile, quindi come posso attivare uno script / comando shell quando un client si connette?


In quale contesto? Questo script verrà eseguito come utente, amministratore o qualcun altro?
Zoredache,

È all'interno di una LAN, WAN o Internet?
Zapto,

Lascio aperto RDP a Internet, quindi so quali IP sono i miei e quali no. Non sono sicuro di chi verrà eseguito, credo che qualunque cosa mi permetta di recuperare tali informazioni.
Chaz,

Ho fatto qualche ricerca e questo post ( serverfault.com/questions/314386/listing-users-using-rdp ) sembra essere molto vicino a ciò di cui hai bisogno. Non sono abbastanza esperto in Powershell per renderlo target / return e IP
Skawt

Quel tipo di evento e le informazioni che fornisce ancora non mi danno l'IP remoto, la cosa più vicina che mi sta dando nel registro degli eventi è 'COMPUTER'
chaz

Risposte:


21

Da un prompt dei comandi è possibile eseguire il comando seguente per ottenere un elenco degli IP remoti collegati a RDP (porta 3389).

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

Sono sicuro che questo può essere scritto in PowerShell (o anche solo in un semplice file batch vecchio). Posso fornire un esempio domani se sei interessato.


L'ho usato prima che funzioni in modo molto efficace, ora ho solo bisogno di trovare un modo per attivare uno script quando si connette un client RDP.
Chaz,

12

Bene, ho capito che l' task schedulerapplicazione fornita con Windows è configurabile su dove posso eseguire uno script batch, attivato quando viene generato un evento nel registro eventi. Tramite l'interfaccia utente scegli il tipo di evento, l'origine dell'evento e l'ID evento, nel qual caso ho usato 4264 (e sì è cattura tutti i tipi di accesso). Qui invece ho usato un semplice script batch:

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

Ho anche trovato un esempio utilissimo su come iscriversi / ascoltare le scritture di eventi in .NET: http://msdn.microsoft.com/en-us/library/bb552514(v=vs.90).aspx I ' finirò per usarlo invece per scrivere determinati eventi in un database per l'esame basato sul web.

L'unico svantaggio di questa soluzione è che se si dispone di Servizi Desktop remoto abilitati e più persone sono connesse, non è possibile distinguere tra loro nell'output netstat.


1
Questa è in realtà una soluzione abbastanza elegante quando si mette tutto insieme. Non ero nemmeno a conoscenza della funzionalità avanzata dell'utilità di pianificazione. Ottimo lavoro!
John Homer,

per lo scheduler delle versioni precedenti potresti farlo con file batch e script evtmon.vbs
Scott R

5

Se non è necessario copiarlo, è possibile cercare nel registro eventi di sicurezza l'ID evento 4624. Ci sarà una riga:

Indirizzo di rete di origine: 192.168.xxx.xxx


4264 è per gli accessi ed è utile per la registrazione degli accessi di tipo controller di dominio attivo. Ho bisogno dell'IP corrente del client RDP connect, il cui account di accesso è irrilevante e credo che sia fattibile recuperando tramite lo stdout di netstat. Voglio dire in questo momento se ci fosse un modo per innescare l'esecuzione di un comando shell / script / programma su una connessione RDP, sarebbe fantastico.
Chaz,

In realtà 4624 (errore di battitura) è corretto, ci sono più tipi di accesso che vengono visualizzati su quell'ID evento.
Chaz
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.