Назад | Перейти на главную страницу

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

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

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

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

-e означает, что он выполняет / bin / cat (чтобы повторить то, что вы вводите)
-k означает keep-alive, что он продолжает прослушивать после каждого соединения
-u означает udp
-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

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

  • nc stdin с родительским stdout
  • nc stdout с родительским stdin

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

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

В 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

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

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

http://bansky.net/echotool/