UDP 패킷을 보내고 응답을 듣습니다.

UDP 패킷을 보내고 응답을 듣습니다.

나는 프로그램을 가지고있다.UDP 패킷을 포트로 보내면 xyzUDP 패킷으로 응답해 드리겠습니다!상호 작용.

UDP 패킷을 보낼 수 있다는 것을 알았습니다.

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

다음을 사용하여 UDP 패킷을 수신합니다(= 내용을 stdout에 덤프).

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.

관련 정보