Sondando uma porta para o RDP

3

Eu uso um túnel ssh para o RDP no meu computador de casa ("home").

Ocasionalmente, o software de encapsulamento executado em casa trava e a porta RDP pára de ser encapsulada. Eu tentei resolver isso programando um script em casa para ser executado a cada 15 minutos que executa "netstat -tln" no meu roteador e reinicia o software de encapsulamento se a porta RDP encapsulada não estiver mais aberta.

Infelizmente, ocasionalmente, as falhas são de tal ordem que a porta RDP permanece aberta e aceitando conexões, mas não encapsula tráfego. Por exemplo. a porta permanece aberta de acordo com o netstat e se eu tentar fazer telnet na porta, ele conecta e me mostra uma tela em branco. Se eu tentar RDP através do túnel, a sessão se conecta, mas gira em "Configurando a sessão remota".

Conclusão: gostaria que meu script "watchdog" tentasse se conectar à porta RDP para determinar se o túnel ainda é bom. Como você testa uma porta para testar se é uma porta RDP aberta?

Estou pensando que o teste ideal está realmente investigando a porta para o RDP, mas também estou aberto a outras ideias.

    
por Tmdean 25.03.2015 / 20:40

1 resposta

2

Eu descobri uma maneira fácil de fazer isso. Quando meu script executa o comando netstat no roteador para verificar se o túnel RDP está aberto, também posso enviar uma solicitação de conexão RDP pelo túnel usando netcat !

Este é o comando que eu usei para enviar o pacote de requisição de conexão. Peguei o próprio pacote da sequência de conexão de exemplo na especificação RDP da Microsoft.

echo -ne '\x03\x00\x00\x2c\x27\xe0\x00\x00\x00\x00\x00'\
'Cookie: mstshash=eltons\r\n'\
'\x01\x00\x08\x00\x00\x00\x00\x00' |
nc -w 5 localhost 6000 |
xxd -p |
xargs -0 printf 'RDP response: %s\n'

O encapsulamento está na porta 6000. O comando netcat tem -w 5 para que a conexão seja fechada se uma resposta não for recebida dentro de 5 segundos. xxd converte para uma string hexadecimal simples e prefixo a saída de xxd com RDP response: para que meu script possa verificar facilmente essa linha na saída.

Se o servidor RDP estiver atendendo, receberei uma saída semelhante a esta.

RDP response: 030000130ed000001234000209080000000000

A única outra validação que faço é procurar o byte 02 no deslocamento 11 para verificar se é um pacote RDP que inclui uma estrutura TYPE_RDP_NEG_RSP (resposta de negociação RDP).

Corrigir as falhas seria a solução óbvia, mas sofri o software de encapsulamento de vários modos diferentes e não estou fazendo nada incomum com isso. O software que estou usando é o BitVise SSH Client. Eu estou usando a versão mais recente e com alguns pesquisando eu não encontrei ninguém que tenha problemas semelhantes. Ele só falha uma vez a cada poucos dias ou semanas, mas é frustrante tentar RDP no meu computador para descobrir que ele não está aceitando conexões e não há nada que eu possa fazer sobre isso até chegar em casa.

    
por 26.03.2015 / 03:28