Tabla de contenido
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.