Ich habe ein Programm mit einemSenden Sie ein UDP-Paket an den Port xyz
und 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 reuseaddr
beide 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 werdensocat
.