Senden Sie ein UDP-Paket und warten Sie auf Antworten

Senden Sie ein UDP-Paket und warten Sie auf Antworten

Ich habe ein Programm mit einemSenden Sie ein UDP-Paket an den Port xyzund ich werde mit einigen UDP-Paketen antworten!Schnittstelle.

Ich habe herausgefunden, dass ich ein UDP-Paket senden kann mit

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

und lauschen (= einfach den Inhalt auf stdout ausgeben) auf UDP-Pakete mit

socat - udp-listen:<srcPortFromPreviousLine>

Aber wie bringe ich die beiden zusammen? Wenn ich den Listening-Teil in einem Fenster starte, ist der Port bereits belegt und ich kann von dort in einem anderen Fenster nichts mehr senden.

Antwort1

Wie Grawity im Kommentar sagte, udp:ist es bidirektional. Ich kann also nur einen Befehl verwenden:

echo <packetContent> | socat -t 10 - udp:<dstIp>:<dstPort>,sp:<srcPort>

Dadurch wird das Paket gesendet und alle von dort zurückkommenden Pakete ausgedruckt. Wenn keines ankommt, wird der Vorgang nach 10 Sekunden beendet ( -t 10).

Antwort2

Wenn unterstützt, verwenden Sie reuseaddrbeide Befehle. Sie werden wie folgt aussehen:

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

Aus man 1 socat:

reuseaddr
Ermöglicht anderen Sockets, sich an eine Adresse zu binden, auch wenn Teile davon (z. B. der lokale Port) bereits von verwendet werden socat.

verwandte Informationen