Ir para o conteúdo principal
  1. Notas/

Fazendo Telnet sem o comando telnet

·266 palavras·2 minutos· loading · loading · · ·

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 mafagalfo, 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:

  1. Extrai o Hostname/IP e a Porta do caminho.
  2. Utiliza funções de rede padrão da biblioteca C (como socket(), connect()) para estabelecer uma conexão TCP real.
  3. 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

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.

Thiago (Zozô) Ozores
Autor
Thiago (Zozô) Ozores
Engenheiro de Plataforma | SRE | Professor | Escotista