Quand on doit tester rapidement un service, transférer un fichier entre deux machines ou diagnostiquer une connexion réseau, netcat (ou nc) est l’outil idéal. Surnommé le “couteau suisse du réseau”, il permet de créer des connexions TCP/UDP en une seule commande, sans configuration complexe.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Établir des connexions TCP et UDP vers des services
- Scanner des ports pour vérifier leur disponibilité
- Transférer des fichiers entre machines sans scp/rsync
- Créer un serveur en écoute pour tester vos applications
- Déboguer des services réseau (HTTP, SMTP, etc.)
Rappel de sécurité
Section intitulée « Rappel de sécurité »La commande netcat dans l’écosystème réseau
Section intitulée « La commande netcat dans l’écosystème réseau »netcat fait partie des outils de diagnostic réseau. Chaque outil a sa spécialité :
| Outil | Spécialité | Quand l’utiliser |
|---|---|---|
netcat | Connexions TCP/UDP manuelles | Tests rapides, transferts ponctuels |
nmap | Scan de ports avancé | Découverte réseau, audit sécurité |
curl | Requêtes HTTP/HTTPS | Tests d’API, téléchargements |
telnet | Connexion texte | Débogage protocoles (legacy) |
socat | Tunnels complexes | Redirections, proxys avancés |
ss/netstat | État des connexions | Voir les ports en écoute |
Quand utiliser netcat vs nmap ?
| Situation | netcat | nmap |
|---|---|---|
| Tester si un port est ouvert | ✅ nc -zv host 22 | ✅ mais overkill |
| Scanner une plage de ports | ⚠️ Basique | ✅ Plus complet |
| Détection de services/versions | ❌ | ✅ -sV |
| Transfert de fichiers | ✅ Parfait | ❌ |
| Créer un serveur temporaire | ✅ | ❌ |
| Audit de sécurité | ❌ | ✅ Scripts NSE |
Workflow typique de diagnostic :
# 1. Vérifier si le service répondnc -zv 192.168.1.100 80
# 2. Récupérer la bannière du serviceecho "" | nc -v -w 2 192.168.1.100 22
# 3. Tester une requête HTTP manuellementecho -e "GET / HTTP/1.1\nHost: example.com\n\n" | nc example.com 80
# 4. Si besoin d'un scan complet → passer à nmapnmap -sV -p 1-1000 192.168.1.100Comprendre la commande netcat en 2 min
Section intitulée « Comprendre la commande netcat en 2 min »🧠 Modèle mental — Netcat : Le tuyau réseau
Netcat crée un canal bidirectionnel entre stdin/stdout et une connexion réseau. Il peut agir en client (connecter) ou en serveur (écouter).
Points clés
- **Client ou Serveur** : nc HOST PORT (client) ou nc -l PORT (serveur)
- **Bidirectionnel** : stdin → réseau et réseau → stdout
- **Redirections** : < fichier (envoyer) et > fichier (recevoir)
- **Protocole** : TCP par défaut, UDP avec -u
Règles d'or
Vocabulaire essentiel
- -l
- Listen : mode serveur, attend une connexion
- -p
- Port : spécifie le port (obligatoire avec -l en traditional)
- -v
- Verbose : affiche les détails de connexion
- -z
- Zero-I/O : scan sans envoyer de données
- -w
- Wait : timeout en secondes
- -u
- UDP : utiliser UDP au lieu de TCP
📚 Pour aller plus loin — 4 options avancées
- -e
- Execute : lance un programme à chaque connexion (backdoor)
- -k
- Keep-open : reste ouvert après déconnexion (ncat)
- --ssl
- Chiffrement SSL/TLS (ncat uniquement)
- FIFO
- Named pipe pour créer des relais bidirectionnels
netcat crée un tuyau bidirectionnel entre votre terminal (stdin/stdout) et une connexion réseau. Il peut agir en client (se connecter) ou en serveur (écouter).
Syntaxe minimale
Section intitulée « Syntaxe minimale »# Mode client : se connecter à un servicenc [HOST] [PORT]
# Mode serveur : écouter sur un portnc -l -p [PORT] # netcat-traditionalnc -l [PORT] # netcat-openbsdLes deux modes de fonctionnement
Section intitulée « Les deux modes de fonctionnement »| Mode | Syntaxe | Usage |
|---|---|---|
| Client | nc HOST PORT | Se connecter à un service existant |
| Serveur | nc -l -p PORT | Attendre une connexion entrante |
Connexion basique
Section intitulée « Connexion basique »# Se connecter au port SSHnc 192.168.1.100 22
# Se connecter à un serveur webnc example.com 80# puis taper : GET / HTTP/1.0 [Entrée] [Entrée]Scanner des ports
Section intitulée « Scanner des ports »# Vérifier un seul portnc -zv 192.168.1.100 22
# Scanner une plage de portsnc -zv 192.168.1.100 20-25
# Scanner plusieurs ports spécifiquesnc -zv 192.168.1.100 22,80,443Options importantes :
-z: Mode scan (pas de données envoyées)-v: Verbeux (affiche le résultat)-w N: Timeout après N secondes
Transfert de fichiers
Section intitulée « Transfert de fichiers »# Machine réceptrice (écoute sur port 4444)nc -l -p 4444 > fichier_recu.txt
# Machine émettrice (envoie le fichier)nc 192.168.1.100 4444 < fichier_a_envoyer.txtAvec compression pour les gros fichiers :
# Récepteurnc -l -p 4444 | tar xzvf -
# Émetteur (envoie un dossier compressé)tar czvf - /dossier | nc 192.168.1.100 4444Protocole UDP
Section intitulée « Protocole UDP »# Connexion UDP (pour tester DNS, DHCP, etc.)nc -u 8.8.8.8 53
# Écouter en UDPnc -l -u -p 5000Installation
Section intitulée « Installation »# Version traditionnelle (avec -e)sudo apt install netcat-traditional
# Version OpenBSD (par défaut, sans -e)sudo apt install netcat-openbsd
# Vérifier la versionnc -h 2>&1 | head -3sudo dnf install nc# ou nmap-ncat pour la version amélioréesudo dnf install nmap-ncatnc --version# Préinstallé (version BSD)nc -h
# Ou installer ncat via Homebrewbrew install nmapncat --version# Installer via Nmap (inclut ncat)# Télécharger depuis https://nmap.org/download.html
# Ou via Chocolateychoco install nmapncat --versionVariantes de Netcat
Section intitulée « Variantes de Netcat »Il existe plusieurs versions de netcat avec des différences importantes :
| Version | Options notables | Sécurité |
|---|---|---|
| netcat-traditional | -e (execute), -p PORT obligatoire | ⚠️ -e = backdoor |
| netcat-openbsd | Pas de -e, -l PORT (sans -p) | ✅ Plus sûr |
| ncat (Nmap) | --ssl, --allow, -k (keep-open) | ✅ Chiffrement |
| socat | Tunnels complexes, SSL natif | ✅ Très flexible |
# Identifier la version installéenc -h 2>&1 | head -1
# netcat-traditional affiche : [v1.10-47]# netcat-openbsd affiche : usage: nc [-46DdhklnrStUuvzC] ...Cas d’usage avancés
Section intitulée « Cas d’usage avancés »Chat entre deux machines
Section intitulée « Chat entre deux machines »# Machine 1 : écouternc -l -p 1234
# Machine 2 : se connecternc 192.168.1.100 1234
# Les deux terminaux peuvent maintenant échanger des messagesServeur HTTP minimaliste
Section intitulée « Serveur HTTP minimaliste »# Serveur qui répond "Hello World" (une seule requête)echo -e "HTTP/1.1 200 OK\n\nHello World" | nc -l -p 8080
# Serveur persistant (boucle)while true; do echo -e "HTTP/1.1 200 OK\n\nHello $(date)" | nc -l -p 8080; doneRécupérer la bannière d’un service
Section intitulée « Récupérer la bannière d’un service »# SSHecho "" | nc -v -w 2 192.168.1.100 22# SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.1
# SMTPecho "QUIT" | nc -v -w 2 mail.example.com 25# 220 mail.example.com ESMTP Postfix
# HTTPecho -e "HEAD / HTTP/1.1\nHost: example.com\n\n" | nc example.com 80Proxy/relais simple
Section intitulée « Proxy/relais simple »# Créer un relais du port local 8080 vers remote:80mkfifo /tmp/relaync -l -p 8080 < /tmp/relay | nc remote.example.com 80 > /tmp/relayExécution de commandes (LAB uniquement)
Section intitulée « Exécution de commandes (LAB uniquement) »Les Modèles d’utilisation courants
Section intitulée « Les Modèles d’utilisation courants »Ces recettes couvrent les cas d'usage les plus fréquents. Cliquez sur un pattern pour voir la formule complète et un exemple prêt à copier.
Connexion TCP simple Base Se connecter à un service TCP sur un port
nc example.com 80
nc [HOST] [PORT] nc example.com 80 -
HOST— Adresse IP ou nom de domaine -
PORT— Port de destination (1-65535)
Écouter sur un port Base Ouvrir un port en écoute pour recevoir des connexions
nc -l -p 4444
nc -l -p [PORT] nc -l -p 4444 -
PORT— Port local à écouter
Scan de ports Base Vérifier quels ports sont ouverts sur une machine
nc -zv 192.168.1.100 20-80
nc -zv [HOST] [PORT-RANGE] nc -zv 192.168.1.100 20-80 -
HOST— Adresse cible -
PORT-RANGE— Plage de ports (ex: 20-80, 22,80,443)
Envoyer un fichier Base Transférer un fichier vers une machine en écoute
nc 192.168.1.100 4444 < backup.tar.gz
nc [HOST] [PORT] < [FICHIER] nc 192.168.1.100 4444 < backup.tar.gz -
HOST— Machine réceptrice -
PORT— Port d'écoute -
FICHIER— Fichier à envoyer
Recevoir un fichier Base Écouter et sauvegarder les données reçues dans un fichier
nc -l -p 4444 > backup.tar.gz
nc -l -p [PORT] > [FICHIER] nc -l -p 4444 > backup.tar.gz -
PORT— Port d'écoute -
FICHIER— Fichier de destination
Chat bidirectionnel Base Établir une communication texte entre deux machines
# Serveur: nc -l -p 1234
# Client: nc 192.168.1.100 1234
Machine A: nc -l -p [PORT] | Machine B: nc [HOST] [PORT] # Serveur: nc -l -p 1234
# Client: nc 192.168.1.100 1234 -
PORT— Port de communication -
HOST— Adresse du serveur
Test HTTP manuel Inter. Envoyer une requête HTTP brute à un serveur web
echo -e "GET / HTTP/1.1\nHost: example.com\n\n" | nc example.com 80
echo -e "GET / HTTP/1.1\nHost: [HOST]\n\n" | nc [HOST] 80 echo -e "GET / HTTP/1.1\nHost: example.com\n\n" | nc example.com 80 -
HOST— Nom de domaine ou IP du serveur
Connexion UDP Inter. Communiquer en UDP au lieu de TCP
nc -u 192.168.1.100 53
nc -u [HOST] [PORT] nc -u 192.168.1.100 53 -
HOST— Adresse cible -
PORT— Port UDP
Connexion avec timeout Base Limiter le temps de connexion pour éviter les blocages
nc -w 3 192.168.1.100 22
nc -w [SECONDS] [HOST] [PORT] nc -w 3 192.168.1.100 22 -
SECONDS— Timeout en secondes -
HOST— Adresse cible -
PORT— Port cible
Récupérer la bannière Inter. Identifier le service et sa version sur un port
echo "" | nc -v -w 2 192.168.1.100 22
echo "" | nc -v -w 2 [HOST] [PORT] echo "" | nc -v -w 2 192.168.1.100 22 -
HOST— Adresse cible -
PORT— Port du service
Proxy simple Avancé Relayer le trafic entre deux points
mkfifo /tmp/pipe; nc -l -p 8080 < /tmp/pipe | nc example.com 80 > /tmp/pipe
mkfifo /tmp/pipe; nc -l -p [LOCAL] < /tmp/pipe | nc [REMOTE] [PORT] > /tmp/pipe mkfifo /tmp/pipe; nc -l -p 8080 < /tmp/pipe | nc example.com 80 > /tmp/pipe -
LOCAL— Port local d'écoute -
REMOTE— Serveur distant -
PORT— Port distant
Serveur HTTP minimal Inter. Répondre avec du contenu HTTP pour tests
while true; do echo -e "HTTP/1.1 200 OK\n\nHello World" | nc -l -p 8080; done
while true; do echo -e "HTTP/1.1 200 OK\n\n[BODY]" | nc -l -p [PORT]; done while true; do echo -e "HTTP/1.1 200 OK\n\nHello World" | nc -l -p 8080; done -
PORT— Port d'écoute -
BODY— Contenu de la réponse
Aucune recette ne correspond à votre recherche.
Les Pièges à éviter
Section intitulée « Les Pièges à éviter »Ces erreurs courantes peuvent faire perdre du temps ou causer des dégâts. Les pièges les plus critiques sont affichés en premier.
Pas de chiffrement Transférer des données sensibles en clair
Danger
Transférer des données sensibles en clair
ncat --ssl 192.168.1.100 4444 Option -e dangereuse Utiliser nc -e /bin/bash en production
Danger
Utiliser nc -e /bin/bash en production
Différentes versions de netcat Les options varient selon la version (netcat-traditional, netcat-openbsd, ncat)
Attention
Les options varient selon la version (netcat-traditional, netcat-openbsd, ncat)
nc -h # Voir les options disponibles Ports privilégiés Écouter sur un port < 1024 sans root
Attention
Écouter sur un port < 1024 sans root
nc -l -p 8080 # Au lieu de 80 Firewall bloque les connexions Oublier d'ouvrir le port dans le firewall
Attention
Oublier d'ouvrir le port dans le firewall
sudo firewall-cmd --add-port=4444/tcp --permanent Syntaxe d'écoute variable Utiliser la mauvaise syntaxe pour écouter
Attention
Utiliser la mauvaise syntaxe pour écouter
# BSD: nc -l 4444
# Traditional: nc -l -p 4444 Connexion unique S'attendre à ce que netcat accepte plusieurs connexions
Info
S'attendre à ce que netcat accepte plusieurs connexions
while true; do nc -l -p 4444; done Pas de mode keep-open natif Attendre que le serveur reste ouvert après une déconnexion
Info
Attendre que le serveur reste ouvert après une déconnexion
ncat -k -l 4444 # Reste ouvert après déconnexion Dépannage
Section intitulée « Dépannage »🔧 Quand ça ne marche pas
Méthodes de debug
Mode verbeux
Afficher les détails de connexion
nc -v HOST PORT Vérifier la version
Identifier quelle variante de netcat est installée
nc -h 2>&1 | head -5 Tester localement
Éliminer les problèmes réseau en testant sur localhost
nc -zv localhost PORT Vérifier les ports en écoute
Lister les services qui écoutent
ss -tlnp Capturer le trafic
Voir les paquets échangés
sudo tcpdump -i any port PORT Erreurs fréquentes
Connection refused
- Aucun service n'écoute sur ce port
- Le firewall bloque la connexion
- L'adresse IP est incorrecte
- Vérifier que le service écoute : ss -tlnp | grep PORT
- Vérifier le firewall : sudo iptables -L -n
- Tester en local d'abord : nc -zv localhost PORT
Démarrer le service ou ouvrir le port dans le firewall
ss -tlnp | grep PORT Connection timed out
- La machine cible est injoignable
- Le firewall DROP les paquets (pas de réponse)
- Problème de routage réseau
- Tester la connectivité : ping HOST
- Tracer la route : traceroute HOST
- Vérifier avec un autre port connu ouvert
Vérifier la connectivité réseau et les règles firewall
ping -c 3 HOST Permission denied / Can't grab port
- Port < 1024 nécessite root
- Le port est déjà utilisé
- SELinux bloque l'opération
- Vérifier si le port est utilisé : ss -tlnp | grep PORT
- Tester avec un port > 1024
- Vérifier SELinux : getenforce
Utiliser sudo ou un port > 1024
ss -tlnp | grep PORT Invalid option / Unknown option
- Version de netcat différente (BSD vs traditional)
- L'option n'existe pas dans cette version
- Vérifier la version : nc -h 2>&1 | head -1
- Lister les options : nc -h
Adapter la syntaxe à la version installée
nc -h 2>&1 | head -5 Cheatsheet
Section intitulée « Cheatsheet » 📋
Cheatsheet nc
📝 Syntaxe :
nc HOST PORT Connexion TCP simple nc -l -p PORT Écouter sur un port (traditional) nc -l PORT Écouter sur un port (BSD/OpenBSD) 🚀 Commandes types :
nc example.com 80 nc -l -p 4444 nc -zv 192.168.1.100 20-80 nc 192.168.1.100 4444 < backup.tar.gz nc -l -p 4444 > backup.tar.gz ⚙️ Options
-v | Mode verbeux (affiche les détails) | nc -v example.com 80 |
-z | Scan sans envoyer de données | nc -zv host 20-80 |
-w N | Timeout après N secondes | nc -w 3 host 22 |
-u | Mode UDP au lieu de TCP | nc -u host 53 |
-n | Pas de résolution DNS | nc -n 192.168.1.1 80 |
-k | Keep-open (ncat uniquement) | ncat -k -l 4444 |
-e PROG | Exécuter programme (dangereux) | nc -l -p 4444 -e /bin/bash |
-c CMD | Exécuter commande shell | nc -l -p 4444 -c "cat /etc/passwd" |
--ssl | Connexion chiffrée SSL/TLS | ncat --ssl host 443 |
--allow HOST | N'accepter que certaines IP | ncat -l 4444 --allow 192.168.1.0/24 |
--exec | Exécuter programme (ncat) | ncat -l 4444 --exec /bin/bash |
🔍 Filtres
-z PORT-PORT | Scan de plage de ports | nc -zv host 1-1024 |
-z P1,P2,P3 | Scan de ports spécifiques | nc -zv host 22,80,443 |
⚡ Actions
< fichier | Envoyer le contenu d'un fichier | nc host 4444 < data.txt |
> fichier | Sauvegarder dans un fichier | nc -l -p 4444 > received.txt |
🔗 Composition
| tar xvf - | Extraire une archive reçue | nc -l -p 4444 | tar xvf - |
tar cvf - dir | | Envoyer un dossier compressé | tar cvf - /data | nc host 4444 |
echo "GET /" | nc | Requête HTTP simple | echo "GET / HTTP/1.0\n" | nc host 80 |
nc -l | nc HOST | Proxy basique (via pipe) | nc -l -p 8080 | nc target 80 |
2>&1 | Rediriger stderr vers stdout | nc -zv host 22 2>&1 | grep open |
socat - TCP:H:P | Équivalent nc avec socat | socat - TCP:example.com:80 |
socat TCP-L:P - | Écouter avec socat | socat TCP-LISTEN:4444 - |
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
Conclusion
Section intitulée « Conclusion »Netcat reste un outil incontournable pour le diagnostic réseau rapide et les transferts ponctuels. Sa simplicité en fait l’outil idéal pour tester si un service répond, récupérer une bannière ou envoyer un fichier sans configuration.
Points clés à retenir :
- Client :
nc HOST PORT/ Serveur :nc -l -p PORT - Scan :
-zvpour tester sans envoyer de données - Timeout :
-w Npour éviter les blocages - UDP :
-upour les protocoles comme DNS - Jamais de données sensibles sans chiffrement (ncat —ssl ou SSH)
- Jamais de
-een production (risque de backdoor)