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 | Oui (nc -zv host 22) | Oui mais overkill |
| Scanner une plage de ports | Basique | Plus complet |
| Détection de services/versions | Non | Oui (-sV) |
| Transfert de fichiers | Oui, parfait | Non |
| Créer un serveur temporaire | Oui | Non |
| Audit de sécurité | Non | Oui (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 | Risqué : -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 »Beaucoup de services se présentent en envoyant leur version dès la connexion : c'est le banner grabbing.
# 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 pièges à éviter
Section intitulée « Les pièges à éviter »Ces erreurs reviennent constamment avec netcat. Plusieurs touchent la sécurité : les connaître évite des fuites de données et des backdoors involontaires.
Différentes versions de netcat
Section intitulée « Différentes versions de netcat »Les options varient selon la variante installée : netcat-traditional, netcat-openbsd, ncat.
Symptôme : une option n'est pas reconnue, ou le comportement diffère d'une machine à l'autre.
Cause : netcat-openbsd n'a pas -e ; netcat-traditional exige -p avec -l.
nc -h # vérifier les options disponiblesPas de chiffrement
Section intitulée « Pas de chiffrement »Vous transférez des données sensibles en clair via netcat.
Symptôme : les données peuvent être interceptées sur le réseau.
Cause : netcat ne chiffre jamais les communications.
ncat --ssl 192.168.1.100 4444L'option -e est dangereuse
Section intitulée « L'option -e est dangereuse »Vous utilisez nc -e /bin/bash en production.
Symptôme : création d'une backdoor permettant l'exécution de commandes à distance.
Cause : -e exécute un programme à chaque connexion. Ne l'utilisez jamais en dehors d'un lab isolé.
Ports privilégiés
Section intitulée « Ports privilégiés »Vous tentez d'écouter sur un port inférieur à 1024 sans être root.
Symptôme : message Permission denied.
Cause : les ports 1 à 1023 sont réservés à root.
nc -l -p 8080 # un port > 1024, ou exécuter avec sudoConnexion unique
Section intitulée « Connexion unique »Vous attendez de netcat qu'il accepte plusieurs connexions successives.
Symptôme : le listener s'arrête après la première connexion.
Cause : par défaut, nc -l n'accepte qu'une seule connexion.
while true; do nc -l -p 4444; doneLe pare-feu bloque les connexions
Section intitulée « Le pare-feu bloque les connexions »Vous oubliez d'ouvrir le port dans le pare-feu.
Symptôme : Connection refused ou timeout.
Cause : iptables, nftables ou firewalld bloque le port.
sudo firewall-cmd --add-port=4444/tcp --permanentSyntaxe d'écoute variable
Section intitulée « Syntaxe d'écoute variable »Vous utilisez la mauvaise syntaxe pour écouter selon la variante.
Symptôme : erreur Cannot use -p and -l together, ou Missing port.
Cause : netcat-openbsd attend nc -l PORT ; netcat-traditional attend nc -l -p PORT.
# OpenBSDnc -l 4444# Traditionalnc -l -p 4444Pas de mode keep-open natif
Section intitulée « Pas de mode keep-open natif »Vous attendez que le serveur reste ouvert après une déconnexion.
Symptôme : le serveur se ferme après chaque transfert.
Cause : le netcat traditionnel n'a pas d'option keep-open.
ncat -k -l 4444 # reste ouvert après déconnexionTravaux pratiques
Section intitulée « Travaux pratiques »Ce lab vous fait manipuler netcat sur localhost : test de port, écoute, transfert et récupération de bannière. Comptez 20 minutes.
Préparer le terrain
Section intitulée « Préparer le terrain »Le script suivant crée un dossier de travail avec des fichiers de test :
# Créer un dossier de travailmkdir -p /tmp/nc-labcd /tmp/nc-lab
# Créer des fichiers de testecho "Message secret" > secret.txtecho "Données à transférer" > data.txtdd if=/dev/urandom of=binary.bin bs=1K count=10 2>/dev/null
# Vérifier la variante de netcatnc -h 2>&1 | head -5Pour tout nettoyer à la fin : rm -rf /tmp/nc-lab.
Les 5 étapes du lab
Section intitulée « Les 5 étapes du lab »-
Test de connexion basique, vérifiez si le port 22 (SSH) est ouvert :
nc -zv localhost 22.-zscanne sans envoyer de données,-vaffiche le résultat. -
Écouter sur un port, ouvrez un serveur sur le port 4444 en mode verbeux :
nc -l -p 4444 -v.-lactive l'écoute,-pspécifie le port. -
Transfert de fichier, envoyez
secret.txtvers une machine en écoute :nc localhost 4444 < secret.txt. La redirection<envoie le contenu du fichier vers la connexion. Avec compression :gzip -c secret.txt | nc localhost 4444. -
Scanner une plage de ports, scannez les ports 20 à 25 :
nc -zv localhost 20-25. Le formatN-Mcouvre tous les ports de N à M inclus. -
Récupérer une bannière, récupérez la bannière SSH avec un timeout de 2 secondes :
echo "" | nc -v -w 2 localhost 22. Une ligne vide suffit à déclencher la bannière.
Exercices progressifs
Section intitulée « Exercices progressifs »Ces exercices vont du test de port simple au relais de trafic. Lisez l'énoncé, cherchez la commande, puis dépliez la solution.
Niveau fondations
Section intitulée « Niveau fondations »Exercice 1, Vérifier un service web. Vérifiez si le port 443 (HTTPS) est ouvert sur example.com.
Indice : -z pour scanner, -v pour voir le résultat.
Voir la solution
nc -zv example.com 443-z réalise un scan sans données, -v affiche le statut de la connexion.
Exercice 2, Chat entre deux terminaux. Établissez une communication entre deux terminaux de la même machine.
Indice : un terminal écoute, l'autre se connecte.
Voir la solution
# Terminal 1nc -l -p 1234# Terminal 2nc localhost 1234Le premier terminal devient serveur avec -l, le second s'y connecte en client.
Exercice 3, Scanner les services courants. Scannez les ports SSH, HTTP et HTTPS sur localhost en une seule commande.
Indice : plusieurs ports se séparent par des virgules.
Voir la solution
nc -zv localhost 22,80,443Les ports peuvent être listés avec des virgules ou exprimés en plage (22-443).
Niveau composition
Section intitulée « Niveau composition »Exercice 4, Transfert de dossier. Transférez le dossier /tmp/nc-lab vers une machine en écoute.
Indice : combinez tar et netcat avec un pipe.
Voir la solution
# Récepteurnc -l -p 4444 | tar xvf -# Expéditeurtar cvf - /tmp/nc-lab | nc localhost 4444tar crée une archive en streaming, netcat la transporte, tar l'extrait à l'arrivée.
Exercice 5, Test HTTP manuel. Récupérez la page d'accueil d'example.com avec une requête HTTP/1.1.
Indice : une requête HTTP a besoin de GET, Host et deux retours à la ligne.
Voir la solution
echo -e "GET / HTTP/1.1\nHost: example.com\n\n" | nc example.com 80HTTP/1.1 exige le header Host ; le double \n termine les en-têtes.
Exercice 6, Connexion UDP DNS. Testez la connectivité UDP vers un serveur DNS sur le port 53.
Indice : -u pour UDP, -w pour un timeout.
Voir la solution
nc -zuv -w 2 8.8.8.8 53-u active le mode UDP, indispensable pour tester un service DNS.
Exercice 7, Serveur HTTP de fortune. Créez un serveur qui renvoie « Hello World » sur le port 8080.
Indice : la réponse HTTP doit inclure une status line et un body.
Voir la solution
while true; do echo -e "HTTP/1.1 200 OK\n\nHello World" | nc -l -p 8080; doneLa boucle while permet de servir plusieurs requêtes successives.
Niveau industrialisation
Section intitulée « Niveau industrialisation »Exercice 8, Relais de port. Créez un relais qui écoute sur 8080 et redirige vers localhost:22.
Indice : utilisez un named pipe (mkfifo) pour la communication bidirectionnelle.
Voir la solution
mkfifo /tmp/relaync -l -p 8080 < /tmp/relay | nc localhost 22 > /tmp/relayLe FIFO permet de relayer les données dans les deux sens.
Niveau sécurité
Section intitulée « Niveau sécurité »Exercice 9, Backdoor contrôlée (lab uniquement). Créez un shell distant sur le port 5555. À ne jamais faire en production.
Indice : l'option -e (ou -c) exécute un programme à la connexion.
Voir la solution
# Serveurnc -l -p 5555 -e /bin/bash# Clientnc localhost 5555-e exécute le programme pour chaque connexion, extrêmement dangereux hors d'un lab isolé.
Dépannage
Section intitulée « Dépannage »Quand une connexion netcat échoue, ces méthodes de diagnostic et ces erreurs fréquentes couvrent la grande majorité des cas.
Méthodes de diagnostic
Section intitulée « Méthodes de diagnostic »# Mode verbeux : détails de connexionnc -v HOST PORT
# Identifier la variante de netcat installéenc -h 2>&1 | head -5
# Tester localement pour écarter un problème réseaunc -zv localhost PORT
# Lister les services en écoutess -tlnp
# Capturer le trafic échangésudo tcpdump -i any port PORTErreurs fréquentes
Section intitulée « Erreurs fréquentes »| Erreur | Cause probable | Solution |
|---|---|---|
Connection refused | Aucun service n'écoute, pare-feu, ou mauvaise IP | Vérifier l'écoute avec ss -tlnp | grep PORT, démarrer le service ou ouvrir le port |
Connection timed out | Machine injoignable, pare-feu en DROP, ou routage | Tester avec ping HOST et traceroute HOST |
Permission denied / Can't grab port | Port < 1024 sans root, port déjà utilisé, ou SELinux | Utiliser sudo ou un port > 1024 |
Invalid option / Unknown option | Variante de netcat différente (BSD vs traditional) | Vérifier la version avec nc -h et adapter la syntaxe |
Aide-mémoire netcat
Section intitulée « Aide-mémoire netcat »À garder sous la main : la syntaxe de base, les options principales et les combinaisons les plus utilisées au quotidien.
Syntaxe de base
Section intitulée « Syntaxe de base »| Syntaxe | Signification | Exemple |
|---|---|---|
nc HOST PORT | Connexion TCP simple | nc example.com 80 |
nc -l -p PORT | Écouter sur un port (traditional) | nc -l -p 4444 |
nc -l PORT | Écouter sur un port (BSD/OpenBSD) | nc -l 4444 |
Options principales
Section intitulée « Options principales »| Syntaxe | Signification | Exemple |
|---|---|---|
-v | Mode verbeux | 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 |
--ssl | Connexion chiffrée SSL/TLS (ncat) | ncat --ssl host 443 |
--allow HOST | N'accepter que certaines IP (ncat) | ncat -l 4444 --allow 192.168.1.0/24 |
Transfert de fichiers et scan
Section intitulée « Transfert de fichiers et scan »| Syntaxe | Signification | Exemple |
|---|---|---|
< fichier | Envoyer le contenu d'un fichier | nc host 4444 < data.txt |
> fichier | Sauvegarder dans un fichier | nc -l -p 4444 > received.txt |
-z PORT-PORT | Scan d'une plage de ports | nc -zv host 1-1024 |
-z P1,P2,P3 | Scan de ports spécifiques | nc -zv host 22,80,443 |
Combinaisons utiles
Section intitulée « Combinaisons utiles »| Syntaxe | Signification | Exemple |
|---|---|---|
nc -l ... | tar xvf - | Extraire une archive reçue | nc -l -p 4444 | tar xvf - |
tar cvf - dir | nc ... | Envoyer un dossier compressé | tar cvf - /data | nc host 4444 |
nc -l ... | nc HOST | Proxy basique via pipe | nc -l -p 8080 | nc target 80 |
... 2>&1 | grep open | Filtrer le résultat d'un scan | nc -zv host 22 2>&1 | grep open |
socat - TCP:H:P | Équivalent netcat avec socat | socat - TCP:example.com:80 |
Checklist de maîtrise
Section intitulée « Checklist de maîtrise »Vous maîtrisez netcat quand vous pouvez cocher chacun de ces points sans hésiter :
- Je sais me connecter à un service TCP/UDP.
- Je sais scanner des ports avec
-zv. - Je sais transférer un fichier entre deux machines.
- Je sais créer un serveur en écoute.
- Je connais les différences entre les variantes de netcat.
- Je sais quand utiliser
ncat --sslpour le chiffrement.
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
À retenir
Section intitulée « À retenir »- Client :
nc HOST PORT; serveur :nc -l -p PORT - Scan :
-zvpour tester un port 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 --sslou SSH) - Jamais de
-een production (risque de backdoor)
FAQ : questions fréquentes sur netcat
Section intitulée « FAQ : questions fréquentes sur netcat »Le couteau suisse du réseau
netcat (commandenc) lit et écrit des données sur des connexions TCP ou UDP. C'est l'outil le plus simple pour manipuler une connexion réseau brute.Il sert à :- tester si un port est ouvert ;
- récupérer une bannière de service ;
- transférer un fichier entre deux machines ;
- ouvrir un écouteur sur un port.
nc), et ncat (projet Nmap, avec TLS et contrôle d'accès).Un test de connectivité rapide
# TCP : port ouvert ?
nc -zv exemple.com 443
# Connection to exemple.com 443 port [tcp/https] succeeded!
# UDP
nc -zuv exemple.com 53
Les options :-z: mode scan, n'envoie aucune donnée (juste la connexion) ;-v: verbeux, affiche le résultat ;-u: bascule en UDP au lieu de TCP.
succeeded! confirme que le port est ouvert et qu'un service écoute.Récepteur puis émetteur
# 1. Machine receptrice : ecoute et ecrit dans un fichier
nc -l -p 1234 > recu.tar
# 2. Machine emettrice : envoie le fichier
nc 192.168.1.50 1234 < envoi.tar
La machine réceptrice ouvre un écouteur (-l) sur le port 1234 et redirige ce qu'elle reçoit vers un fichier. L'émettrice se connecte et envoie le fichier via une redirection.Attention : le transfert n'est pas chiffré. Pour un envoi sécurisé, préférez ncat --ssl ou scp.Une connexion contre un scan
| Besoin | netcat | nmap |
|---|---|---|
| Tester un port | oui | oui |
| Scanner des milliers de ports | non | oui |
| Transférer des données | oui | non |
| Détecter service/version | limité | oui (-sV) |
| Ouvrir un écouteur | oui | non |
Un outil légitime détourné
netcat est un outil d'administration tout à fait légitime. Mais sa capacité à ouvrir un écouteur et à relier une connexion à un shell en fait aussi un instrument d'attaque : les reverse shells utilisés lors d'intrusions reposent souvent surnc ou un binaire équivalent.Conséquences pratiques :- la présence inattendue de netcat sur un serveur de production est un signal d'alerte ;
- certains EDR surveillent son exécution.
Prochaines étapes
Section intitulée « Prochaines étapes »netcat teste et dépanne ; pour aller plus loin, passez aux outils qui scannent, capturent et sécurisent vos accès réseau.