Introdução ao nc (netcat) - A Ferramenta Versátil para Teste de Portas e Depuração
O Que Você Vai Aprender
- Como verificar conectividade de porta com um único comando
nc -zv - Como criar um listener temporário para teste de conexão
- Padrões de transferência de arquivo, banner grabbing e modo UDP
- A diferença entre
nc.openbsdencat, e como corrigir suporte ausente ao-z
Resumo Rápido
- Verificação de porta ->
nc -zv host porta - Servidor simples ->
nc -l 8080(lado receptor) - Transferência de arquivo -> receptor:
nc -l 9999 > out.txt, remetente:nc host 9999 < in.txt - Defina um timeout com
-w <segundos>para evitar travamentos indefinidos
O Que É o nc (netcat)?
nc (netcat) é uma ferramenta de linha de comando de uso geral que lê e escreve diretamente em sockets TCP/UDP -- ganhando o apelido de "canivete suíço das redes." Diferente do curl (somente HTTP) ou ping (somente ICMP), o nc funciona com qualquer porta e qualquer protocolo. Como o nc pode atuar como cliente e servidor, você pode testar conectividade antes de um serviço estar rodando -- tornando-o invaluavel para verificações pré-deploy, validação de ambientes CI e depuração ao vivo.
Como Testar se uma Porta Está Aberta?
Use -z (modo zero-I/O -- conecta sem enviar dados) combinado com -v (saída detalhada).
$ nc -zv example.com 80 Connection to example.com 80 port [tcp/http] succeeded! $ nc -zv example.com 22 Connection to example.com 22 port [tcp/ssh] succeeded!
Quando uma porta está fechada ou inacessível:
$ nc -zv example.com 25 nc: connectx to example.com port 25 (tcp) failed: Connection refused
Escanear um intervalo de portas de uma vez:
$ nc -zv example.com 20-25
Adicione -w <segundos> para definir um timeout de conexão e evitar travamento em hosts que não respondem.
$ nc -zv -w 3 192.168.1.10 443
Como Iniciar um Servidor Simples?
A flag -l coloca o nc em modo de escuta, aguardando na porta especificada. Quando uma conexão chega, o nc faz a ponte com stdin/stdout.
# Lado receptor (inicie primeiro) $ nc -l 8080 # Lado remetente (em um terminal separado) $ nc localhost 8080 Hello from client!
O texto digitado no remetente aparece no receptor em tempo real. A conexão é bidirecional, então ambos os lados podem digitar.
O nc transmite dados em texto plano sem autenticação ou criptografia. Ele não foi projetado como um servidor de produção persistente.
É Possível Transferir Arquivos com nc?
Sim -- use redirecionamento do shell. Isso é útil para passagem rápida de dados em ambientes onde scp/rsync não está disponível.
# Lado receptor (inicie primeiro) $ nc -l 9999 > received.tar.gz # Lado remetente $ nc receiver-host 9999 < archive.tar.gz
O nc do remetente sai quando atinge o EOF. Se o receptor não sair automaticamente, pressione Ctrl+C.
No nc sabor OpenBSD, adicione -q 0 no lado receptor para sair automaticamente no EOF.
$ nc -l 9999 -q 0 > received.tar.gz
Como Capturar um Banner de Serviço?
Conecte com nc e envie manualmente uma requisição no nível do protocolo para inspecionar a resposta do serviço.
Verificação de Cabeçalho HTTP
$ printf "HEAD / HTTP/1.0\r\n\r\n" | nc example.com 80 HTTP/1.1 200 OK Server: nginx/1.24.0 ...
Banner SMTP
$ nc mail.example.com 25 220 mail.example.com ESMTP Postfix (Ubuntu)
Informações de banner (nome do software, versão, dicas de SO) são úteis para verificação de deploy e avaliações de segurança.
Como Usar o Modo UDP?
Adicione a flag -u para mudar de TCP para UDP. Use para testar serviços UDP como DNS (53), NTP (123) e syslog (514).
# Verificacao de conectividade de porta UDP $ nc -u -zv 8.8.8.8 53 Connection to 8.8.8.8 53 port [udp/domain] succeeded! # Listener UDP simples $ nc -u -l 5005
UDP é sem conexão, então verificações com -z podem ser enganosas: se o host remoto recebe o pacote mas não envia resposta, o nc ainda reporta falha. Para escaneamento preciso de portas UDP, considere nmap -sU.
Quais São as Diferentes Variantes do nc?
O Linux inclui múltiplas implementações do nc com diferentes conjuntos de opções.
| Comando | Pacote | Notas |
|---|---|---|
nc (OpenBSD) |
netcat-openbsd |
Padrão no Ubuntu/Debian. Suporta -z, -w, -q |
nc (Traditional) |
netcat-traditional |
Versão mais antiga. Sem -z; suporta -e para exec |
ncat |
ncat (incluído no nmap) |
Suporte SSL/TLS, modo broker |
Verificar qual variante está instalada:
$ nc -h 2>&1 | head -1 OpenBSD netcat (Debian patchlevel 1.226-1)
Mudar para a versão OpenBSD no Ubuntu:
$ sudo apt install netcat-openbsd $ sudo update-alternatives --config nc
Armadilhas Comuns
1. nc: invalid option -- 'z'
O pacote netcat-traditional está instalado. Instale netcat-openbsd e mude para ele (veja Variantes acima).
2. "Connection refused" Mesmo Quando a Porta Deveria Estar Aberta
A aplicação não está escutando, ou um firewall está bloqueando.
# Verificar estado LISTEN $ ss -tlnp | grep ':8080' # Verificar regras UFW $ sudo ufw status
3. Transferência de Arquivo Trava e Nunca Completa
O nc do receptor está esperando mais dados. No remetente, confirme que o EOF é enviado quando o arquivo termina (é enviado, com redirecionamento). No receptor, use -q 0 (OpenBSD) ou pressione Ctrl+C.
4. "Address already in use" ao Reutilizar uma Porta
A porta está em estado TIME_WAIT. Verifique com:
$ ss -tlnp | grep ':8080'
Use uma porta diferente ou espere alguns segundos antes de tentar novamente.