Netcat ou nc est un utilitaire de mise en réseau pour le débogage et l'investigation du réseau.
Cet utilitaire peut être utilisé pour créer des connexions TCP/UDP et les étudier. La plus grande utilisation de cet utilitaire est dans les scripts où nous devons gérer les sockets TCP/UDP.
Dans cet article, nous allons découvrir la commande netcat par quelques exemples pratiques.
1. Netcat dans une architecture serveur-client
L'utilitaire netcat peut être exécuté en mode serveur sur un port spécifié écoutant les connexions entrantes.
$ nc -l 2389
En outre, il peut être utilisé en mode client en essayant de se connecter sur le port (2389) qui vient d'être ouvert
$ nc localhost 2389
Maintenant, si nous écrivons du texte côté client, il atteint le côté serveur. Voici la preuve :
$ nc localhost 2389 HI, server
Sur le terminal où tourne le serveur :
$ nc -l 2389 HI, server
Nous voyons donc que l'utilitaire netcat peut être utilisé dans la communication du socket client-serveur.
2. Utiliser Netcat pour transférer des fichiers
L'utilitaire netcat peut également être utilisé pour transférer des fichiers. Côté client, supposons que nous ayons un fichier nommé ‘testfile’ contenant :
$ cat testfile hello test
et côté serveur nous avons un fichier ‘test’ vide
Maintenant, nous exécutons le serveur en tant que :
$ nc -l 2389 > test
et lancez le client en tant que :
cat testfile | nc localhost 2389
Maintenant, quand on voit le fichier 'test' côté serveur, on voit :
$ cat test hello test
Nous voyons donc que les données du fichier ont été transférées du client au serveur.
3. Netcat prend en charge les délais d'attente
Il y a des cas où nous ne voulons pas qu'une connexion reste ouverte pour toujours. Dans ce cas, grâce au commutateur '-w', nous pouvons spécifier le délai d'attente dans une connexion. Ainsi, après les secondes spécifiées avec l'indicateur -w, la connexion entre le client et le serveur est terminée.
Serveur :
nc -l 2389
Client :
$ nc -w 10 localhost 2389
La connexion ci-dessus serait interrompue après 10 secondes.
REMARQUE :N'utilisez pas l'indicateur -w avec l'indicateur -l côté serveur, car dans ce cas, l'indicateur -w n'a aucun effet et la connexion reste donc ouverte pour toujours.
4. Netcat prend en charge la connectivité IPV6
Le drapeau -4 ou -6 spécifie que l'utilitaire netcat doit utiliser quel type d'adresses. -4 force nc à utiliser l'adresse IPV4 tandis que -6 force nc à utiliser l'adresse IPV6.
Serveur :
$ nc -4 -l 2389
Client :
$ nc -4 localhost 2389
Maintenant, si nous lançons la commande netstat, nous voyons :
$ netstat | grep 2389 tcp 0 0 localhost:2389 localhost:50851 ESTABLISHED tcp 0 0 localhost:50851 localhost:2389 ESTABLISHED
Le premier champ de la sortie ci-dessus contiendrait un suffixe "6" au cas où les adresses IPV6 seraient utilisées. Puisque dans ce cas ce n'est pas le cas, une connexion entre le serveur et le client est établie à l'aide d'adresses IPV4.
Maintenant, si nous forçons nc à utiliser des adresses IPV6
Serveur :
$ nc -6 -l 2389
Client :
$ nc -6 localhost 2389
Maintenant, si nous lançons la commande netstat, nous voyons :
$ netstat | grep 2389 tcp6 0 0 localhost:2389 localhost:33234 ESTABLISHED tcp6 0 0 localhost:33234 localhost:2389 ESTABLISHED
Alors maintenant, un suffixe '6' avec 'tcp' montre que nc utilise maintenant des adresses IPV6.
5. Désactiver la lecture depuis STDIN dans Netcat
Cette fonctionnalité peut être obtenue en utilisant le drapeau -d. Dans l'exemple suivant, nous avons utilisé cet indicateur côté client.
Serveur :
$ nc -l 2389
Client :
$ nc -d localhost 2389 Hi
Le texte "Salut" ne sera pas envoyé au serveur, car en utilisant l'option -d, la lecture depuis stdin a été désactivée.
6. Forcer le serveur Netcat à rester actif
Si le client netcat est connecté au serveur et qu'après un certain temps, le client est déconnecté, le serveur netcat se termine normalement également.
Serveur :
$ nc -l 2389
Client :
$ nc localhost 2389 ^C
Serveur :
$ nc -l 2389 $
Ainsi, dans l'exemple ci-dessus, nous voyons que dès que le client a été déconnecté, le serveur a également été arrêté.
Ce comportement peut être contrôlé en utilisant l'indicateur -k côté serveur pour forcer le serveur à rester actif même après la déconnexion du client.
Serveur :
$ nc -k -l 2389
Client :
$ nc localhost 2389 ^C
Serveur :
$ nc -k -l 2389
Nous voyons donc qu'en utilisant l'option -k, le serveur reste actif même si le client est déconnecté.
7. Configurer le client Netcat pour rester actif après EOF
Le client Netcat peut être configuré pour rester actif après la réception d'EOF. Dans un scénario normal, si le client nc reçoit un caractère EOF, il se termine immédiatement, mais ce comportement peut également être contrôlé si l'indicateur -q est utilisé. Cet indicateur attend un nombre qui représente le nombre de secondes à attendre avant que le client ne se termine (après avoir reçu EOF)
Le client doit être démarré comme :
nc -q 5 localhost 2389
Désormais, si le client reçoit un EOF, il attendra 5 secondes avant de se terminer.
8. Utiliser Netcat avec le protocole UDP
Par défaut, tous les sockets créés par l'utilitaire nc sont des protocoles TCP, mais cet utilitaire fonctionne également avec le protocole UDP. Pour activer le protocole UDP, l'indicateur -u est utilisé.
Serveur :
$ nc -4 -u -l 2389
Client :
$ nc -4 -u localhost 2389
Maintenant, le serveur et le client sont configurés pour utiliser le protocole UDP. Cela peut être confirmé par la commande netstat suivante. Nous voyons donc que cette connexion utilise maintenant le protocole UDP.
$ netstat | grep 2389 udp 0 0 localhost:42634 localhost:2389 ESTABLISHED