IFT585 - Q&R - Je n'arrive pas à faire fonctionner netcat...
par Benoit, 2014-05-10

Question

Je n’arrive pas a faire fonctionner netcat.

Quand je fait nc -l 127.0.0.1 9999 ça fonctione, mais quand je veux le faire sans l’option -l ça ne fait “rien”. Je n’ai aucun message d’erreur et ça me retourne à la commande normale du terminal (case départ).

J’ai essayé de voir avec openbsd et traditional, mais sur OS X, ça me dit que ça n’existe pas, et sur Ubuntu, j’ai le meme résultat. Pour openbsd: rien. Quand j’essaie avec traditional, ça me dit “connection refused.”

Réponse

Lorsqu’on exécute netcat avec l’option -l, il démarre comme un serveur: il exécute la séquence bind, listen et accept. En revanche, lorsqu’on exécute netcat sans cette option, il démarre comme un client, se contentant de connect. Dans ce dernier mode, pour que la connexion ait lieu, il faut qu’un serveur soit déjà en train d’écouter à cette adresse et sur le port. Si aucun serveur n’est prêt au moment d’exécuter la variante “client” de netcat, la variante OpenBSD quitte sans message (mais renvoit le code de sortie 1, indiquant une erreur – on peut le voir par la commande echo $?), alors que la variante traditional annonce “Connection refused”, avec numéro d’erreur (errno) 111.

Pour pouvoir tester des communications TCP/IP avec netcat, il faut rouler à la fois le serveur et le client. On commence par lancer le serveur, avec la commande formulée comme ci-haut:

$ nc -l 127.0.0.1 9999

Dans un autre terminal, on peut alors exécuter le client:

$ nc 127.0.0.1 9999

Si à ce moment on se prend le message d’erreur “Connection refused”, ce peut être parce qu’on a la variante traditional de netcat. On peut alors quitter le serveur (CTRL+D ou CTRL+C) et le relancer par la commande

$ nc -l -p 9999 127.0.0.1

Notez que cette syntaxe fonctionne aussi avec la variante OpenBSD de netcat. Une fois le client connecté au serveur, on peut taper n’importe quoi et, lorsqu’on tape sur Enter, le serveur fait écho sur sa sortie standard de ce n’importe quoi.

Notez que ce serveur netcat est “volatile:” dès que le client brise la connexion, le serveur interrompt lui aussi son exécution. Il faut donc le relancer pour exécuter une nouvelle expérience.