Wie kann ich die Ausgabe eines Multicast-Ping6 an alle Knoten filtern, um alle erreichbaren IPv6-Geräte gleichzeitig zu erreichen?

Wie kann ich die Ausgabe eines Multicast-Ping6 an alle Knoten filtern, um alle erreichbaren IPv6-Geräte gleichzeitig zu erreichen?

Wie kann ich die Ausgabe eines Multicast-Pings an alle Knoten filtern, sodass in der Ausgabedatei jede IP nur einmal erscheint?

  1. Wenn ein neues Gerät dem Netzwerk beitritt, wird dies in eine Datei mit einem Beitrittszeitstempel geschrieben.
  2. Wenn ein Gerät das Netzwerk verlässt, wird es aus dieser Datei entfernt.
  3. Am Ende zeigt mir die Ausgabedatei die aktuell erreichbaren Geräte im Netzwerk mit dem Beitrittszeitstempel
     ping6 -I eth1 ip6-alle Knoten
        PING ip6-allnodes(ip6-allnodes) von fe80::aaaa:aaaa:aaaa:aaaa eth1: 56 Datenbytes
        64 Bytes von fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=1 ttl=64 Zeit=0,018 ms
        64 Bytes von fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=1 ttl=64 Zeit=0,490 ms (DUP!)
        64 Bytes von fe80::cccc:cccc:cccc:cccc: icmp_seq=1 ttl=64 Zeit=0,739 ms (DUP!)
        64 Bytes von fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=2 ttl=64 Zeit=0,037 ms
        64 Bytes von fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=2 ttl=64 Zeit=0,513 ms (DUP!)
        64 Bytes von fe80::cccc:cccc:cccc:cccc: icmp_seq=2 ttl=64 Zeit=0,674 ms (DUP!)
        64 Bytes von fe80::dddd:dddd:dddd:dddd: icmp_seq=2 ttl=64 Zeit=228 ms (DUP!)
        64 Bytes von fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=3 ttl=64 Zeit=0,033 ms
        64 Bytes von fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=3 ttl=64 Zeit=0,460 ms (DUP!)
        64 Bytes von fe80::cccc:cccc:cccc:cccc: icmp_seq=3 ttl=64 Zeit=0,611 ms (DUP!)
        64 Bytes von fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=4 ttl=64 Zeit=0,045 ms
        64 Bytes von fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=4 ttl=64 Zeit=0,485 ms (DUP!)
        64 Bytes von fe80::cccc:cccc:cccc:cccc: icmp_seq=4 ttl=64 Zeit=0,609 ms (DUP!)
        64 Bytes von fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=5 ttl=64 Zeit=0,035 ms
        64 Bytes von fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=5 ttl=64 Zeit=0,518 ms (DUP!)
        64 Bytes von fe80::cccc:cccc:cccc:cccc: icmp_seq=5 ttl=64 Zeit=0,580 ms (DUP!)
        64 Bytes von fe80::eeee:eeee:eeee:eeee: icmp_seq=5 ttl=255 Zeit=201 ms (DUP!)
        64 Bytes von fe80::dddd:dddd:dddd:dddd: icmp_seq=5 ttl=64 Zeit=237 ms (DUP!)
        64 Bytes von fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=6 ttl=64 Zeit=0,032 ms
        64 Bytes von fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=6 ttl=64 Zeit=0,508 ms (DUP!)
        64 Bytes von fe80::cccc:cccc:cccc:cccc: icmp_seq=6 ttl=64 Zeit=0,540 ms (DUP!)
        64 Bytes von fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=7 ttl=64 Zeit=0,038 ms
        64 Bytes von fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=7 ttl=64 Zeit=0,550 ms (DUP!)
        64 Bytes von fe80::cccc:cccc:cccc:cccc: icmp_seq=7 ttl=64 Zeit=0,640 ms (DUP!)
        64 Bytes von fe80::dddd:dddd:dddd:dddd: icmp_seq=7 ttl=64 Zeit=76,6 ms (DUP!)
        ip6-allnodes Ping-Statistiken ---
        7 Pakete gesendet, 7 empfangen, +18 Duplikate, 0 % Paketverlust, Zeit 6020 ms
        RTT min./avg./max./mdev = 0,018/30,086/237,386/72,776 ms

Antwort1

Ping ist hierfür nicht das richtige Tool. Jedes Gerät antwortet nur einmal, auch wenn es mehrere Adressen hat. Und mehrere Adressen sind bei IPv6 normal.

VersuchenNDPMon. Sein Zweck besteht darin, Nachbarerkennungsereignisse zu verfolgen. Es kann protokollieren, wann eine IPv6-Adresse zum ersten Mal erscheint, wann sich ihre MAC-Adresse ändert usw.

Antwort2

Dieselbe Idee wie Sander, anderes Tool (Monitor-Befehl von [iproute2][1])

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

Wie man alle erreichbaren Router und Knoten gleichzeitig erreicht, ist allerdings ein bisschen knifflig. Die Nachbar- und Routentabellen veralten aus einem bestimmten Grund recht schnell, das heißt aber nicht, dass die Hops verschwunden sind. Es ist nur eine praktische Möglichkeit, Knoten jederzeit erscheinen und verschwinden zu lassen, ohne dass weitere Join/Leave-Nachrichten eingehen.

Davon abgesehen sollten Sie sich ansehen, wie Multicast im Allgemeinen funktioniert. Zumindest auf einigen Cisco-Switches (die mit Multicast Listener Discovery, MLD) können Sie direkt auf die Multicast-Tabellen zugreifen. Ihre Frage lässt sich daher wie folgt umformulieren: Wer ist der ff0x::1Gruppe beigetreten?

Theoretisch verfügt der Linux-Kernel auch über diese Informationen, wie man hier sehen kann:

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

leider ist mir keine Möglichkeit bekannt, die Mitwirkenden explizit aufzulisten.

verwandte Informationen