Commande nc (netcat) Linux avec exemples pratiques

LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous découvrirez la commande nc (netcat), un utilitaire réseau polyvalent souvent surnommé le "couteau suisse" pour les connexions TCP/IP sous Linux. Netcat vous permet d'établir des connexions, d'écouter sur des ports et de transférer des données via des connexions réseau, ce qui en fait un outil essentiel pour les administrateurs réseau et les professionnels de la sécurité.

Tout au long de ce laboratoire, vous explorerez comment utiliser netcat pour les protocoles de communication TCP et UDP. Vous configurerez des communications serveur-client simples et apprendrez comment netcat peut être utilisé pour des tâches réseau pratiques telles que le balayage de ports (port scanning) et les transferts de fichiers.

À la fin de ce laboratoire, vous aurez une solide compréhension de la façon d'utiliser la commande nc pour divers scénarios réseau, renforçant ainsi vos compétences en réseau Linux et vous fournissant un outil puissant pour le débogage des problèmes réseau.

Linux Commands Cheat Sheet

Comprendre la commande nc (netcat)

Dans cette étape, vous apprendrez ce qu'est netcat, comment vérifier s'il est installé et explorerez ses options d'utilisation de base.

Qu'est-ce que Netcat ?

Netcat (nc) est un utilitaire en ligne de commande qui lit et écrit des données via des connexions réseau en utilisant les protocoles TCP ou UDP. Il est conçu pour être un outil back-end fiable qui peut être utilisé pour le débogage réseau, le balayage de ports (port scanning), les transferts de fichiers, et plus encore.

Vérification de l'installation

Tout d'abord, vérifions que netcat est installé sur votre système en vérifiant sa version :

which nc

Vous devriez voir une sortie similaire à :

/usr/bin/nc

Si netcat n'est pas installé, vous pouvez l'installer avec :

sudo apt-get update
sudo apt-get install -y netcat

Comprendre les options de base de Netcat

Examinons les options de base de la commande nc en affichant ses informations d'aide :

nc -h

Cela affichera une liste des options disponibles. Certaines des options les plus courantes incluent :

  • -l : Mode écoute (pour les connexions entrantes)
  • -p : Spécifier le port local à écouter
  • -u : Utiliser UDP au lieu de TCP
  • -v : Sortie verbose
  • -w : Délai d'attente (timeout) pour les connexions

Créons un test simple pour voir si un port spécifique est ouvert sur un serveur distant. Par exemple, pour vérifier si le port 80 (HTTP) est ouvert sur google.com :

nc -zv google.com 80

L'option -z indique à netcat de scanner les démons en écoute sans envoyer de données, et -v active la sortie verbose. Vous devriez voir une sortie indiquant si la connexion a réussi :

Connection to google.com 80 port [tcp/http] succeeded!

Cela confirme que le port 80 est ouvert sur google.com et accepte les connexions.

Dans les prochaines étapes, nous utiliserons netcat pour établir une communication réelle entre les serveurs et les clients en utilisant les protocoles TCP et UDP.

Configuration de la communication TCP avec Netcat

Dans cette étape, vous apprendrez comment utiliser netcat pour établir une communication serveur et client TCP. TCP (Transmission Control Protocol) est un protocole orienté connexion qui assure une livraison de données fiable et ordonnée.

Comprendre la communication TCP

La communication TCP implique un serveur qui écoute les connexions et un client qui initie la connexion. Une fois la connexion établie, les deux parties peuvent envoyer et recevoir des données. TCP garantit que toutes les données sont livrées correctement et dans le bon ordre.

Configuration d'un serveur TCP

Pour créer un serveur TCP qui écoute sur le port 8080, ouvrez un terminal et exécutez :

nc -l -p 8080

Voici ce que fait chaque option :

  • -l : Indique à netcat d'écouter les connexions entrantes (mode serveur)
  • -p 8080 : Spécifie le port 8080 sur lequel le serveur doit écouter

Le serveur attend maintenant qu'un client se connecte. Le terminal semblera se bloquer sans aucune sortie - c'est normal.

Connexion avec un client TCP

Pour vous connecter au serveur que vous venez de créer, ouvrez un nouveau terminal et exécutez :

nc localhost 8080

Cette commande tente de se connecter à un serveur fonctionnant sur la machine locale (localhost) sur le port 8080.

Test de la connexion TCP

Maintenant que vous avez à la fois un serveur et un client en cours d'exécution, vous pouvez envoyer des messages entre eux :

  1. Dans le terminal client, tapez un message et appuyez sur Entrée. Par exemple :

    Hello from the client!
  2. Vous devriez voir ce message apparaître dans le terminal du serveur.

  3. Dans le terminal du serveur, tapez une réponse et appuyez sur Entrée. Par exemple :

    Hello from the server!
  4. Vous devriez voir ce message apparaître dans le terminal du client.

Cela démontre une communication bidirectionnelle sur TCP - les deux parties peuvent envoyer et recevoir des données.

Terminaison de la connexion

Pour fermer la connexion :

  • Appuyez sur Ctrl+C dans l'un ou l'autre des terminaux
  • Ou tapez Ctrl+D pour envoyer un signal EOF (End of File - Fin de fichier)

La connexion sera terminée et les processus serveur et client se fermeront.

Cet exemple simple démontre l'utilisation de base de netcat pour la communication TCP. Dans des scénarios réels, cette capacité peut être utilisée pour des tâches telles que l'administration à distance, le transfert de données entre systèmes ou le test d'applications réseau.

Communication UDP avec Netcat

Dans cette étape, vous apprendrez comment utiliser netcat pour la communication UDP (User Datagram Protocol), qui diffère considérablement de TCP dans la façon dont elle gère la transmission des données.

Comprendre UDP vs TCP

Contrairement à TCP, UDP :

  • Est sans connexion - il n'y a pas de connexion formelle établie avant le transfert de données
  • Ne garantit pas la livraison ou l'ordre correct des paquets
  • A moins de surcharge et de latence, ce qui le rend utile pour les applications sensibles au temps comme les jeux ou le streaming vidéo

Configuration d'un serveur UDP

Pour créer un serveur UDP qui écoute sur le port 9090, ouvrez un terminal et exécutez :

nc -u -l -p 9090

Voici ce que fait chaque option :

  • -u : Spécifie l'utilisation d'UDP au lieu de TCP par défaut
  • -l : Indique à netcat d'écouter les datagrammes entrants (mode serveur)
  • -p 9090 : Spécifie le port 9090 sur lequel le serveur doit écouter

Le serveur attend maintenant l'arrivée des datagrammes UDP. Comme le serveur TCP, le terminal semblera se bloquer sans aucune sortie jusqu'à l'arrivée des données.

Envoi de données en tant que client UDP

Pour envoyer des données au serveur UDP, ouvrez un nouveau terminal et exécutez :

nc -u localhost 9090

Cette commande vous permet d'envoyer des datagrammes UDP à un serveur fonctionnant sur la machine locale (localhost) sur le port 9090.

Test de la communication UDP

Maintenant que vous avez à la fois un serveur et un client UDP en cours d'exécution, vous pouvez envoyer des messages :

  1. Dans le terminal client, tapez un message et appuyez sur Entrée. Par exemple :

    This is a UDP message
  2. Vous devriez voir ce message apparaître dans le terminal du serveur.

  3. Dans le terminal du serveur, tapez une réponse et appuyez sur Entrée. Par exemple :

    UDP response received
  4. Vous devriez voir ce message apparaître dans le terminal du client.

Comprendre le comportement UDP

Contrairement à TCP, en UDP :

  • Le serveur ne suit pas les connexions
  • Chaque message est indépendant
  • Il n'y a pas d'accusé de réception par défaut
  • Les messages peuvent être perdus ou arriver dans le désordre dans des conditions de réseau réelles

Cela rend UDP utile pour les applications où la vitesse est plus importante que la fiabilité, ou où la perte occasionnelle de paquets est acceptable.

Terminaison de la session UDP

Pour fermer la session UDP :

  • Appuyez sur Ctrl+C dans l'un ou l'autre des terminaux pour terminer le processus

Étant donné qu'UDP est sans connexion, il n'y a pas de "fermeture" formelle d'une connexion - vous arrêtez simplement le processus d'envoi ou de réception de plus de datagrammes.

UDP est couramment utilisé dans des applications telles que les recherches DNS, le streaming vidéo, les jeux en ligne et d'autres scénarios où une faible latence est plus importante qu'une fiabilité parfaite.

Transfert de fichiers avec Netcat

Dans cette étape, vous apprendrez comment utiliser netcat pour transférer des fichiers entre des systèmes, une application pratique qui démontre la polyvalence de netcat au-delà de la simple communication textuelle.

Comprendre Netcat pour le transfert de fichiers

Netcat peut être utilisé pour transférer des fichiers entre des ordinateurs en :

  1. Redirigeant l'entrée d'un fichier du côté de l'expéditeur
  2. Redirigeant la sortie vers un fichier du côté du récepteur

Cette approche ne nécessite aucun protocole supplémentaire comme FTP ou SCP, ce qui la rend utile dans les scénarios où ces outils pourraient ne pas être disponibles.

Configuration du récepteur

Tout d'abord, configurons l'extrémité réceptrice qui acceptera le fichier. Ouvrez un terminal et exécutez :

nc -l -p 7000 > received_file.txt

Cette commande :

  • Configure un serveur en écoute sur le port 7000
  • Redirige toutes les données reçues vers un fichier nommé received_file.txt

Création d'un fichier de test à envoyer

Avant d'envoyer, créons un exemple de fichier à transférer. Dans un nouveau terminal, exécutez :

echo "This is a test file that will be transferred using netcat." > original_file.txt
echo "Netcat can be used for simple file transfers between systems." >> original_file.txt
echo "This demonstrates a practical use case of the nc command." >> original_file.txt

## View the file contents to confirm
cat original_file.txt

Vous devriez voir le contenu du fichier affiché dans le terminal.

Envoi du fichier

Maintenant, envoyons le fichier au récepteur. Dans le même terminal où vous avez créé le fichier, exécutez :

cat original_file.txt | nc localhost 7000

Cette commande :

  • Lit le contenu de original_file.txt en utilisant cat
  • Canalise (|) ce contenu vers netcat
  • Netcat envoie les données à localhost sur le port 7000

Le transfert se produit immédiatement. Une fois le transfert terminé, le processus netcat du côté de l'envoi se fermera automatiquement, mais le côté réception continuera d'attendre d'autres données.

Vérification du transfert

Une fois le fichier envoyé, appuyez sur Ctrl+C dans le terminal du récepteur pour fermer la connexion. Maintenant, vérifions que le fichier a été transféré correctement :

cat received_file.txt

Vous devriez voir le même contenu que celui du fichier d'origine, confirmant un transfert réussi.

Comparaison des fichiers

Pour vous assurer que le transfert était parfait, vous pouvez comparer les deux fichiers :

diff original_file.txt received_file.txt

S'il n'y a pas de sortie, cela signifie que les fichiers sont identiques et que le transfert a réussi.

Cette méthode de transfert de fichiers fonctionne non seulement sur une machine locale, mais aussi entre différents ordinateurs sur un réseau. Vous remplacerez simplement localhost par l'adresse IP ou le nom d'hôte de la machine distante.

Cette technique peut être particulièrement utile dans les environnements où les outils de transfert de fichiers traditionnels ne sont pas disponibles ou sont restreints, faisant de netcat un outil précieux dans la boîte à outils d'un administrateur système.

Résumé

Dans ce laboratoire, vous avez exploré la commande nc (netcat) polyvalente, un outil de réseau fondamental sous Linux qui offre de puissantes capacités pour la communication réseau et le dépannage.

Vous avez appris :

  • Le concept de base de netcat et comment vérifier son installation sur votre système
  • Comment utiliser netcat pour établir des communications serveur-client TCP, permettant un transfert de données fiable et orienté connexion
  • Comment configurer les communications UDP avec netcat, démontrant les différences entre les protocoles UDP sans connexion et TCP orienté connexion
  • Comment utiliser netcat pour les transferts de fichiers pratiques entre systèmes sans nécessiter de protocoles de transfert de fichiers supplémentaires

Ces compétences fournissent une base pour des tâches réseau plus avancées telles que :

  • Le débogage des problèmes de connectivité réseau
  • Le test des configurations de pare-feu (firewall)
  • La création de services réseau simples
  • La réalisation de tests de sécurité de base

La simplicité et la polyvalence de Netcat en font un outil essentiel pour les administrateurs système, les ingénieurs réseau et les professionnels de la sécurité. En maîtrisant ce "couteau suisse" du réseau, vous disposez désormais d'un utilitaire puissant à ajouter à votre boîte à outils Linux.

Pour une exploration plus approfondie, envisagez d'étudier les fonctionnalités avancées de netcat telles que la proxying des connexions, la création d'écouteurs persistants ou l'intégration de netcat avec des scripts pour les tests réseau automatisés.

Linux Commands Cheat Sheet