Fazendo Telnet sem o comando telnet

Você está precisando testar a conectividade de um servidor ou contêiner com algum outro host e porta, mas não tem o comando telnet e nenhum outro comando alternativo que faça a mesma função neste?

Não precisa se desesperar, pequeno mafagafo, se o servidor ou contêiner tem o shell Bash, ainda é possível testar a conectividade com outro host e porta.

É só usar essa funcionalidade “secreta” do Bash:

timeout 1 bash -c 'cat < /dev/tcp/google.com/80' && echo "Porta aberta" || echo "Porta fechada"

Nota

google.com e a porta 80 foram só um exemplo, você deve colocar o host e a porta que você gostaria de testar a conexão no servidor ou contêiner de origem.

Mas porque isso funciona?

Quando o Bash vê um redirecionamento apontando para um caminho que começa com /dev/tcp/HOST/PORT, ele intercepta essa chamada antes de passá-la para o sistema operacional. Em vez de tentar abrir um arquivo físico, o Bash faz o seguinte:

Extrai o Hostname/IP e a Porta do caminho.

Utiliza funções de rede padrão da biblioteca C (como socket(), connect()) para estabelecer uma conexão TCP real.

Cria um descritor de arquivo que o shell pode usar para ler e gravar dados nessa conexão

Importante

Se o comando falhar mesmo estando com a sintaxe correta, é porque provavelmente o Bash foi compilado com a opção --disable-net-redirections, aí infelizmente não vai ser possível fazer o teste

Atenção

Isso só é possível de ser feito no Bash, então se você tentar fazer em outro shell isso não vai funcionar.

E é isso pessoal, hoje aprendemos que um bom shell pode fazer sua vida mais fácil.

Interações & Comentários