Подтвердить что ты не робот

Эхо-сервер с bash

Как написать эхо-сервер bash script с помощью таких инструментов, как nc, echo, xargs и т.д., которые могут одновременно обрабатывать запросы от нескольких клиентов, каждый с надежным подключением.

Лучшее, что я придумал до сих пор, -

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

но он позволяет только одно соединение.

4b9b3361

Ответ 1

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

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

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

P.S. с оригиналом Hobbit netcat (nc) флаг -c не поддерживается.

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

Ответ 2

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

Эхо-сервер TCP

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

Эхо-сервер UDP

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

Ответ 3

В случае, если ncat не является вариантом, будет также работать socat:

socat TCP4-LISTEN:2000,fork EXEC:cat

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

Ответ 4

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

Предварительно установленный в Ubuntu 16.04 netcat поставляется с 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

Я не знаю, как обращаться только с параллельными запросами.