Como Verificar Portas no Linux Usando /dev/tcp e /dev/udp (Sem Telnet ou Netcat)

Verificar se uma porta está aberta num servidor remoto é uma tarefa comum para administradores de sistemas. Embora ferramentas como telnet ou netcat (nc) sejam frequentemente utilizadas para esse fim, o Bash oferece uma alternativa incorporada que não requer instalação adicional: o uso de /dev/tcp/ e /dev/udp/.

Neste artigo, vais aprender a usar estas funcionalidades integradas do Bash para verificar portas TCP e UDP de forma rápida, simples e sem dependências externas.

O que é /dev/tcp/host/porta e /dev/udp/host/porta?

O Bash tem uma funcionalidade oculta que permite usar redirecções especiais para criar ligações de rede. Estes caminhos (/dev/tcp/ e /dev/udp/) não existem no sistema de ficheiros, mas o Bash interpreta-os internamente para abrir sockets.

echo > /dev/tcp/host/porta

Isto tenta abrir uma ligação TCP ao host e porta especificados.
Verificar uma Porta TCP a partir da Linha de Comandos

Para testar se uma porta está aberta, basta executar:

echo > /dev/tcp/google.com/80 && echo "Porta aberta" || echo "Porta fechada"

O que isto faz?

Se a ligação for aberta com sucesso, o Bash continua e mostra “Porta aberta”.
Se falhar (por exemplo, a porta está fechada ou o host não responde), mostra “Porta fechada”.

Com timeout

Para evitar que o comando fique bloqueado caso o host não responda, podes usar timeout:

timeout 3 bash -c "echo > /dev/tcp/google.com/80" && echo "Aberta" || echo "Fechada ou Timeout"

🛈 Requer Bash com suporte para redireccionamento /dev/tcp. Não funciona em shells como sh ou dash.

Verificar uma Porta UDP com /dev/udp

O uso para UDP é semelhante:

echo > /dev/udp/8.8.8.8/53 && echo "Enviado" || echo "Falhou"

Mas há um detalhe importante: o UDP não garante entrega nem resposta, pelo que este método não confirma se a porta está realmente aberta.

Como receber resposta?

Podes usar um descritor de ficheiro para enviar e depois tentar ler:

exec 3<> /dev/udp/8.8.8.8/53 echo -ne '\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00' >&3 read -t 2 -u 3 resposta && echo "Resposta: $resposta" || echo "Sem resposta"

Este exemplo envia uma consulta DNS vazia para a porta 53 e espera uma resposta.
Limitações do Método

Funcionalidade TCP UDP
Detectar se a porta está aberta Fiável Pouco fiável
Requer ferramentas externas Não Não
Recebe resposta do serviço Sim (se o serviço responder) Só se houver resposta válida

E se eu quiser algo mais fiável para UDP?

Se precisares de verificar se uma porta UDP está realmente aberta e a responder, é melhor usar ferramentas como:

nc -uzv # netcat em modo UDP nmap -sU -p # scan UDP com Nmap

Usar /dev/tcp/ e /dev/udp/ é uma excelente forma de verificar portas rapidamente sem depender de ferramentas externas. É especialmente útil em ambientes minimalistas ou scripts automatizados.

Resumo rápido:

✅ TCP: Funciona muito bem para verificar portas abertas.
⚠️ UDP: Pode enviar datagramas, mas não garante saber se a porta está aberta.

🧰 Não precisas de instalar nada se tiveres Bash.

Já experimentaste nos teus scripts? Deixa-nos as tuas dúvidas ou partilha como o usas.

Deixe um comentário