Introducao ao nc (netcat) - A Ferramenta Versatil para Teste de Portas e Depuracao
O Que Voce Vai Aprender
- Como verificar conectividade de porta com um unico comando
nc -zv - Como criar um listener temporario para teste de conexao
- Padroes de transferencia de arquivo, banner grabbing e modo UDP
- A diferenca entre
nc.openbsdencat, e como corrigir suporte ausente ao-z
Resumo Rapido
- Verificacao de porta ->
nc -zv host porta - Servidor simples ->
nc -l 8080(lado receptor) - Transferencia 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 E o nc (netcat)?
nc (netcat) e uma ferramenta de linha de comando de uso geral que le e escreve diretamente em sockets TCP/UDP -- ganhando o apelido de "canivete suico 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, voce pode testar conectividade antes de um servico estar rodando -- tornando-o invaluavel para verificacoes pre-deploy, validacao de ambientes CI e depuracao ao vivo.
Como Testar se uma Porta Esta Aberta?
Use -z (modo zero-I/O -- conecta sem enviar dados) combinado com -v (saida 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 esta fechada ou inacessivel:
$ 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 conexao e evitar travamento em hosts que nao 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 conexao 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 conexao e bidirecional, entao ambos os lados podem digitar.
O nc transmite dados em texto plano sem autenticacao ou criptografia. Ele nao foi projetado como um servidor de producao persistente.
E Possivel Transferir Arquivos com nc?
Sim -- use redirecionamento do shell. Isso e util para passagem rapida de dados em ambientes onde scp/rsync nao esta disponivel.
# 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 nao 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 Servico?
Conecte com nc e envie manualmente uma requisicao no nivel do protocolo para inspecionar a resposta do servico.
Verificacao de Cabecalho 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)
Informacoes de banner (nome do software, versao, dicas de SO) sao uteis para verificacao de deploy e avaliacoes de seguranca.
Como Usar o Modo UDP?
Adicione a flag -u para mudar de TCP para UDP. Use para testar servicos 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 e sem conexao, entao verificacoes com -z podem ser enganosas: se o host remoto recebe o pacote mas nao envia resposta, o nc ainda reporta falha. Para escaneamento preciso de portas UDP, considere nmap -sU.
Quais Sao as Diferentes Variantes do nc?
O Linux inclui multiplas implementacoes do nc com diferentes conjuntos de opcoes.
| Comando | Pacote | Notas |
|---|---|---|
nc (OpenBSD) |
netcat-openbsd |
Padrao no Ubuntu/Debian. Suporta -z, -w, -q |
nc (Traditional) |
netcat-traditional |
Versao mais antiga. Sem -z; suporta -e para exec |
ncat |
ncat (incluido no nmap) |
Suporte SSL/TLS, modo broker |
Verificar qual variante esta instalada:
$ nc -h 2>&1 | head -1 OpenBSD netcat (Debian patchlevel 1.226-1)
Mudar para a versao OpenBSD no Ubuntu:
$ sudo apt install netcat-openbsd $ sudo update-alternatives --config nc
Armadilhas Comuns
1. nc: invalid option -- 'z'
O pacote netcat-traditional esta instalado. Instale netcat-openbsd e mude para ele (veja Variantes acima).
2. "Connection refused" Mesmo Quando a Porta Deveria Estar Aberta
A aplicacao nao esta escutando, ou um firewall esta bloqueando.
# Verificar estado LISTEN $ ss -tlnp | grep ':8080' # Verificar regras UFW $ sudo ufw status
3. Transferencia de Arquivo Trava e Nunca Completa
O nc do receptor esta esperando mais dados. No remetente, confirme que o EOF e enviado quando o arquivo termina (e enviado, com redirecionamento). No receptor, use -q 0 (OpenBSD) ou pressione Ctrl+C.
4. "Address already in use" ao Reutilizar uma Porta
A porta esta em estado TIME_WAIT. Verifique com:
$ ss -tlnp | grep ':8080'
Use uma porta diferente ou espere alguns segundos antes de tentar novamente.