Como posso filtrar a saída de um multicast ping6 para todos os nós para obter todos os Dispositivos IPv6 acessíveis em um momento no tempo?

0

Como posso filtrar a saída de um ping de multicast para todos os nós, de modo que, no arquivo de saída, cada IP apareça apenas uma vez?

  1. Se um novo dispositivo ingressar na rede, ele será gravado em um arquivo com um registro de data e hora associado.
  2. Se um dispositivo sair, a rede será removida desse arquivo.
  3. No final, o arquivo de saída mostra-me os dispositivos acessíveis na rede com o registro de data e hora de ingresso
     ping6 -I eth1 ip6-allnodes 
        PING ip6-allnodes(ip6-allnodes) from fe80::aaaa:aaaa:aaaa:aaaa eth1: 56 data bytes
        64 bytes from fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=1 ttl=64 time=0.018 ms
        64 bytes from fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=1 ttl=64 time=0.490 ms (DUP!)
        64 bytes from fe80::cccc:cccc:cccc:cccc: icmp_seq=1 ttl=64 time=0.739 ms (DUP!)
        64 bytes from fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=2 ttl=64 time=0.037 ms
        64 bytes from fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=2 ttl=64 time=0.513 ms (DUP!)
        64 bytes from fe80::cccc:cccc:cccc:cccc: icmp_seq=2 ttl=64 time=0.674 ms (DUP!)
        64 bytes from fe80::dddd:dddd:dddd:dddd: icmp_seq=2 ttl=64 time=228 ms (DUP!)
        64 bytes from fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=3 ttl=64 time=0.033 ms
        64 bytes from fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=3 ttl=64 time=0.460 ms (DUP!)
        64 bytes from fe80::cccc:cccc:cccc:cccc: icmp_seq=3 ttl=64 time=0.611 ms (DUP!)
        64 bytes from fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=4 ttl=64 time=0.045 ms
        64 bytes from fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=4 ttl=64 time=0.485 ms (DUP!)
        64 bytes from fe80::cccc:cccc:cccc:cccc: icmp_seq=4 ttl=64 time=0.609 ms (DUP!)
        64 bytes from fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=5 ttl=64 time=0.035 ms
        64 bytes from fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=5 ttl=64 time=0.518 ms (DUP!)
        64 bytes from fe80::cccc:cccc:cccc:cccc: icmp_seq=5 ttl=64 time=0.580 ms (DUP!)
        64 bytes from fe80::eeee:eeee:eeee:eeee: icmp_seq=5 ttl=255 time=201 ms (DUP!)
        64 bytes from fe80::dddd:dddd:dddd:dddd: icmp_seq=5 ttl=64 time=237 ms (DUP!)
        64 bytes from fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=6 ttl=64 time=0.032 ms
        64 bytes from fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=6 ttl=64 time=0.508 ms (DUP!)
        64 bytes from fe80::cccc:cccc:cccc:cccc: icmp_seq=6 ttl=64 time=0.540 ms (DUP!)
        64 bytes from fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=7 ttl=64 time=0.038 ms
        64 bytes from fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=7 ttl=64 time=0.550 ms (DUP!)
        64 bytes from fe80::cccc:cccc:cccc:cccc: icmp_seq=7 ttl=64 time=0.640 ms (DUP!)
        64 bytes from fe80::dddd:dddd:dddd:dddd: icmp_seq=7 ttl=64 time=76.6 ms (DUP!)
        ip6-allnodes ping statistics ---
        7 packets transmitted, 7 received, +18 duplicates, 0% packet loss, time 6020ms
        rtt min/avg/max/mdev = 0.018/30.086/237.386/72.776 ms

    
por Oliver G. 26.01.2014 / 22:59

2 respostas

1

O ping não é a ferramenta certa para isso. Cada dispositivo só responde uma vez, mesmo que tenha vários endereços. E ter vários endereços é normal no IPv6.

Experimente o NDPMon . Sua finalidade é acompanhar os eventos de descoberta do vizinho. Ele pode registrar quando um endereço IPv6 aparece pela primeira vez, quando seu endereço MAC muda, etc.

    
por 27.01.2014 / 00:51
1

Mesma ideia de Sander, ferramenta diferente (comando do monitor [iproute2] [1])

$ ip -6 monitor all
[ROUTE][NEIGH]fdcc:216f:1d2c::24 dev eth0 lladdr 00:1a:92:7f:ea:3e REACHABLE
...

Como obter todos os roteadores e nós acessíveis a qualquer momento é um pouco complicado. O vizinho e as tabelas de rotas ficam obsoletas rapidamente por um motivo, isso não significa que os saltos tenham desaparecido. É apenas uma maneira conveniente de permitir que os nós apareçam e desapareçam a qualquer momento sem mais mensagens de junção / saída.

Dizendo isso, você deve observar como funciona o multicast em geral, pelo menos em alguns switches cisco (aqueles com descoberta de ouvinte de multidifusão, MLD) você pode acessar as tabelas multicast diretamente, então sua pergunta é reformulada como: who joined the ff0x::1 group.

Teoricamente, o kernel do linux contém essas informações também, como pode ser visto em:

$ ip -6 maddr
inet6 ff02::1:ffeb:ea92
inet6 ff02::1:ff00:16 users 3
inet6 ff02::1

infelizmente não sei como listar os marceneiros explicitamente.

    
por 27.01.2014 / 08:21