← retour aux snippets

nc: tester la connectivité d'un port

Vérifier rapidement si un port est ouvert (TCP/TLS), avec délais et sortie claire.

bash réseau #nc#netcat#tcp

objectif

Tester l’accès réseau à un hôte/port (ou une liste de ports) et obtenir un retour explicite, avec un délai pour ne pas bloquer le terminal.

code minimal

# test TCP sur 443 avec délai 3s (sort OK/FAILED + code de retour)
nc -zv -w 3 data.pm 443

utilisation

# tester plusieurs ports d'un coup
for p in 80 443 5432; do nc -zv -w 2 db.data.pm "$p"; done

# vérifier un service TLS et le certificat (SNI)
openssl s_client -connect data.pm:443 -servername data.pm -brief < /dev/null

# tester en IPv6
nc -6 -zv -w 3 data.pm 443

# vérifier un port UDP (meilleur-effort, pas toujours fiable)
nc -zvu -w 3 dns.data.pm 53

# wrapper avec timeout (évite les hangs; GNU timeout)
timeout 5s nc -zv data.pm 22

variante(s) utile(s)

# compat macOS/BSD (timeout via -G au lieu de -w)
nc -zv -G 3 data.pm 443

# test rapide sans nc (bash seulement): exit 0 si OK, 1 si KO
bash -c 'echo > /dev/tcp/data.pm/443' 2>/dev/null && echo "ouvert" || echo "fermé"

# via un jump host SSH (test d’un port interne)
ssh -J user@bastion data.pm nc -zv -w 3 10.0.0.5 5432

# scanner une plage limitée (prudence, conforme à vos politiques)
nc -zv -w 1 data.pm 8000-8010

notes

  • -z sonde sans envoyer de données, -v rend la sortie explicite, -w (GNU) et -G (BSD/macOS) définissent le délai.
  • UDP ne garantit pas de réponse; un “open” peut ne pas être détecté de façon fiable sans protocole applicatif.
  • pour TLS, openssl s_client valide aussi le handshake et peut afficher les infos de certificat.
  • utilisez des délais pour éviter les blocages; adaptez IPv4/IPv6 avec -4 ou -6 selon le besoin.