Tengo un programa con unEnvíe un paquete UDP al puerto xyz
y 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 reuseaddr
con 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 porsocat
.