Wie kann ich die IP-Adresse eines Remotedesktopclients abrufen? Und wie kann ich bei einer RDP-Verbindung einen Shell-Befehl auslösen?

23

Gibt es eine Möglichkeit, die IP-Adresse eines Remotedesktopclients mithilfe von PowerShell (oder einer anderen Methode) auf dem Server zu ermitteln? (Ich verwende Windows Server 2008 R2 x64.)

BEARBEITEN: Ich finde, dass ich die stdout von netstat verwenden kann, um diese Informationen abzurufen, was sehr realisierbar ist. Wie kann ich also ein Skript / einen Shell-Befehl auslösen, wenn sich ein Client verbindet?

chaz
quelle
In welchem ​​Kontext? Wird dieses Skript als Benutzer, Administrator oder als eine andere Person ausgeführt?
Zoredache
Befindet sich dies in einem LAN, WAN oder Internet?
Zapto
Ich lasse RDP für das Internet offen, damit ich weiß, welche IPs mir gehören und welche nicht. Ich bin nicht sicher, unter wem es laufen wird, ich denke, was auch immer mich diese Informationen abrufen lässt.
Chaz
Ich habe ein bisschen gesucht, und dieser Beitrag ( serverfault.com/questions/314386/listing-users-using-rdp ) scheint ganz in Ihrer Nähe zu sein. Ich beherrsche Powershell einfach nicht genug, um es zum Ziel / zur Rückkehr zu bringen und IP
Skawt
Dieser Ereignistyp und die darin enthaltenen Informationen geben mir immer noch nicht die Remote-IP-
Adresse an. Das

Antworten:

21

An einer Eingabeaufforderung können Sie den folgenden Befehl ausführen, um eine Liste der Remote-IPs abzurufen, die mit RDP verbunden sind (Port 3389).

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

Ich bin sicher, dass dies in Powershell geschrieben werden kann (oder sogar nur in einer einfachen alten Batch-Datei). Ich kann Ihnen morgen ein Beispiel geben, wenn Sie interessiert sind.

John Homer
quelle
Ich habe dies verwendet, bevor es sehr effektiv funktioniert. Jetzt muss ich nur noch eine Möglichkeit finden, ein Skript auszulösen, wenn ein RDP-Client eine Verbindung herstellt.
Chaz
12

Okay, ich habe herausgefunden, dass die task schedulermit Windows gelieferte Anwendung so konfiguriert werden kann, dass ich ein Stapelskript ausführen kann, das ausgelöst wird, wenn ein Ereignis im Ereignisprotokoll generiert wird. Über die Benutzeroberfläche wählen Sie den Ereignistyp, die Ereignisquelle und die Ereignis-ID aus. In diesem Fall habe ich 4264 verwendet (und yes erfasst alle Anmeldetypen). Hier habe ich stattdessen ein einfaches Batch-Skript verwendet:

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

Außerdem habe ich ein super nützliches Beispiel zum Abonnieren / Abhören von Ereignis-Schreibvorgängen in .NET gefunden: http://msdn.microsoft.com/en-us/library/bb552514(v=vs.90).aspx I ' Am Ende wird dies verwendet, um bestimmte Ereignisse zur webbasierten Prüfung in eine Datenbank zu schreiben.

Der einzige Nachteil dieser Lösung ist, dass Sie bei aktivierten Remotedesktopdiensten und mehreren verbundenen Personen in der netstat-Ausgabe nicht zwischen diesen unterscheiden können.

chaz
quelle
1
Das ist eigentlich eine ziemlich elegante Lösung, wenn man alles zusammensetzt. Mir war auch die erweiterte Taskplaner-Funktionalität nicht bekannt. Gut gemacht!
John Homer
Für ältere Versionen Scheduler können Sie es mit Batch-Datei und evtmon.vbs-Skript tun,
Scott R
5

Wenn Sie kein Skript benötigen, können Sie im Sicherheitsereignisprotokoll nach der Ereignis-ID 4624 suchen. Es wird eine Zeile angezeigt:

Quellnetzwerkadresse: 192.168.xxx.xxx

Tamerz
quelle
4264 ist für Anmeldungen vorgesehen und nützlich für die Protokollierung von Anmeldungen vom Typ aktiver Domänencontroller. Ich benötige die aktuelle IP-Adresse des RDP-Verbindungsclients. Das angemeldete Konto ist irrelevant und ich glaube, dass es durch die Standardausgabe von grepping / piping netstat abrufbar ist. Ich meine, wenn es jetzt eine Möglichkeit gäbe, die Ausführung eines Shell-Befehls / Skripts / Programms auf einer RDP-Verbindung auszulösen, wäre das großartig.
Chaz
Tatsächlich ist 4624 (Tippfehler) korrekt, es gibt mehrere Anmeldetypen, die in dieser Ereignis-ID angezeigt werden.
Chaz