Как обнаружить многоадресные адреса в Java?
AFAIK, нет способа сделать это из Java (в настоящее время).
Проблема заключается в том, что многоадресная маршрутизация по существу управляется приемником. Это выглядит примерно так:
- Когда приложение инициирует многоадресную группу, оно использует один из протоколов PIM, чтобы выяснить, как маршрутизировать свои исходящие пакеты. Это приводит к созданию дерева распространения.
- Когда приложение присоединяется к многоадресной группе, локальный хост отправляет IGMP-запрос в сеть. Это происходит через коммутаторы в локальном домене маршрутизации.
- Если один из коммутаторов распознает группу, локальный хост добавляется в дерево рассылки для группы.
- Если IGMP запрашивает шлюз в Интернет без распознавания (и многоадресный IP-адрес не является частным), шлюз затем использует MBGP, чтобы попытаться найти группу.
- Если BGMP-запрос находит группу, шлюз присоединяется к дереву распространения.
Как видите, это работает без каких-либо централизованных полномочий. Действительно, если в вашем локальном домене маршрутизации в данный момент не используется данная группа многоадресной рассылки, в сети может не быть ее следа. Можно отслеживать трафик IGMP ... но он говорит только о группах, которые используются локально, а не обо всех доступных группах.
Для получения дополнительной информации, статья в Википедии о IP Multicast - хорошее место для начала.
Обычно большая часть многоадресной маршрутизации и связанных протоколов реализованы в сетевых коммутаторах. Тем не менее, существует программное обеспечение на основе Linux, которое поддерживает многоадресную маршрутизацию и так далее; см. http://troglobit.com/howto/multicast/. Вы можете использовать это для отслеживания IGMP ... хотя это имеет ограничения; см. выше.
Ваш код не выполняет многоадресное обнаружение адресов вообще. Скорее, он присоединяется к определенной группе и получает многоадресный трафик по IP-адресу.
AFAIK, вы не можете отслеживать "весь многоадресный трафик" из стандартной Java. Java не поддерживает беспорядочный режим. Тем не менее, это может быть возможно сделать с помощью библиотеки jpcap ... с оговоркой, что вы будете видеть только трафик, который попадает в сегмент вашей локальной сети.