Отправьте UDP-пакет и ожидайте ответов

Отправьте UDP-пакет и ожидайте ответов

У меня есть программа сОтправьте UDP-пакет на порт xyz, и я отвечу несколькими UDP-пакетами!интерфейс.

Я обнаружил, что могу отправить UDP-пакет с помощью

echo <packetContent> | socat - udp:<dstIP>:<dstPort>,sp=<srcPort>

и прослушивать (= просто выводить их содержимое на стандартный вывод) пакеты UDP с

socat - udp-listen:<srcPortFromPreviousLine>

Но как мне объединить эти два? Когда я начинаю прослушивание в одном окне, порт уже используется, и я не могу ничего отправить оттуда в другое окно.

решение1

Как сказал grawity в комментарии, udp:двунаправленный. Так что я могу использовать только одну команду:

echo <packetContent> | socat -t 10 - udp:<dstIp>:<dstPort>,sp:<srcPort>

Это отправит пакет и выведет все пакеты, приходящие оттуда обратно; если ни один пакет не приходит, процесс завершится через 10 секунд ( -t 10).

решение2

Если поддерживается, используйте reuseaddrс обеими командами. Они будут такими

echo <packetContent> | socat - udp:<dstIP>:<dstPort>,sp=<srcPort>,reuseaddr
socat - udp-listen:<srcPortFromPreviousLine>,reuseaddr

От man 1 socat:

reuseaddr
Позволяет другим сокетам привязываться к адресу, даже если его части (например, локальный порт) уже используются socat.

Связанный контент