Эхо-сервер с netcat или socat

Я хочу, чтобы UDP-эхо-сервер получал пакеты и отвечал точно, что он получил. Как я могу просто сделать это, используя netcat или же socat? Он должен оставаться живым вечно и обрабатывать пакеты, приходящие с нескольких хостов.

6 ответов

Решение

Другой похожий на netcat инструмент - это версия nmap, ncat, который имеет много встроенных вкусностей, чтобы упростить подобные вещи. Это будет работать:

ncat -e /bin/cat -k -u -l 1235

-e означает, что он выполняет /bin/cat (чтобы отразить то, что вы печатаете)
-k означает keep-alive, что он продолжает слушать после каждого соединения
-u означает удп
-l 1235 означает, что он прослушивает порт 1235

Я использовал socat -v PIPE udp-recvfrom:5553,fork запустить сервер и socat - udp:localhost:5553 для клиентов. Это была отличная помощь!

Вы также можете использовать socat (вместо netcat) в качестве эхо-сервера и netcat в качестве клиента.

Эхо-сервер Socat (прослушивает TCP-порт 1234):

socat -v tcp-l:1234,fork exec:'/bin/cat'

Клиент Netcat (подключается к serverip через TCP-порт 1234):

nc serverip 1234

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

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

Вы можете написать программу на C, которая разветвляется nc -u -l -p 4321 и затем использует dup(2) для подключения:

  • nc stdin с выводом родителя
  • nc stdout со стандартным родителем

Затем в бесконечном цикле родитель читает из стандартного ввода и записывает в стандартный вывод все, что читает родитель.

Если вы работаете в Windows и используете unix-подобную среду, такую ​​как cygwin, netcat migth не предоставляет параметр -e. Это работало очень хорошо для меня.

http://bansky.net/echotool/

Другие вопросы по тегам