IP_ADD_MEMBERSHIP.
Напомним, что вам необходимо указать ядру, какие группы многоадресной рассылки вам интересны. Если ни один процесс не заинтересован в группе, пакеты, предназначенные для нее, которые поступают на хост, отбрасываются.
Если вы этого не сделаете, вы не увидите пакеты с tcpdump
.
Это зависит от вашей инфраструктуры многоадресной рассылки: например, у вас может быть много маршрутизаторов многоадресной рассылки и различные правила, установленные на ваших коммутаторах (делая подписки статическими или динамическими, или даже запрещенными на определенных портах / узлах).
Но, если вы хотите подписаться на группу многоадресной рассылки ... Просто подпишитесь. Отправьте пакет IGMP JOIN через некоторую инфраструктуру, в которой, очевидно, разрешено отслеживание IGMP. Вы можете сгенерировать пакет IGMP с помощью различных инструментов.
Сделав шаг на более высокий уровень, используйте iperf подписаться на любую группу многоадресной рассылки. Если ваша сетевая инфраструктура не слишком сложна, и если вы "разрешается" чтобы подписаться на любую группу многоадресной рассылки, используйте следующее:
iperf -s -u -B 239.100.100.100
Где 239.100.100.100 - адрес вашей группы многоадресной рассылки.
tcpdump, чтобы получить подробный отчет.
Обратите внимание, что я считаю, что iperf поддерживает только IGMP v1 и v2. Если вы хотите создать пакет IGMP v3 JOIN, как вы заявили, не должно быть слишком сложно написать программу. Но будет гораздо больше инструментов, которые, вероятно, будут делать то же самое.
На странице, на которую имеется ссылка в многоадресном HOWTO, ничего не говорится о tcpdump.
Tcpdump использует libpcap для захвата сетевых пакетов, а в Ethernet libpcap поддерживает оба:
беспорядочный режим, в котором сетевой адаптер доставляет хосту каждый пакет, который он видит, независимо от адреса назначения, а сетевой стек доставляет каждый пакет, передавая фильтр механизму захвата, и
режим без неразборчивых контактов, в котором сетевой адаптер доставляет узлу одноадресные, широковещательные и многоадресные пакеты, которые он настроен для доставки, а сетевой стек доставляет все те пакеты, которые передают фильтр захвата механизму захвата.
Tcpdump по умолчанию запрашивает неразборчивый режим; в этом режиме вы даже увидите, что одноадресные пакеты не отправляются на ваш хост (если вы не находитесь в коммутируемой сети или находитесь в коммутируемой сети, но подключены к «зеркальному» порту, который получает весь трафик).
Если вы передадите tcpdump, -p
флаг, он будет запрашивать неразборчивый режим, и в этом случае вы увидите только те пакеты, которые ваша машина «должна» получить; в этом случае, если ни один процесс не зарегистрировал интерес к определенной группе многоадресной рассылки, вы не увидите пакеты, отправленные на адрес многоадресной рассылки этой группы, но в этом случае это не ошибка, это особенность, поскольку ваша машина не Я ничего не делаю с этими пакетами.
Поэтому, если вы хотите видеть все пакеты (одноадресные пакеты на все хосты, многоадресные пакеты на все адреса многоадресной рассылки и широковещательные пакеты), запустите tcpdump (или Wireshark или что-то еще) в беспорядочном режиме и, если вы находитесь в коммутируемой сети, запустите на «зеркальном порте» или «SPAN-порту» или как там это называется поставщиком коммутатора (если он поддерживает «зеркальные порты»).
Видеть страница Wireshark Wiki о захвате пакетов Ethernet для множества деталей о беспорядочном режиме и коммутируемых сетях; информация на этой странице относится ко всем анализаторам пакетов, включая tcpdump, а не только к Wireshark.