Comment obtenir l'adresse IP d'un client de bureau distant? Et comment puis-je déclencher une commande shell lors de la connexion RDP?

23

Existe-t-il un moyen de déterminer l'adresse IP d'un client de bureau distant à l'aide de PowerShell (ou d'une autre méthode) sur le serveur? (Windows Server 2008 R2 x64 est ce que j'utilise)

EDIT: Je trouve que je peux grep stdout de netstat pour récupérer ces informations qui est très faisable, alors comment puis-je déclencher un script / shell-commande quand un client se connecte?

chaz
la source
Dans quel contexte? Ce script sera-t-il exécuté en tant qu'utilisateur, administrateur ou autre?
Zoredache
Est-ce au sein d'un LAN, WAN ou Internet?
Zapto
Je laisse RDP ouvert à Internet, donc je sais quelles adresses IP sont à moi et lesquelles ne le sont pas. Je ne suis pas sûr de qui il fonctionnera, je suppose que tout ce qui me permet de récupérer ces informations.
chaz
J'ai fait quelques recherches et cet article ( serverfault.com/questions/314386/listing-users-using-rdp ) semble être très proche de ce dont vous avez besoin. Je ne suis tout simplement pas assez compétent en Powershell pour en faire une cible / retour et IP
Skawt
Ce type d'événement et les informations qu'il fournit ne me donnent toujours pas l'IP distante, la chose la plus proche qu'il me donne dans le journal des événements est 'ORDINATEUR'
chaz

Réponses:

21

À partir d'une invite de commandes, vous pouvez exécuter la commande suivante pour obtenir une liste des adresses IP distantes connectées à RDP (port 3389).

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

Je suis certain que cela peut être scripté en PowerShell (ou même simplement un ancien fichier batch). Je peux vous donner un exemple demain si vous êtes intéressé.

John Homer
la source
Je l'ai utilisé avant qu'il ne fonctionne très efficacement, maintenant j'ai juste besoin de trouver un moyen de déclencher un script lorsqu'un client RDP se connecte.
chaz
12

D'accord, j'ai compris que l' task schedulerapplication fournie avec Windows est configurable à l'endroit où je peux exécuter un script batch, déclenché lorsqu'un événement dans le journal des événements est généré. Via l'interface utilisateur, vous choisissez le type d'événement, la source d'événement et l'ID d'événement, auquel cas j'ai utilisé 4264 (et oui est capture tous les types d'ouverture de session). Ici, j'ai plutôt utilisé un simple script batch:

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

J'ai également trouvé un exemple très utile sur la façon de souscrire / écouter les écritures d'événements dans .NET: http://msdn.microsoft.com/en-us/library/bb552514(v=vs.90).aspx I ' Je vais finir par l'utiliser à la place pour écrire certains événements dans une base de données pour un examen sur le Web.

Le seul inconvénient de cette solution est que si vous avez activé les services Bureau à distance et que plusieurs personnes sont connectées, vous ne pouvez pas les différencier dans la sortie netstat.

chaz
la source
1
C'est en fait une solution assez élégante lorsque vous mettez tout cela ensemble. Je n'étais pas non plus au courant de la fonctionnalité améliorée du planificateur de tâches. Bon travail!
John Homer
pour le planificateur de versions plus anciennes, vous pouvez le faire avec un fichier batch et un script evtmon.vbs
Scott R
5

Si vous n'avez pas besoin de l'écrire, vous pouvez consulter le journal des événements de sécurité pour l'ID d'événement 4624. Il y aura une ligne:

Adresse réseau source: 192.168.xxx.xxx

Tamerz
la source
4264 est pour les connexions et est utile pour la journalisation des connexions de type contrôleur de domaine actif. J'ai besoin de l'IP actuelle du client RDP connect, quel compte connecté n'est pas pertinent et je pense qu'il est possible de le récupérer via la sortie standard de netstat. Je veux dire maintenant s'il y avait un moyen de déclencher l'exécution d'une commande shell / script / programme sur une connexion RDP, ce serait génial.
chaz
En fait, 4624 (faute de frappe) est correct, il existe plusieurs types d'ouverture de session qui s'affichent sur cet ID d'événement.
chaz