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

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

Como posso filtrar a saída de um ping 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 carimbo de data/hora de adesão.
  2. Se um dispositivo sair da rede, ele será removido desse arquivo.
  3. No final, o arquivo de saída mostra os dispositivos atualmente acessíveis na rede com o carimbo de data/hora de adesã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 time=0,490 ms (DUP!)
        64 bytes de fe80::cccc:cccc:cccc:cccc: icmp_seq=1 ttl=64 time=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 time=0,513 ms (DUP!)
        64 bytes de fe80::cccc:cccc:cccc:cccc: icmp_seq=2 ttl=64 time=0,674 ms (DUP!)
        64 bytes de fe80::dddd:dddd:dddd:dddd: icmp_seq=2 ttl=64 time=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 time=0,460 ms (DUP!)
        64 bytes de fe80::cccc:cccc:cccc:cccc: icmp_seq=3 ttl=64 time=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 time=0,485 ms (DUP!)
        64 bytes de fe80::cccc:cccc:cccc:cccc: icmp_seq=4 ttl=64 time=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 time=0,518 ms (DUP!)
        64 bytes de fe80::cccc:cccc:cccc:cccc: icmp_seq=5 ttl=64 time=0,580 ms (DUP!)
        64 bytes de fe80::eeee:eeee:eeee:eeee: icmp_seq=5 ttl=255 time=201 ms (DUP!)
        64 bytes de fe80::dddd:dddd:dddd:dddd: icmp_seq=5 ttl=64 time=237 ms (DUP!)
        64 bytes de fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=6 ttl=64 time=0,032 ms
        64 bytes de fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=6 ttl=64 time=0,508 ms (DUP!)
        64 bytes de fe80::cccc:cccc:cccc:cccc: icmp_seq=6 ttl=64 time=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 time=0,550 ms (DUP!)
        64 bytes de fe80::cccc:cccc:cccc:cccc: icmp_seq=7 ttl=64 time=0,640 ms (DUP!)
        64 bytes de fe80::dddd:dddd:dddd:dddd: icmp_seq=7 ttl=64 time=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/média/máx/mdev = 0,018/30,086/237,386/72,776 ms

Responder1

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

TentarNDPMon. Seu objetivo é acompanhar os eventos de descoberta de vizinhos. Ele pode registrar quando um endereço IPv6 aparece pela primeira vez, quando seu endereço MAC muda, etc.

Responder2

Mesma ideia do Sander, ferramenta diferente (comando monitor do [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. As tabelas vizinhas e de rotas ficam obsoletas rapidamente por um motivo, isso não significa que os saltos desapareceram. É apenas uma maneira conveniente de permitir que nós apareçam e desapareçam a qualquer momento, sem mais mensagens de entrada/saída.

Dizendo isso, você deve ver como funciona o multicast em geral, pelo menos em alguns switches Cisco (aqueles com descoberta de ouvinte multicast, MLD) você pode acessar as tabelas multicast diretamente, então sua pergunta é reformulada como: quem se juntou ao ff0x::1grupo.

Teoricamente, o kernel do Linux também contém essas informações, 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 conheço nenhuma maneira de listar explicitamente os participantes.

informação relacionada