发送 UDP 数据包并监听回复

发送 UDP 数据包并监听回复

我有一个程序向端口发送一个UDP数据包xyz,我会用一些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

相关内容