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

18

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

Мухаммед Хедаяти
источник
7
Пожалуйста, не делайте эту вещь доступной через Интернет. Поскольку он основан на UDP, его можно использовать для отправки потока пакетов в произвольные пункты назначения с использованием поддельных пакетов.
Эван Андерсон

Ответы:

17

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

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

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

Маттиас Анберг
источник
11

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

Мухаммед Хедаяти
источник
1
Альтернатива, исходя из stackoverflow.com/a/35857095/222529 этоsocat TCP4-LISTEN:2000,fork EXEC:cat
Jir
6

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

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

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

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

nc serverip 1234
Андре Мирас
источник
2

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

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

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

Adamo
источник
Я могу использовать socat -v PIPE UDP-LISTEN:5555,fork, но второе соединение получает отказ. Кстати, он отлично работает с TCP-LISTEN. Я избегаю кодировать, иначе я мог бы написать все это на языке C.
Мохаммад Хедаяти
Вы должны обернуть все это в бесконечный цикл: пока правда; делать вещи для общения; сделано
адамо
Вы также можете получить вдохновение с помощью этого урока
adamo
0

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

http://bansky.net/echotool/

Крис
источник
0

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

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

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник