我有一个程序向端口发送一个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
。