/usr/bin/nc

La commande nc, aussi appellée netcat, permet de créer des sockets TCP ou UDP, que ce soit en connexion ou en attente de connexion.

Il s'agit de la commande indispensable pour le dépannage des services et la mise au point de firewall. La méconnaissance de netcat fait que beaucoup d'administrateurs utilisent telnet à tord, ce qui mène souvent à des conclusions erronées sur la cause d'une panne. Netcat permet aussi d'utiliser le protocole UDP, ce que telnet ne permet pas.

La page de manuel netcat décrit la commande comme "un couteau suisse de l'armée pour TCP/IP", ce qui résume assez bien l'intérêt de la commande.

Fonctionnement

Netcat pemet de créer des sockets TCP et UDP. Une fois le socket créé et connecté, tout caractère tapé a l'entrée standard est envoyé sur la connexion réseau, et tout symbole reçu est affiché sur la sortie standard.

Contrairement a telnet, netcat n'affiche pas de caractères de contrôle ni d'informations sur la sortie standard. Il est donc possible de créer des scripts utilisant le réseau ou de transférer des fichiers avec netcat.

Netcat permet de créer des sockets en connexion ou en attente de connexion. Un socket en connexion fait un lien avec un socket en attente, il s'agit donc d'un client qui se connecte à un serveur. Un socket en attente de connexion est un socket en mode serveur, un port est ouvert et attend une connexion.

Notons que netcat permet d'utiliser IPv4 et IPv6 avec les protocoles TCP ou UDP. Il est aussi possible d'utiliser les sockets local (socket unix) mais cela ne sera pas vu ici.

Utilisation

Malgré la puissance de la commande, celle-ci reste simple d'utilisation. Habituellement, nc est utilisé sans options, ce qui permet de créer une connexion avec TCP. Les trois seules options à connaître sont -u qui permet d'utiliser UDP, -l qui permet de créer un serveur et -p qui permet de donner le port local.

Initier une connexion

L'utilisation la plus classique de netcat est de se connecter en TCP à un port d'un serveur. Pour se faire, il suffit de préciser l'adresse du serveur, suivie du numéro de port sans utiliser d'options.

Voici par exemple une connexion au serveur ftp de Linux Certif:

$ nc www.linuxcertif.com 21
220 ProFTPD 1.3.0 Server (Serveur FTP Magellan) [172.17.13.13]

La seule variante pour créer une connexion est d'utiliser UDP. Pour se faire, il suffit de préciser l'option -u.

Voici un exemple de connexion à un socket UDP ouvert avec netcat:

$ nc -u 164.15.78.57 15000
connected

Attendre un connexion

Attention, il existe deux variantes de la commande nc et la création d'un socket en écoute est différente selon la version.

Pour attendre une connexion, il suffit de d'utiliser l'option -l (le L vient de LISTEN) la suite dépend de votre version de netcat.

Sur Linux, il faut préciser l'option -d suivie du numéro de port sur lequel le socket attendra. Voici un exemple de création d'un socket sur le port 15000 avec Debian:

$ nc -l -p 15000

Sur les systèmes d'exploitation de la famille BSD (et sur Mac OS X), il faut donner le numéro de port directement après l'option -l. Voici le même exemple que le précédent mais sur OpenBSD:

$ nc -l 15000

Comme pour la création de connexion, l'option -u permet d'utiliser le protocole UDP.

Sécurité

Netcat est parfois utilisé par les pirates pour exploiter une faille. Ce n'est pas la commande elle même qui est en jeu, mais les possibilités qu'elle offre.

Par exemple, si une faille permet d'exécuter une commande sur l'ordinateur, un pirate peut utiliser netcat afin de s'introduire dans la machine (par exemple en copiant un fichier binaire qu'il exécute ensuite).

Ces problèmes ne sont pas liés à un bug de netcat mais viennent des fonctionnalités de l'outil. Cela rappelle qu'un firewall bien pensé (et correctement testé) suffit généralement a éviter ce type de problème.

Les options importantes

-l
Mode écoute de connexion (mode serveur)
-u
Utiliser UDP à la place de TCP
-p port
Utilisé le port indiqué sur l'ordinateur qui lance la commande

Page de manuel

Il existe deux variantes de pages pages de manuel de netcat. Il existe en effet une version Debian et une version venant de BSD.

La version Debian est plus explicative, tandis que la version BSD donne des exemples. Les deux variantes de la page de manuel sont bien sûr disponible sur ce site via le menu autre version.