Enviar paquete UDP y escuchar respuestas

Enviar paquete UDP y escuchar respuestas

Tengo un programa con unEnvíe un paquete UDP al puerto xyzy le responderé con algunos paquetes UDP.interfaz.

Descubrí que puedo enviar un paquete UDP con

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

y escuchar (= simplemente volcar su contenido a la salida estándar) para paquetes UDP con

socat - udp-listen:<srcPortFromPreviousLine>

¿Pero cómo puedo unir a esos dos? Cuando inicio la parte de escucha en una ventana al principio, el puerto ya está en uso y no puedo enviar nada desde allí en otra ventana.

Respuesta1

Como dijo grawity en el comentario, udp:es bidireccional. Entonces solo puedo usar un comando:

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

Esto envía el paquete e imprime los paquetes que regresan desde allí; si no llega ninguno, se cierra después de 10 segundos ( -t 10).

Respuesta2

Si es compatible, utilícelo reuseaddrcon ambos comandos. serán como

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

De man 1 socat:

reuseaddr
Permite que otros sockets se vinculen a una dirección incluso si partes de ella (por ejemplo, el puerto local) ya están en uso por socat.

información relacionada