我有一個程序向連接埠發送 UDP 封包xyz
,我將回覆一些 UDP 封包!介面.
我發現我可以發送 UDP 資料包
echo <packetContent> | socat - udp:<dstIP>:<dstPort>,sp=<srcPort>
並監聽(=只是將其內容轉儲到標準輸出)UDP 封包
socat - udp-listen:<srcPortFromPreviousLine>
但我怎麼才能把這兩者結合在一起呢?當我首先在一個視窗中啟動監聽部分時,該連接埠已被使用,我無法在另一個視窗中從那裡發送任何內容。
答案1
就像評論中所說的重力一樣,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
。