nc¶
O que é¶
nc (netcat) é o canivete suíço para teste de camada 4 (TCP/UDP): abre conexão, escuta porta e envia payload cru sem “inteligência” de protocolo.
Para que serve¶
- Confirmar rapidamente se uma porta TCP está aberta/fechada/filtrada.
- Validar se um serviço UDP responde (DNS, syslog, statsd).
- Simular cliente/servidor simples durante incidentes.
- Testar de dentro do mesmo contexto do app (host, container, pod, namespace).
Quando usar¶
- Aplicação reporta
connection refused,i/o timeoutouno route to host. - Você quer separar problema de rede (L3/L4) de problema de aplicação (L7).
- Precisa provar que o firewall/security group/NACL está bloqueando.
- Quer checar se a porta está bindada no IP esperado (
0.0.0.0vs127.0.0.1).
Exemplos de uso¶
# Scan TCP sem DNS e com timeout curto
nc -vz -n -w 2 10.10.20.15 5432
# Teste UDP (não garante resposta se serviço não responder)
nc -vzu -n -w 2 10.10.20.53 53
# Listener para validar chegada de tráfego
nc -lvk 9000
# Enviar requisição HTTP crua
printf 'GET /health HTTP/1.1\r\nHost: api.exemplo\r\n\r\n' | nc -n -w 3 10.10.20.80 80
Exemplos de saída¶
$ nc -vz -n -w 2 10.10.20.15 5432
Connection to 10.10.20.15 5432 port [tcp/postgresql] succeeded!
Interpretação: rota + firewall + processo ouvindo na porta TCP estão OK.
$ nc -vz -n -w 2 10.10.20.15 5432
nc: connect to 10.10.20.15 port 5432 (tcp) failed: Connection refused
Interpretação: host é alcançável, mas porta está fechada ou serviço caiu.
$ nc -vz -n -w 2 10.10.20.15 5432
nc: connect to 10.10.20.15 port 5432 (tcp) timed out: Operation now in progress
Interpretação: normalmente bloqueio em firewall/security group/ACL ou rota quebrada.
Dicas de troubleshooting¶
- Rode no mesmo namespace de rede do app (
kubectl exec,docker exec,ip netns exec). - Sempre compare com destino saudável na mesma sub-rede para baseline.
- Use
-npara remover DNS da equação; depois repita com hostname para validar DNS. - Se
refused, verifique servidor:ss -lntp | rg :5432. - Se
timeout, valide caminho:ip route, regras FW (iptables/nft), SG/NACL.
Flags importantes¶
-z: modo scan (não envia dados de aplicação).-v: detalha resultado (útil para evidência em incidente).-n: não resolve DNS (acelera e isola problema de nome).-w <seg>: timeout de conexão/leitura.-u: modo UDP.-l/-k: escutar porta / manter listener para múltiplas conexões.
Boas práticas¶
- Logue comando + horário + origem do teste no ticket.
- Não conclua “porta aberta = app saudável”; valide endpoint real quando possível.
- Em UDP, trate “silêncio” com cuidado: ausência de resposta não prova queda.
- Evite loops de teste agressivos em produção (pode acionar IDS/IPS).
Referências¶
man nc- OpenBSD netcat (variante mais comum): https://man.openbsd.org/nc