web-dev-qa-db-fra.com

Comment créer un serveur Echo avec Bash?

Comment écrire un script bash de serveur d'écho en utilisant des outils comme nc, echo, xargs, etc. capables de traiter simultanément les demandes de plusieurs clients avec une connexion durable?

Le meilleur que j'ai trouvé jusqu'à présent est

nc -l -p 2000 -c 'xargs -n1 echo'

mais il ne permet qu'une seule connexion.

40
Roskoto

Si vous utilisez ncat au lieu de nc, votre ligne de commande fonctionne correctement avec plusieurs connexions mais (comme vous l'avez souligné) sans -p.

ncat -l 2000 -k -c 'xargs -n1 echo'

ncat est disponible sur http://nmap.org/ncat/ .

P.S. avec l'original netcat (nc) du Hobbit, le drapeau -c n'est pas pris en charge.

Mise à jour: -k (--keep-open) est désormais requis pour gérer plusieurs connexions.

43
David Costa

Voici quelques exemples. ncat services simples

Serveur d'écho TCP

ncat -l 2000 --keep-open --exec "/bin/cat"

Serveur d'écho UDP

ncat -l 2000 --keep-open --udp --exec "/bin/cat"
22
douyw

Dans le cas où ncat n'est pas une option, socat fonctionnera également:

socat TCP4-LISTEN:2000,fork EXEC:cat

Le fork est nécessaire pour que plusieurs connexions puissent être acceptées. Ajout de reuseaddr à TCP4-LISTEN peut être pratique.

9
Caesar

netcat solution pré-installée dans Ubunut

Le netcat pré-installé dans Ubuntu 16.04 provient de netcat-openbsd, et n'a pas de -c option, mais le manuel donne une solution:

Sudo mknod -m 777 fifo p
cat fifo | netcat -l -k localhost 8000 > fifo

Ensuite, exemple client:

echo abc | netcat localhost 8000

TODO: comment modifier la valeur de la chaîne d'entrée? Ce qui suit ne renvoie aucune réponse:

cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo

L'exemple de shell distant fonctionne cependant:

cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo

Cependant, je ne sais pas comment traiter les demandes simultanées.

qu'en est-il de...

#! /bin/sh

while :; do
/bin/nc.traditional -k -l -p 3342 -c 'xargs -n1 echo'
done
0
Mohan Nbs