Introduction
nc (pour netcat) est un outil qui permet de lire et écrire de la donnée en ligne de commande à travers le réseau.
Dans cet article, on va voir quelques options intéressante de cet outil
Test de port TCP ou UDP
Pour tester le statut d'une connexion, on utilisera l'option -z.
Cette option va nous permettre de nous informer sur le statut du port.
Pour le test d'un port en TCP, on va utiliser la commande avec les options suivantes :
Code BASH :
nc -z -v serveur port
Voici un exemple sur le serveur 192.168.21.251, port 80 (HTTP) :
Code BASH :
nc -z -v 192.168.21.251 80
Lorsque le port est ouvert, on a une réponse de ce type :
Code TEXT :
Connection to 192.168.21.251 80 port [tcp/http] succeeded!
Voici un exemple de port fermé (ici pas de SSH sur le port 22) :
Code TEXT :
nc: connect to 192.168.21.251 port 22 (tcp) failed: Connection refused
Pour le test d'un port en UDP, on va utiliser la commande avec les options suivantes :
Code BASH :
nc -z -v -u serveur port
On ajoute l'option -u. Exemple avec le serveur 192.168.21.251, port 68 UDP (DHCP) :
Code BASH :
nc -z -v -u 192.168.21.251 68
Lorsque le port est ouvert, on a une réponse de ce type :
Code TEXT :
Connection to 192.168.21.251 68 port [udp/bootpc] succeeded!
On pourra tester le code retour de la commande avec $? en BASH.
La valeur 0 indique un succès de la commande, donc un port ouvert.
Une autre valeur indique une erreur.
Echanger des fichiers
Comme son nom l'indique, netcat peut faire la même chose que cat (afficher un fichier) mais à travers le réseau.
Prenons un exemple, je veux transférer le fichier adrien.txt d'une machine à une autre.
On va utiliser le port 1234 (ici évidemment, si on dispose d'un pare-feu, il faudra ouvrir le port 1234/TCP)
Sur la machine de réception, je vais lancer nc en écoute avec l'option -l et spécifier le port avec l'option -p :
Code BASH :
nc -l -p 1234 > fichier_receptionne.txt
Sur la machine qui possède le fichier (machine d'envoi), on va injecter le contenu du fichier à transférer.
On va utiliser l'option -w pour définir un timeout au cas où (défini en secondes).
On va également préciser la machine de destination (192.168.21.251), ainsi que le port à utiliser (1234) :
Code BASH :
nc -w 2 192.168.21.251 1234 < adrien.txt
La commande se termine instantanément.
Sur la machine de réception, le fichier est arrivé, et la commande nc -l se termine, nous redonnant la main.
Chatter entre 2 machines
On peut aussi chatter entre 2 machines.
En effet, le texte saisi dans la commande nc est envoyé sur l'autre machine en écoute.
Sur la première machine, lancer nc en écoute sur un port (exemple 1234) :
Code BASH :
nc -l -p 1234
Sur l'autre machine, on se connecte à celle qui vient de lancer l'écoute :
Code BASH :
nc -w 2 192.168.21.251 1234
On peut alors envoyer du texte. Pour valider l'envoi, on utilise tout simplement la touche entrée.
On quittera nc avec un simple Ctrl+C