UDPパケットを送信し、応答を待ちます

UDPパケットを送信し、応答を待ちます

私はプログラムを持っていますポートに UDP パケットを送信するxyzと、いくつかの UDP パケットで応答します。インターフェース。

UDPパケットを送信できることが分かりました

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

そしてUDPパケットをリッスン(つまり内容を標準出力にダンプ)する。

socat - udp-listen:<srcPortFromPreviousLine>

しかし、どうすればこれら 2 つを一緒にできるでしょうか? 最初に 1 つのウィンドウでリスニング部分を開始すると、ポートはすでに使用されており、別のウィンドウでそこから何も送信できません。

答え1

grawity がコメントで言ったように、udp:双方向です。そのため、1 つのコマンドだけを使用できます。

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

関連情報