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?


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.


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.


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.