Как сделать Echo сервер с Bash? - PullRequest
40 голосов
/ 04 декабря 2011

Как написать сценарий bash для эхо-сервера, используя такие инструменты, как nc, echo, xargs и т. Д., Способные одновременно обрабатывать запросы от нескольких клиентов, каждый из которых имеет надежное соединение?

Лучшее, что я когда-либо придумал

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

, но допускается только одно соединение.

Ответы [ 5 ]

41 голосов
/ 05 декабря 2011

Если вы используете ncat вместо nc, ваша командная строка отлично работает с несколькими соединениями, но (как вы указали) без -p.

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

ncat доступна в http://nmap.org/ncat/.

PS с оригинальным netcat (nc) Хоббита, флаг -c не поддерживается.

Обновление: -k (--keep-open) теперь требуется для обработки нескольких соединений.

22 голосов
/ 10 ноября 2012

Вот несколько примеров. ncat simple services

эхо-сервер TCP

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

UDP эхо-сервер

ncat -l 2000 --keep-open --udp --exec "/bin/cat"
8 голосов
/ 08 марта 2016

Если ncat не является опцией, socat также будет работать:

socat TCP4-LISTEN:2000,fork EXEC:cat

fork необходим, чтобы можно было принимать несколько соединений. Добавление reuseaddr к TCP4-LISTEN может быть удобным.

1 голос

netcat решение, предварительно установленное в Ubunutu

netcat, предварительно установленное в Ubuntu 16.04, происходит из netcat-openbsd и не имеет опции -c, ноРуководство дает решение:

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

Тогда пример клиента:

echo abc | netcat localhost 8000

TODO: как изменить значение входной строки?Следующее не возвращает никакого ответа:

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

Однако пример удаленной оболочки работает:

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

Однако я не знаю, как просто обрабатывать параллельные запросы.

0 голосов
/ 15 марта 2019

а как же ...

#! /bin/sh

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