Como posso obter o endereço IP de um cliente de área de trabalho remota? E como posso disparar um comando de shell na conexão RDP?

23

Existe uma maneira de determinar o endereço IP de um cliente de área de trabalho remota usando o PowerShell (ou algum outro método) no servidor? (Windows Server 2008 R2 x64 é o que estou usando)

EDIT: Eu acho que posso grep stdout do netstat para recuperar essas informações que são muito viáveis, então como posso disparar um script / comando shell quando um cliente se conecta?

chaz
fonte
Dentro de que contexto? Esse script será executado como usuário, administrador ou outra pessoa?
precisa
Isso está dentro de uma LAN, WAN ou internet?
Zapto
Deixo o RDP aberto à Internet, para saber quais IPs são meus e quais não são. Não tenho certeza de quem será o responsável, acho que seja o que for que me permita recuperar essas informações.
chaz
Fiz algumas pesquisas e esta postagem ( serverfault.com/questions/314386/listing-users-using-rdp ) parece estar muito próxima do que você precisa. Eu não sou apenas proficientes suficiente em Powershell para torná-lo alvo / retorno e IP
Skawt
Esse tipo de evento e as informações que ele fornece ainda não me dar o IP remoto, mais próximo ele está me dando no log de eventos é 'computador'
Chaz

Respostas:

21

Em um prompt de comando, você pode executar o seguinte comando para obter uma lista dos IPs remotos conectados ao RDP (porta 3389).

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

Estou certo de que isso pode ser script no PowerShell (ou até mesmo em um simples arquivo em lote antigo). Posso dar um exemplo amanhã, se você estiver interessado.

John Homer
fonte
Eu usei isso antes que funcione de maneira muito eficaz, agora só preciso encontrar uma maneira de disparar um script quando um cliente RDP se conectar.
chaz
12

Tudo bem, eu descobri que o task scheduleraplicativo que acompanha o Windows é configurável para onde eu possa executar um script em lote, acionado quando um evento no log de eventos é gerado. Por meio da interface do usuário, você escolhe o tipo de evento, a fonte do evento e o ID do evento. Nesse caso, usei o 4264 (e sim captura todos os tipos de logon). Aqui, usei um script em lote simples:

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

Também encontrei um exemplo super útil sobre como assinar / ouvir gravações de eventos no .NET: http://msdn.microsoft.com/en-us/library/bb552514(v=vs.90).aspx I ' em vez disso, acabarei usando isso para gravar determinados eventos em um banco de dados para exame baseado na Web.

A única desvantagem desta solução é que, se você tiver os Serviços de Área de Trabalho Remota ativados e várias pessoas estiverem conectadas, não poderá diferenciar entre elas na saída netstat.

chaz
fonte
1
Essa é realmente uma solução bastante elegante quando você junta tudo. Também não conhecia a funcionalidade aprimorada do agendador de tarefas. Bom trabalho!
31412 John Homer
para versões mais antigas Scheduler você poderia fazê-lo com o arquivo de lote e evtmon.vbs roteiro ver blogs.technet.microsoft.com/netmon/2007/02/22/...
Scott R
4

Se você não precisar criar um script, poderá procurar no log de eventos de segurança a identificação de evento 4624. Haverá uma linha:

Endereço de rede de origem: 192.168.xxx.xxx

Tamerz
fonte
4264 é para logins e é útil para fazer logon do tipo de controlador de domínio ativo. Eu preciso do IP atual do cliente RDP de conexão, cuja conta conectada é irrelevante e acredito que seja possível de recuperar através do stdout do netstat grepping / piping. Quero dizer agora, se houvesse uma maneira de disparar a execução de um comando / script / programa de shell em uma conexão RDP, isso seria ótimo.
chaz
Na verdade, o 4624 (erro de digitação) está correto, existem vários tipos de logon que aparecem nessa identificação de evento.
Chaz