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?
- Se um novo dispositivo ingressar na rede, ele será gravado em um arquivo com um carimbo de data/hora de adesão.
- Se um dispositivo sair da rede, ele será removido desse arquivo.
- 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::1
grupo.
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.