¿Puedo probar paquetes de difusión en una sola máquina?

¿Puedo probar paquetes de difusión en una sola máquina?

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é:

  1. El servidor envía a 127.255.255.255:54321 y los clientes escuchan a 0.0.0.0:54321.
  2. El servidor envía a 127.255.255.255:54321 y los clientes escuchan a 127.0.0.1:54321.
  3. 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.

información relacionada