私はプログラムを持っていますポートに 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
。