Você não "adiciona" um endereço de broadcast. Você direciona o tráfego para o endereço de broadcast de uma rede .
O endereço de broadcast é um conceito inteiramente virtual, e não deve ser ser "adicionado" ou de outra forma atribuído a qualquer host na prática normal.
The exception to the above rule is specifying the broadcast address (using
ifconfig broadcast
) which is done in cases where the broadcast address may be nonstandard. Generally if you nave to use thebroadcast
option to ifconfig you're doing something strange, and probably wrong...
Se você quiser enviar uma transmissão para a rede 127.0.0.0/8 (local / loopback) você teoricamente simplesmente direcionaria o tráfego para 127.255.255.255, mas se você tentar fazer isso, descobrirá que NÃO funciona porque o dispositivo de loopback não suporta BROADCAST
tráfego.
Você pode verificar isso por si mesmo executando ifconfig lo0
no seu mac, o que produzirá resultados como:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
inet 127.0.0.1 netmask 0xff000000
nd6 options=1<PERFORMNUD>
Observe a falta de BROADCAST
no campo de flags.
Configurar o dispositivo com uma opção de transmissão (endereço) resulta no endereço a ser ignorado. Uma caixa BSD ou Linux (Debian) comporta-se de forma semelhante, e eu esperaria que outras plataformas também o fizessem, embora você possa encontrar um curioso que lhe permite definir o BROADCAST
flag no dispositivo de loopback se você procurar o suficiente. / p>
A lógica por trás disso é discutida neste post da lista de discussão do FreeBSD . Um raciocínio alternativo para não permitir a transmissão também é discutido nos comentários em esta resposta de falha de servidor , que propõe a alternativa de usar MULTICAST
(que é normalmente suportado pela interface de loopback).
Especificamente em relação ao seu caso de teste: o que você está vendo não é um comportamento esperado. Consegui reproduzir seu comportamento, mas apenas em um conjunto muito restrito de circunstâncias.
Para um teste mais robusto que mostre que broadcasts no dispositivo de loopback de fato não funciona no Linux, tente o seguinte caso de teste em uma máquina Linux prática (meu caso de teste: Ubuntu 13.04):
-
Configure um segundo endereço (terceiro, quarto, quinto - por mais que você queira) na sua interface de loopback.
-
Inicie uma instância do netcat ouvindo em cada endereço de loopback, por exemplo, -
nc -u -l 127.0.0.1 5555
enc -u -l 127.0.0.2 5555
enc -u -l 127.0.0.3 5555
... etc -
Execute seu comando de teste de transmissão usando
socat
eecho TEST | socat - udp-datagram:127.255.255.255:5555,broadcast
Você notará que none de suas janelas netcat recebem a mensagem ( Comportamento Esperado porque a interface de loopback não anuncia suporte para BROADCAST
em seu campo flags), no entanto, se você os endereçar diretamente (por exemplo, echo TEST2 | socat - udp-datagram:127.0.0.2:5555
), eles receberão a mensagem sem problemas.
A "solução" que você está pedindo não existe (ou pelo menos não deve funcionar ) em qualquer plataforma, a menos que a interface de loopback suporte BROADCAST
(como pode ser determinado pelo flags
field em ifconfig) - As plataformas sobre as quais você está falando não publicitam suporte para transmissão na interface de loopback, portanto você não pode fazer o que está pedindo.