¿Cómo puedo obtener la dirección IP de un cliente de escritorio remoto? ¿Y cómo puedo activar un comando de shell en RDP connect?

23

¿Hay alguna manera de determinar la dirección IP de un cliente de escritorio remoto utilizando PowerShell (o algún otro método) en el servidor? (Windows Server 2008 R2 x64 es lo que estoy usando)

EDITAR: encuentro que puedo grep stdout de netstat para recuperar esta información que es muy factible, entonces, ¿cómo puedo activar un script / shell-command cuando un cliente se conecta?

chaz
fuente
¿En qué contexto? ¿Se ejecutará este script como usuario, administrador u otra persona?
Zoredache
¿Está esto dentro de una LAN, WAN o internet?
Zapto
Dejo RDP abierto a Internet, así que sé qué IP son mías y cuáles no. No estoy seguro de con quién se ejecutará, supongo que lo que sea que me permita recuperar esa información.
chaz
Hice un poco de búsqueda y esta publicación ( serverfault.com/questions/314386/listing-users-using-rdp ) parece estar muy cerca de lo que necesita. Simplemente no soy lo suficientemente competente en Powershell para que sea objetivo / retorno e IP
Skawt
Ese tipo de evento y la información que proporciona todavía no me da la IP remota, lo más cercano que me está dando en el registro de eventos es 'COMPUTADORA'
chaz

Respuestas:

21

Desde un símbolo del sistema, puede ejecutar el siguiente comando para obtener una lista de las IP remotas que están conectadas a RDP (puerto 3389).

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

Estoy seguro de que esto puede ser programado en PowerShell (o incluso un simple archivo por lotes antiguo). Puedo darte un ejemplo mañana si estás interesado.

John Homer
fuente
He usado esto antes de que funcione de manera muy efectiva, ahora solo necesito encontrar una manera de activar un script cuando se conecta un cliente RDP.
chaz
12

Bien, descubrí que la task scheduleraplicación que viene con Windows es configurable para que pueda ejecutar un script por lotes, que se activa cuando se genera un evento en el registro de eventos. A través de la interfaz de usuario, elige el tipo de evento, el origen del evento y la ID del evento, en cuyo caso utilicé 4264 (y sí, captura todos los tipos de inicio de sesión). Aquí utilicé un script por lotes simple en su lugar:

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

También encontré este ejemplo súper útil sobre cómo suscribirse / escuchar las escrituras de eventos en .NET: http://msdn.microsoft.com/en-us/library/bb552514(v=vs.90).aspx I ' Voy a terminar usando eso para escribir ciertos eventos en una base de datos para un examen basado en la web.

El único inconveniente de esta solución es que si tiene habilitados los Servicios de escritorio remoto y hay varias personas conectadas, no puede diferenciarlas en la salida de netstat.

chaz
fuente
1
En realidad, es una solución bastante elegante cuando lo juntas todo. Tampoco conocía la funcionalidad mejorada del programador de tareas. ¡Gran trabajo!
John Homer
para el planificador de versiones anteriores, puede hacerlo con el archivo por lotes y el script evtmon.vbs,
Scott R
5

Si no necesita hacer un script, puede buscar en el registro de eventos de seguridad el ID de evento 4624. Habrá una línea:

Dirección de red de origen: 192.168.xxx.xxx

Tamerz
fuente
4264 es para inicios de sesión y es útil para registrar inicios de sesión de tipo de controlador de dominio activo. Necesito la IP actual del cliente Connect RDP, cuya cuenta iniciada es irrelevante y creo que es factible recuperarla mediante grepping / piping netstat's stdout. Quiero decir, en este momento, si hubiera una manera de activar la ejecución de un comando / script / programa de shell en una conexión RDP, sería genial.
chaz
En realidad, 4624 (error tipográfico) es correcto, hay varios tipos de inicio de sesión que aparecen en ese ID de evento.
chaz