Como eu adiciono um IP de broadcast à interface de loopback sob os / x usando ifconfig quando minha máquina não tem rede? [duplicado]

2

Sou novo na administração de rede avançada e gostaria de fazer alguns testes com a difusão UDP, por isso preciso de um endereço de difusão na minha interface de loopback . A máquina está offline, ou seja, não há rede.

Como posso conseguir isso através de ifconfig sem ter que comprar um switch como um usuário nos comentários sugeridos. No Linux, tudo o que tenho que fazer é usar 127.255.255.255 e as transmissões funcionam bem sem qualquer rede ou qualquer switch. Se eu tiver uma rede, posso usar apenas 255.255.255.255, obviamente.

Aqui está como você pode verificar por si mesmo que ele funciona no linux, mas não no os / x:

  1. Abra dois terminais e digite os dois:

    nc -u -l 55555

  2. Abra um terceiro terminal, instale o socat se necessário e digite: ( caso você pergunte ao netcat NÃO suporta broadcast )

    echo -n "TEST" | socat - udp-datagram:127.255.255.255:55555,broadcast

  3. Você deverá ver os dois terminais recebendo a mensagem.

Se você tentar a mesma experiência com 127.0.0.1, apenas um terminal receberá a mensagem como esperado.

Realizar o mesmo teste no OS X não exibe o mesmo comportamento.

O que estou procurando é uma solução de software para transmissões, se possível.
Eu não posso usar multicast (ele tem que ser transmitido) e não posso testar isso em uma rede (máquina off-line).

    
por bandodeotarios 12.11.2013 / 18:30

1 resposta

9

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 the broadcast 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 e nc -u -l 127.0.0.2 5555 e nc -u -l 127.0.0.3 5555
    ... etc

  • Execute seu comando de teste de transmissão usando socat e echo 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.

    
por 13.11.2013 / 03:53