Я хочу, чтобы UDP-эхо-сервер получал пакеты и отвечал точно, что он получил. Как я могу просто сделать это с помощью 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 TCP4-LISTEN:2000,fork EXEC:cat
Вы также можете использовать 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
а затем использует dup (2) для подключения:
Затем в бесконечном цикле родитель читает из стандартного ввода и записывает в стандартный вывод все, что читает родитель.
socat -v PIPE UDP-LISTEN:5555,fork
, но второе соединение получает отказ. Кстати, он отлично работает с TCP-LISTEN. Я избегаю кодировать, иначе я мог бы написать все это на языке C.
Если вы работаете в Windows и используете unix-подобную среду, такую как cygwin, netcat migth не предоставляет параметр -e. Это работало очень хорошо для меня.
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
Я просто не знаю, как обращаться с параллельными запросами.