Introducao ao nc (netcat) - A Ferramenta Versatil para Teste de Portas e Depuracao

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.openbsd e ncat, 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

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
...
$ 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.

Proximas Leituras