Envie pacotes UDP e ouça respostas

Envie pacotes UDP e ouça respostas

Eu tenho um programa com umEnvie um pacote UDP para a porta xyze responderei com alguns pacotes UDP!interface.

Descobri que posso enviar um pacote UDP com

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

e ouça (= apenas despeje seu conteúdo em stdout) por pacotes UDP com

socat - udp-listen:<srcPortFromPreviousLine>

Mas como posso juntar esses dois? Quando inicio a parte de escuta em uma janela inicialmente, a porta já está em uso e não consigo enviar nada de lá para outra janela.

Responder1

Como o grawity disse no comentário, udp:é bidirecional. Então, posso usar apenas um comando:

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

Isso envia o pacote e imprime todos os pacotes que retornam de lá; se não chegar nenhum, ele fecha após 10 segundos ( -t 10).

Responder2

Se houver suporte, use reuseaddrcom ambos os comandos. Eles serão como

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

De man 1 socat:

reuseaddr
Permite que outros soquetes se liguem a um endereço mesmo que partes dele (por exemplo, a porta local) já estejam em uso pelo socat.

informação relacionada