заставить netcat прослушивать несколько пакетов UDP

Если я запустил простой UDP-прослушиватель вроде этого:

nc -l -u -p 1234

Тогда я, кажется, получаю только первый входящий UDP-пакет. Например, если я бегу:

$ echo abc | nc -u localhost 1234
  ["abc" appears in output of server as expected]

$ echo abc | nc -u localhost 1234
read(net): Connection refused
7
задан 26 April 2016 в 23:51
3 ответа

с нулевым таймаутом (0)

«Сервер»:

nc -kluvw 0 localhost 9000

«Клиент»:

echo -e "all"     | nc -vuw 0 localhost 9000
echo -e "the"     | nc -vuw 0 localhost 9000
echo -e "udp"     | nc -vuw 0 localhost 9000
echo -e "packets" | nc -vuw 0 localhost 9000

Результат:

Connection from 127.0.0.1 port 9000 [udp/*] accepted
all
Connection from 127.0.0.1 port 9000 [udp/*] accepted
the
Connection from 127.0.0.1 port 9000 [udp/*] accepted
udp
Connection from 127.0.0.1 port 9000 [udp/*] accepted
packets

протестировано с:

uname -a
Linux ubuntu 3.2.0-23-generic-pae #36-Ubuntu SMP Tue Apr 10 22:19:09 UTC 2012 i686 i686 i386 GNU/Linux
6
ответ дан 2 December 2019 в 23:40

Я нашел ссылку, которая может вам помочь: netcat: Странное поведение с UDP - получает только первый отправленный пакет .

На этом этапе я не знал, что делать, но Натан указал, что если бы я использовал тайм-ауты на клиенте и сервере, то можно было бы отправить несколько пакетов UDP.

Я перезапустил сервер netcat, но на этот раз с таймаутом в 1 секунду:

 $ nc -kluvw 1 localhost 9000
 

И затем начал отправлять UDP-пакеты от клиента netcat также с таймаутом в 1 секунду:

  $ echo -e "all" |  nc -vvuw 1 локальный хост 9000
  Подключение к порту localhost 9000 [udp / cslistener] выполнено успешно!
  $ echo -e "the" |  nc -vvuw 1 локальный хост 9000
  Подключение к порту localhost 9000 [udp / cslistener] выполнено успешно!
  $ echo -e "udp" |  nc -vvuw 1 локальный хост 9000
  Подключение к порту localhost 9000 [udp / cslistener] выполнено успешно!
  $ echo -e "пакеты" |  nc -vvuw 1 локальный хост 9000
  Подключение к порту localhost 9000 [udp / cslistener] выполнено успешно!
 

И сервер netcat теперь получает их все:

 $ nc -kluvw 1 localhost 9000
XXXXвсе
XXXX
XXXXudp
XXXXпакеты
 

Это была интересная проблема, надеюсь, это ответит на ваш вопрос.

0
ответ дан 2 December 2019 в 23:40

Для мониторинга порта UDP вы можете попробовать

netcat -lzu -p 9000

# -z, --zero                 zero-I/O mode (used for scanning)

Это работает в моем GNU netcat 0.7.1.

0
ответ дан 24 July 2021 в 00:33

Теги

Похожие вопросы