Как отфильтровать выходные данные многоадресной рассылки ping6 по всем узлам, чтобы получить все доступные устройства IPv6 в один момент времени?

Как отфильтровать выходные данные многоадресной рассылки ping6 по всем узлам, чтобы получить все доступные устройства IPv6 в один момент времени?

Как отфильтровать выходные данные многоадресного пинга для всех узлов, чтобы в выходном файле каждый IP-адрес появлялся только один раз?

  1. Если к сети присоединяется новое устройство, оно записывается в файл с меткой времени присоединения.
  2. Если устройство покидает Сеть, оно удаляется из этого файла.
  3. В конце выходной файл покажет мне текущие доступные устройства в сети с меткой времени присоединения.
     ping6 -I eth1 ip6-allnodes
        PING ip6-allnodes(ip6-allnodes) от fe80::aaaa:aaaa:aaaa:aaaa eth1: 56 байт данных
        64 байта от fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=1 ttl=64 время=0,018 мс
        64 байта из fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=1 ttl=64 время=0,490 мс (DUP!)
        64 байта из fe80::cccc:cccc:cccc:cccc: icmp_seq=1 ttl=64 время=0,739 мс (DUP!)
        64 байта от fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=2 ttl=64 время=0,037 мс
        64 байта из fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=2 ttl=64 время=0,513 мс (DUP!)
        64 байта из fe80::cccc:cccc:cccc:cccc: icmp_seq=2 ttl=64 время=0,674 мс (DUP!)
        64 байта от fe80::dddd:dddd:dddd:dddd: icmp_seq=2 ttl=64 время=228 мс (DUP!)
        64 байта от fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=3 ttl=64 время=0,033 мс
        64 байта из fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=3 ttl=64 время=0,460 мс (DUP!)
        64 байта из fe80::cccc:cccc:cccc:cccc: icmp_seq=3 ttl=64 время=0,611 мс (DUP!)
        64 байта от fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=4 ttl=64 время=0,045 мс
        64 байта из fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=4 ttl=64 время=0,485 мс (DUP!)
        64 байта из fe80::cccc:cccc:cccc:cccc: icmp_seq=4 ttl=64 время=0,609 мс (DUP!)
        64 байта от fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=5 ttl=64 время=0,035 мс
        64 байта из fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=5 ttl=64 время=0,518 мс (DUP!)
        64 байта из fe80::cccc:cccc:cccc:cccc: icmp_seq=5 ttl=64 время=0,580 мс (DUP!)
        64 байта от fe80::eeee:eeee:eeee:eeee: icmp_seq=5 ttl=255 время=201 мс (DUP!)
        64 байта от fe80::dddd:dddd:dddd:dddd: icmp_seq=5 ttl=64 время=237 мс (DUP!)
        64 байта от fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=6 ttl=64 время=0,032 мс
        64 байта из fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=6 ttl=64 время=0,508 мс (DUP!)
        64 байта из fe80::cccc:cccc:cccc:cccc: icmp_seq=6 ttl=64 время=0,540 мс (DUP!)
        64 байта от fe80::aaaa:aaaa:aaaa:aaaa: icmp_seq=7 ttl=64 время=0,038 мс
        64 байта из fe80::bbbb:bbbb:bbbb:bbbb: icmp_seq=7 ttl=64 время=0,550 мс (DUP!)
        64 байта из fe80::cccc:cccc:cccc:cccc: icmp_seq=7 ttl=64 время=0,640 мс (DUP!)
        64 байта от fe80::dddd:dddd:dddd:dddd: icmp_seq=7 ttl=64 время=76,6 мс (DUP!)
        Статистика пинга ip6-allnodes ---
        7 пакетов передано, 7 получено, +18 дубликатов, 0% потерь пакетов, время 6020 мс
        rtt мин/средн/макс/мдев = 0,018/30,086/237,386/72,776 мс

решение1

Ping не является подходящим инструментом для этого. Каждое устройство отвечает только один раз, даже если у него несколько адресов. А наличие нескольких адресов — это нормально в IPv6.

ПытатьсяНДПМон. Его цель — отслеживать события обнаружения соседей. Он может регистрировать, когда впервые появляется адрес IPv6, когда изменяется его MAC-адрес и т. д.

решение2

Та же идея, что и у Сандера, другой инструмент (команда монитора [iproute2][1])

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

Однако, как получить все доступные маршрутизаторы и узлы в любой момент времени, это немного заморочено. Таблицы соседей и маршрутов устаревают довольно быстро по какой-то причине, это не значит, что переходы исчезли. Это просто удобный способ разрешить узлам появляться и исчезать в любое время без дальнейших сообщений о присоединении/выходе.

Говоря это, вам следует изучить, как в целом работает многоадресная рассылка. По крайней мере, на некоторых коммутаторах Cisco (с функцией обнаружения прослушивателей многоадресной рассылки, MLD) вы можете получить прямой доступ к таблицам многоадресной рассылки, поэтому ваш вопрос можно перефразировать так: кто присоединился к ff0x::1группе.

Теоретически, ядро ​​Linux также хранит эту информацию, как можно увидеть в:

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

к сожалению, я не знаю способа явно перечислить участников.

Связанный контент