[guineves ~]#_

Como testar conexões sem telnet

Vamos a mais uma dica, dessa vez vou mostrar uma alternativa para testar conexão entre 2 pontos sem utilizar executáveis como telnet, netcat e afins.

Para isso vamos fazer uso de um “device file” nativo chamado /dev/tcp.

Utilizando esse método, podemos observar alguns comportamentos, os quais irei detalhar abaixo:

Vamos usar como exemplo um teste simples de conexão com este site, na porta 443.

$ >/dev/tcp/guineves.com.br/443

Conexão OK

Caso, imediatamente após dar um Enter, o cursor retorne para o terminal, sem mensagens, a conexão foi estabelecida com sucesso.

Isso pode ser confirmado verificando o “exit code” da última execução e vendo o retorno 0, que significa execução sem erros.

$ echo $? 
0

Conexão recusada

A seguinte informação nos mostra, de forma geral, que a conexão chegou até o host, mas que a porta não está aberta.

bash: connect: Connection refused 
bash: /dev/tcp/guineves.com.br/443: Connection refused

Nesse caso o retorno do comando é 1, indicando um erro.

$ echo $? 
1

Timeout

Agora, caso o comando prenda o terminal, é sinal de que a tentativa de conexão não chega no destino sugerindo, entre outros motivos, um bloqueio de firewall.

Ao final do timeout (aqui ele leva 2 minutos para acontecer), a mensagem abaixo é exibida e o código de retorno também é 1.

bash: connect: Connection timed out 
bash: /dev/tcp/guineves.com.br/443: Connection timed out

E aqui vai uma dica dentro da dica 😀

Podemos fazer uso do comando timeout para reduzir essa espera e um condicional in-line para analisar o retorno e indicar se houve sucesso ou falha.

$ timeout 5 bash -c ">/dev/tcp/guineves.com.br/443" && echo "Conexão OK" || echo "Conexão Falhou"

Essa técnica pode ser utilizada para outros casos, e nada impede que você faça a analise do “$?” e a tratativa isolada.

Até a próxima!