Quiero tener un servidor que envíe paquetes UDP de difusión y otros dos clientes, en la misma máquina, que los reciban. ¿Puedo hacer eso de alguna manera? ¿Qué dirección IP usaría?
@gravyface me dio esperanza pero lo intenté:
- El servidor envía a 127.255.255.255:54321 y los clientes escuchan a 0.0.0.0:54321.
- El servidor envía a 127.255.255.255:54321 y los clientes escuchan a 127.0.0.1:54321.
- el servidor envía a 127.255.255.255:54321 y los clientes escuchan a 127.255.255.255:54321.
¡Ninguno de ellos funcionó!:(
OBS: estoy usando las opciones REUSE_ADDR y SO_BROADCAST.
Respuesta1
Primera ventana:
socat -u udp-recv:12345,reuseaddr -
Segunda ventana:
socat -u udp-recv:12345,reuseaddr -
Tercera ventana
socat - udp-sendto:127.255.255.255:12345,broadcast
Luego ingrese algunas líneas de texto en la tercera ventana y vea si obtiene algo en las otras dos.
Reemplace "socat" con "strace -fe network socat" para ver qué llamadas al sistema se están realizando realmente (suponiendo que esté en Linux, otros Unices tienen equivalentes a veces llamados tusc, struss o dtruss). socat es de código abierto y hay paquetes binarios disponibles para la mayoría de los sistemas operativos.
socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP) = 3
setsockopt(3, SOL_SOCKET, SO_BROADCAST, [1], 4) = 0
sendto(3, "qwe\n", 4, 0, {sa_family=AF_INET, sin_port=htons(12345), sin_addr=inet_addr("127.255.255.255")}, 16) = 4
Arriba, los "clientes" receptores se vinculan a la dirección INADDR_ANY. Lo que encontré y no estoy seguro de por qué, es que si se vincula a una dirección en la subred de bucle invertido, no verá los paquetes entrantes.
Ver también:
$ ip route show table local dev lo scope link
broadcast 127.0.0.0 proto kernel src 127.0.0.1
broadcast 127.255.255.255 proto kernel src 127.0.0.1
Si los clientes se vinculan a 127.0.0.0 o 127.255.255.255 y el servidor envía a esa misma dirección (con SO_BROADCAST), entonces también funciona.
Respuesta2
Envío de tráfico de difusión a 127.255.255.255deberíafunciona, pero obviamente pruébalo (y Wireshark/tcpdump es tu amigo aquí).
Obviamente, sus clientes también deben estar escuchando en el dispositivo loopback.