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


Como posso filtrar a saída de um ping de multicast para todos os nós para 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 da rede, ele será removido 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 da junção
     ping6 -I eth1 ip6-allnodes
        PING ip6-allnodes (ip6-allnodes) de fe80 :: aaaa: aaaa: aaaa: aaaa eth1: 56 bytes de dados
        64 bytes de fe80 :: aaaa: aaaa: aaaa: aaaa: icmp_seq = 1 ttl = 64 tempo = 0,018 ms
        64 bytes de fe80 :: bbbb: bbbb: bbbb: bbbb: icmp_seq = 1 ttl = 64 tempo = 0.490 ms (DUP!)
        64 bytes de fe80 :: cccc: cccc: cccc: icmp_seq = 1 ttl = 64 tempo = 0,739 ms (DUP!)
        64 bytes de fe80 :: aaaa: aaaa: aaaa: aaaa: icmp_seq = 2 ttl = 64 tempo = 0,037 ms
        64 bytes de fe80 :: bbbb: bbbb: bbbb: bbbb: icmp_seq = 2 ttl = 64 tempo = 0.513 ms (DUP!)
        64 bytes de fe80 :: cccc: cccc: cccc: icmp_seq = 2 ttl = 64 tempo = 0,674 ms (DUP!)
        64 bytes de fe80 :: dddd: dddd: dddd: dddd: icmp_seq = 2 ttl = 64 tempo = 228 ms (DUP!)
        64 bytes de fe80 :: aaaa: aaaa: aaaa: aaaa: icmp_seq = 3 ttl = 64 tempo = 0,033 ms
        64 bytes de fe80 :: bbbb: bbbb: bbbb: bbbb: icmp_seq = 3 ttl = 64 tempo = 0,460 ms (DUP!)
        64 bytes de fe80 :: cccc: cccc: cccc: icmp_seq = 3 ttl = 64 tempo = 0,611 ms (DUP!)
        64 bytes de fe80 :: aaaa: aaaa: aaaa: aaaa: icmp_seq = 4 ttl = 64 tempo = 0,045 ms
        64 bytes de fe80 :: bbbb: bbbb: bbbb: bbbb: icmp_seq = 4 ttl = 64 tempo = 0,485 ms (DUP!)
        64 bytes de fe80 :: cccc: cccc: cccc: icmp_seq = 4 ttl = 64 tempo = 0,609 ms (DUP!)
        64 bytes de fe80 :: aaaa: aaaa: aaaa: aaaa: icmp_seq = 5 ttl = 64 tempo = 0,035 ms
        64 bytes de fe80 :: bbbb: bbbb: bbbb: bbbb: icmp_seq = 5 ttl = 64 tempo = 0.518 ms (DUP!)
        64 bytes de fe80 :: cccc: cccc: cccc: icmp_seq = 5 ttl = 64 tempo = 0,580 ms (DUP!)
        64 bytes de fe80 :: eeee: eeee: eeee: eeee: icmp_seq = 5 ttl = 255 tempo = 201 ms (DUP!)
        64 bytes de fe80 :: dddd: dddd: dddd: dddd: icmp_seq = 5 ttl = 64 tempo = 237 ms (DUP!)
        64 bytes de fe80 :: aaaa: aaaa: aaaa: aaaa: icmp_seq = 6 ttl = 64 tempo = 0,032 ms
        64 bytes de fe80 :: bbbb: bbbb: bbbb: bbbb: icmp_seq = 6 ttl = 64 tempo = 0,508 ms (DUP!)
        64 bytes de fe80 :: cccc: cccc: cccc: icmp_seq = 6 ttl = 64 tempo = 0,540 ms (DUP!)
        64 bytes de fe80 :: aaaa: aaaa: aaaa: aaaa: icmp_seq = 7 ttl = 64 tempo = 0,038 ms
        64 bytes de fe80 :: bbbb: bbbb: bbbb: bbbb: icmp_seq = 7 ttl = 64 tempo = 0.550 ms (DUP!)
        64 bytes de fe80 :: cccc: cccc: cccc: icmp_seq = 7 ttl = 64 tempo = 0,640 ms (DUP!)
        64 bytes de fe80 :: dddd: dddd: dddd: dddd: icmp_seq = 7 ttl = 64 tempo = 76,6 ms (DUP!)
        estatísticas de ping ip6-allnodes ---
        7 pacotes transmitidos, 7 recebidos, +18 duplicados, 0% de perda de pacotes, tempo 6020ms
        rtt min / avg / max / mdev = 0,018 / 30,086 / 237,386 / 72,776 ms


0


origem


Apenas pingar uma vez? ping -c 1 - Michael Hampton


Respostas:


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.

Experimentar 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.


1



Para minha aplicação particular, é exagerada. Porque eu quero que ele seja executado em um pequeno ARM BusyBox Linux. Para um computador Ubuntu extra na mesma Rede Ipv6, seria útil, especialmente se você precisa da saída da web. - Oliver G.
O NDPmon certamente não é exagerado. É o mínimo que você precisa para acompanhar os hosts na LAN. Ok, as coisas RA que você pode não precisar, mas o resto das coisas do NDP que você precisa se você quer ter uma boa solução. A interface da web é apenas um plugin. Você não precisaria disso. - Sander Steffann
Eu tenho que lidar com o NDPmon mais detalhadamente. Pode fornecer algum exemplo de uso de ndpmon? - Oliver G.
Se você executá-lo com a configuração de exemplo padrão (XML infelizmente) ele registra linhas como: 'novo IP 0: 10: db: ff: 10: 1 2001: 9e0: 803: 0: 0: 0: 0: 1 # 012' - Sander Steffann


Mesma ideia que 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 alcançá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 forma 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: quem se juntou ao ff0x::1 grupo.

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 eu não sei de nenhuma maneira de listar os marceneiros explicitamente.


1



Eu preferiria essa abordagem porque nas minhas pequenas caixas Linux M2M a ferramenta ip básica está naturalmente presente. Parece ser possível processar o resultado em alguns outros scripts. - Oliver G.
Não é uma má sugestão :) - Sander Steffann