У меня есть программа сОтправьте 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
.