Eu tenho um programa com umEnvie um pacote UDP para a porta xyz
e 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 reuseaddr
com 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 pelosocat
.