эхо-сервер с 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



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 со стандартным родителем

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


Я могу использовать 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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.