Я хочу, чтобы эхо-сервер 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) для подключения:
Затем в бесконечном цикле родитель читает из 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. Это отлично сработало для меня.