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.