it-swarm.com.de

Wie erstelle ich einen Echo-Server mit Bash?

Wie schreibe ich ein Echo-Server-Bash-Skript mit Tools wie nc, echo, xargs usw., die gleichzeitig Anforderungen von mehreren Clients verarbeiten können, von denen jeder eine dauerhafte Verbindung hat?

Das Beste, was ich bisher gemacht habe, ist

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

es ist jedoch nur eine einzige Verbindung möglich.

40
Roskoto

Wenn Sie ncat anstelle von nc verwenden, funktioniert Ihre Befehlszeile problemlos mit mehreren Verbindungen, jedoch (wie Sie bereits betont haben) ohne -p.

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

ncat ist verfügbar unter http://nmap.org/ncat/ .

P.S. beim originalen netcat des hobbits (nc) wird das -c flag nicht unterstützt.

Update: -k (--keep-open) ist jetzt erforderlich, um mehrere Verbindungen zu verwalten.

43
David Costa

Hier sind einige Beispiele. ncat simple services

TCP-Echoserver

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

UDP-Echoserver

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

Falls ncat keine Option ist, funktioniert socat auch:

socat TCP4-LISTEN:2000,fork EXEC:cat

Das fork ist notwendig, damit mehrere Verbindungen akzeptiert werden können. Das Hinzufügen von reuseaddr zu TCP4-LISTEN Kann praktisch sein.

9
Caesar

netcat Lösung in Ubunutu vorinstalliert

Das in Ubuntu 16.04 vorinstallierte netcat stammt von netcat-openbsd und hat kein -c Option, aber das Handbuch gibt eine Lösung:

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

Dann Kundenbeispiel:

echo abc | netcat localhost 8000

TODO: Wie ändere ich den Wert der Eingabezeichenfolge? Folgendes gibt keine Antwort zurück:

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

Das Remote-Shell-Beispiel funktioniert jedoch:

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

Ich weiß jedoch nicht, wie ich mit gleichzeitigen Anfragen umgehen soll.

wie wäre es mit...

#! /bin/sh

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