Posso testar pacotes de transmissão em uma única máquina?

3

Eu quero ter um servidor enviando pacotes UDP de difusão e dois outros clientes, na mesma máquina, recebendo-os. Posso fazer isso de alguma forma? Qual endereço IP eu usaria?

@gravyface me deu esperança, mas tentei:

  1. Servidor enviando para 127.255.255.255:54321 e clientes ouvindo 0.0.0.0:54321.
  2. Servidor enviando para 127.255.255.255:54321 e clientes ouvindo 127.0.0.1:54321.
  3. servidor enviando para 127.255.255.255:54321 e clientes ouvindo 127.255.255.255:54321.

Nenhum deles funcionou! : (

OBS: estou usando as opções REUSE_ADDR e SO_BROADCAST.

    
por chrisapotek 26.08.2012 / 18:25

2 respostas

4

Primeira janela:

socat -u udp-recv:12345,reuseaddr -

Segunda janela:

socat -u udp-recv:12345,reuseaddr -

Terceira janela

socat - udp-sendto:127.255.255.255:12345,broadcast

Em seguida, insira algumas linhas de texto na terceira janela e veja se você está obtendo algo nas outras duas.

Substitua "socat" por "strat -fe network socat" para ver quais chamadas de sistema estão realmente sendo feitas (supondo que você esteja no Linux, outros unices têm equivalentes às vezes chamados de tusc, struss ou dtruss). O socat é opensource e os pacotes binários estão disponíveis para a maioria dos sistemas operacionais.

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

Acima, os "clientes" receptores vinculam-se ao endereço INADDR_ANY. O que eu encontrei e não sei por que, é que se você ligar a um endereço na sub-rede de loopback, você não está vendo os pacotes chegando.

Veja também:

$ 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

Se os clientes se ligarem a 127.0.0.0 ou 127.255.255.255 e o servidor enviar para o mesmo endereço (com SO_BROADCAST), também funcionará.

    
por 26.08.2012 / 19:21
0

Enviando o tráfego de broadcast para 127.255.255.255 deve funcionar, mas, obviamente, teste-o (e o Wireshark / tcpdump é seu amigo aqui).

Obviamente, seus clientes também precisam estar ouvindo no dispositivo de loopback.

    
por 26.08.2012 / 18:46