¿Cómo puedo filtrar la salida de un ping6 de multidifusión a todos los nodos para obtener todos los dispositivos IPv6 accesibles en un momento dado?

¿Cómo puedo filtrar la salida de un ping6 de multidifusión a todos los nodos para obtener todos los dispositivos IPv6 accesibles en un momento dado?

¿Cómo puedo filtrar la salida de un ping de multidifusión a todos los nodos para que en el archivo de salida cada IP aparezca solo una vez?

  1. Si un nuevo dispositivo se une a la red, se escribe en un archivo con una marca de tiempo de unión.
  2. Si un dispositivo sale de la red, se elimina de ese archivo.
  3. Al final, el archivo de salida me muestra los dispositivos accesibles actualmente en la red con la marca de tiempo de unión.
     ping6 -I eth1 ip6-todos los nodos
        PING ip6-allnodes(ip6-allnodes) de fe80::aaaa:aaaa:aaaa:aaaa eth1: 56 bytes de datos
        64 bytes de fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=1 ttl=64 tiempo=0,018 ms
        64 bytes de fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=1 ttl=64 tiempo=0,490 ms (¡DUP!)
        64 bytes de fe80::cccc:cccc:cccc:cccc: icmp_seq=1 ttl=64 tiempo=0,739 ms (¡DUP!)
        64 bytes de fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=2 ttl=64 tiempo=0,037 ms
        64 bytes de fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=2 ttl=64 tiempo=0,513 ms (¡DUP!)
        64 bytes de fe80::cccc:cccc:cccc:cccc: icmp_seq=2 ttl=64 tiempo=0,674 ms (¡DUP!)
        64 bytes de fe80::dddd:dddd:dddd:dddd: icmp_seq=2 ttl=64 tiempo=228 ms (¡DUP!)
        64 bytes de fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=3 ttl=64 tiempo=0,033 ms
        64 bytes de fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=3 ttl=64 tiempo=0,460 ms (¡DUP!)
        64 bytes de fe80::cccc:cccc:cccc:cccc: icmp_seq=3 ttl=64 tiempo=0,611 ms (¡DUP!)
        64 bytes de fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=4 ttl=64 tiempo=0,045 ms
        64 bytes de fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=4 ttl=64 tiempo=0,485 ms (¡DUP!)
        64 bytes de fe80::cccc:cccc:cccc:cccc: icmp_seq=4 ttl=64 tiempo=0,609 ms (¡DUP!)
        64 bytes de fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=5 ttl=64 tiempo=0,035 ms
        64 bytes de fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=5 ttl=64 tiempo=0,518 ms (¡DUP!)
        64 bytes de fe80::cccc:cccc:cccc:cccc: icmp_seq=5 ttl=64 tiempo=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 tiempo=0,032 ms
        64 bytes de fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=6 ttl=64 tiempo=0,508 ms (¡DUP!)
        64 bytes de fe80::cccc:cccc:cccc:cccc: icmp_seq=6 ttl=64 tiempo=0,540 ms (¡DUP!)
        64 bytes de fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=7 ttl=64 tiempo=0,038 ms
        64 bytes de fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=7 ttl=64 tiempo=0,550 ms (¡DUP!)
        64 bytes de fe80::cccc:cccc:cccc:cccc: icmp_seq=7 ttl=64 tiempo=0,640 ms (¡DUP!)
        64 bytes de fe80::dddd:dddd:dddd:dddd: icmp_seq=7 ttl=64 tiempo=76,6 ms (¡DUP!)
        Estadísticas de ping de ip6-allnodes ---
        7 paquetes transmitidos, 7 recibidos, +18 duplicados, 0% pérdida de paquetes, tiempo 6020ms
        rtt mín/promedio/máx/mdesv = 0,018/30,086/237,386/72,776 ms

Respuesta1

Ping no es la herramienta adecuada para esto. Cada dispositivo sólo responde una vez, incluso si tiene varias direcciones. Y tener varias direcciones es normal en IPv6.

IntentarNDPMon. Su propósito es realizar un seguimiento de los eventos de descubrimiento de vecinos. Puede registrar cuando aparece por primera vez una dirección IPv6, cuando cambia su dirección MAC, etc.

Respuesta2

Misma idea que Sander, herramienta diferente (comando de monitorización de [iproute2][1])

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

Sin embargo, cómo conseguir todos los enrutadores y nodos accesibles al mismo tiempo es un poco complicado. Las tablas de vecinos y de ruta se vuelven obsoletas con bastante rapidez por una razón, pero eso no significa que los saltos hayan desaparecido. Es simplemente una manera conveniente de permitir que los nodos aparezcan y desaparezcan en cualquier momento sin más mensajes para unirse o salir.

Dicho esto, debería analizar cómo funciona la multidifusión en general, al menos en algunos conmutadores Cisco (los que tienen descubrimiento de escucha de multidifusión, MLD) puede acceder a las tablas de multidifusión directamente, por lo que su pregunta se reformula como: quién se unió al ff0x::1grupo.

En teoría, el kernel de Linux también contiene esta información, como se puede ver en:

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

Desafortunadamente, no conozco ninguna forma de enumerar explícitamente a los que se unen.

información relacionada