La commande Netcat (nc) est un outil puissant pour analyser les connexions réseau, rechercher les ports ouverts, transférer des données, etc. Il s'agit d'un utilitaire réseau permettant de lire et d'écrire sur les connexions réseau à l'aide des protocoles TCP ou UDP.
Comment installer netcat
C'est un outil multiplateforme et il est disponible pour Linux, macOS, Windows et BSD. Nous allons installer netcat sur la machine Ubuntu 18.04 en utilisant apt install
ou en le compilant à partir du code source.
L'installation avec apt est assez simple, il vous suffit de taper la commande suivante dans le terminal :
sudo apt install netcat
Sur CentOS 8
Le ncat peut être installé avec le package nmap sur RHEL 8/CentOS 8. Utilisez la commande dnf comme ci-dessous
sudo dnf install nmap
Comment installer netcat à partir du code source
Compiler netcat à partir du code source n'est pas aussi simple que de l'installer via apt install
, mais si vous suivez les étapes ci-dessous, vous pouvez l'installer facilement.
Téléchargez le code source du site Web de netcat avec la commande suivante
wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz
Extrayez l'archive nouvellement téléchargée. Pour ce faire, vous pouvez exécuter :
tar -xzvf netcat-0.7.1.tar.gz
cd
dans le répertoire contenant le code source du package et tapez ./configure
pour configurer le package pour votre système.
cd netcat-0.7.1
./configure
Si vous obtenez un message d'erreur comme celui-ci - "aucun compilateur C acceptable trouvé dans $PATH" lors de l'exécution de la commande ./configure , assurez-vous d'avoir installé le compilateur gcc. Pour l'installer tapez la commande suivante :
apt-get install build-essential
Exécution de configure
prend un certain temps.
Une fois la configuration terminée, exécutez :
sudo make
et
sudo make install
Vous pouvez supprimer les fichiers binaires du programme et les fichiers objet du répertoire du code source en tapant make clean
. Pour supprimer également les fichiers qui configure
créé, exécutez make distclean
commande.
Exemples Netcat
Avant de commencer à explorer certaines commandes netcat, il est important de savoir que si vous vous liez à des ports bien connus (0-1023) avec nc, vous avez besoin du privilège root. Sinon, vous pouvez exécuter nc en tant qu'utilisateur normal.
1) Tester si un port TCP particulier d'un hôte distant est ouvert
nc -vn 192.168.40.146 2424
Sortie si le port 2424 sur le serveur distant est fermé
nc: connect to 192.168.40.146 port 2424 (tcp) failed: Connection refused
Sortie si le port sur le serveur distant est ouvert (par exemple, 22 ports)
Connection to 192.168.40.146 22 port [tcp/*] succeeded!
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
2) Effectuez une analyse de port TCP sur un hôte distant
La commande ci-dessous vérifiera les ports de 20 à 25 sur l'hôte distant et imprimera le résultat.
nc -vnz -w 1 192.168.40.146 20-25
La sortie ressemblera à ceci
nc: connect to 192.168.40.146 port 20 (tcp) failed: Connection refused
nc: connect to 192.168.40.146 port 21 (tcp) failed: Connection refused
Connection to 192.168.40.146 22 port [tcp/*] succeeded!
nc: connect to 192.168.40.146 port 23 (tcp) failed: Connection refused
nc: connect to 192.168.40.146 port 24 (tcp) failed: Connection refused
nc: connect to 192.168.40.146 port 25 (tcp) failed: Connection refused
3) Effectuez une analyse de port UDP sur un hôte distant
nc -vnzu 192.168.40.146 1-65535
La sortie n'affichera que les ports qui autorisent les connexions udp.
Connection to 192.168.40.146 2424 port [udp/*] succeeded!
Connection to 192.168.40.146 12354 port [udp/*] succeeded!
4) Envoyer un paquet UDP de test à un hôte distant
echo -n "udp test" | nc -u -w1 192.168.40.146 2424
La commande ci-dessus enverra un paquet UDP de test avec un délai d'attente d'une seconde à un hôte distant sur le port 2424
5) Copier un fichier (par exemple, test.txt) d'un hôte à un autre
Sur l'hôte récepteur (192.168.40.146 dans mon cas), exécutez :
nc -lp 2424 > test.txt
Sur l'hôte expéditeur (192.168.40.144), exécutez la commande suivante :
nc 192.168.40.146 2424 < test.txt
Cela copiera le fichier test.txt de l'hôte expéditeur vers l'hôte récepteur via le port 2424. assurez-vous d'autoriser les connexions entrantes sur le port 2424 sur l'hôte récepteur.
6) Transférer un répertoire entier (y compris son contenu) d'un hôte à un autre
Sur l'hôte récepteur, exécutez :
nc -l 2424 | tar xvf -
Sur l'hôte expéditeur, exécutez la commande suivante :
tar cvf - /path/to/dir | nc 192.168.40.146 2424
7) Créer une sauvegarde compressée du disque dur (par exemple, /dev/sdc) sur un hôte distant
Sur l'hôte distant, exécutez :
nc -lp 2424 | sudo dd of=/path/to/image.img.gz
Sur l'hôte local, exécutez la commande suivante :
dd if=/dev/sdc | gzip -c | nc 192.168.40.146 2424
8) Restaurer un disque dur (par exemple /dev/sdc) à partir d'une image disque compressée stockée sur un hôte distant
Sur l'hôte local, exécutez :
nc -lp 2424 | gunzip -c | sudo dd of=/dev/sdc
Sur l'hôte distant, exécutez la commande suivante :
cat /path/to/image.img.gz | nc 192.168.40.144 2424
9) Exécutez un chat en ligne non sécurisé entre deux hôtes
Sur un hôte (par exemple, 192.168.40.144), exécutez la commande ci-dessous :
nc -lp 2424
Sur un autre hôte (par exemple 192.168.40.146) exécutez la commande suivante :
nc 192.168.40.144 2424
Après avoir exécuté ces commandes, tout ce qui est saisi dans les deux terminaux sera visible sur les deux machines hôtes.
10) Exécutez un serveur Web avec une page Web statique
Exécutez la commande ci-dessous sur l'hôte local (par exemple, 192.168.40.144) pour démarrer un serveur Web qui sert test.html sur le port 80. Notez que vous devez exécuter avec les privilèges sudo car 80 se trouve dans la plage des ports bien connus (1-1023)
while true; do sudo nc -lp 80 < test.html; done
Ouvrez maintenant http://192.168.40.144/test.html
d'un autre hébergeur pour y accéder.
11) Écouter sur un port TCP en utilisant une adresse IPv6
Vous pouvez utiliser la commande suivante pour autoriser nc à utiliser l'adresse IPv6 lors de l'écoute sur un port TCP.
nc -6 -l 2424
Vérifiez si cela fonctionne avec la commande ci-dessous
sudo netstat -nap | grep 2424
La sortie ressemblera à ceci
tcp6 0 0 :::2424 :::* LISTEN 15665/nc
12) Diffusez un fichier vidéo à partir d'un serveur pour que le client puisse regarder la vidéo diffusée à l'aide d'un lecteur vidéo (par exemple, mplayer)
Sur un serveur vidéo (192.168.40.144) :
cat sample_video.avi | nc -l 2424
Sur un hôte client (192.168.40.146) :
nc 192.168.40.144 2424 | mplayer -vo x11 -cache 3000 -
Lire aussi :
- Comment utiliser la commande Linux Netcat comme analyseur de ports
- Comment créer une conversation simple avec netcat sous Linux
Comme vous pouvez le voir, netcat est un excellent outil pour la mise en réseau TCP/IP et c'est l'un des outils les plus appréciés des administrateurs système lorsqu'il s'agit de dépannage et d'expérimentation liés à la mise en réseau. C'est pourquoi de nombreuses distributions Linux sont livrées avec netcat préinstallé.