Встроенная в Linux или открытая программа для присоединения к группе многоадресной рассылки?

Я использую tcpdump для захвата многоадресных пакетов и мне пришлось кодировать пользовательскую программу для присоединения к многоадресным каналам, чтобы tcpdump "видел" пакеты. Просто интересно, может ли netcat или любое другое приложение выполнять эту функцию?

7 ответов

Решение

Вы можете сделать это с помощью ip maddr add команда.


СИНТАКСИС

ip maddr [ add | del ] MULTIADDR dev STRING 

ОПИСАНИЕ

Он присоединяет / отсоединяет многоадресный адрес статического канального уровня для прослушивания интерфейса. Обратите внимание, что невозможно статически присоединиться к группам многоадресного протокола. Эта команда управляет только адресами канального уровня.

address LLADDRESS (default)
    the link layer multicast address. 
dev NAME
    the device to join/leave this multicast address. 

ПРИМЕРЫ

Пример для проводного соединения:

ip maddr add ff02::fb dev eth0

Пример для беспроводного соединения:

ip maddr add 224.0.0.251 dev wlan0

Можно использовать socat, чтобы подписаться на группы. Это хорошо работает для подписки L2 и L3:

socat STDIO  UDP4-DATAGRAM:239.101.1.68:8889,\
  ip-add-membership=239.0.1.68:10.100.201.1

Это подпишется на группу 239.0.1.68 используя интерфейс с адресом 10.100.201.1, UDP4-DATAGRAM:239.101.1.68:8889 bit прослушивает пакеты в фиктивной группе и порте udp, которые не должны получать никаких данных, чтобы не допустить, что socat также выводит все данные на стандартный вывод. Если вместо этого вы хотите направить полезную нагрузку на стандартный вывод, измените эту группу и порт на фактическую группу и порт, на который вы хотите подписаться.

Несколько через запятую ip-add-membership Директивы могут быть указаны для подписки на несколько групп одновременно. При выходе из socat, похоже, также удаляются подписки IGMP.

В дополнение к socat Ответ, вот решение в тяжелом весе - smcroute. Это приложение работает как демон и может управляться на лету:

smcroutectl join eth0 239.1.1.27
smcroutectl leave eth0 239.1.1.27

В pimd FRR вы можете сделать:

      interface vlan2000
 ip address A.B.C.D/24
 ip igmp
 ip igmp join 239.0.110.219
 ip igmp join 239.0.110.220
 ip igmp version 2

Используйте часть "Receive" в https://stackoverflow.com/questions/603852/multicast-in-python, опустите определение MCAST_PORT и строку "sock.bind ..." и замените последнюю строку (печать...) с пропуском. Это дает вам программу, аналогичную примеру SOCAT, без чтения фиктивного порта.

Для будущих посетителей этой темы

Почему бы не использоватьip addr add ... autojoin? Для меня работает следующее, чтобы присоединиться к группе многоадресной рассылки ipv4 или ipv6:

      desktop:~ $ sudo ip addr add ff05:feed:dead:beef:feed:dead:beef:beef dev enp4s0 autojoin
desktop:~ $ # or for ipv4: sudo ip addr add 239.42.42.42/32 dev enp4s0 autojoin
desktop:~ $ # optional check that the address is added:
desktop:~ $ ip addr show
desktop:~ $ # to start listening:
desktop:~ $ netcat -6 -l -k -u -p 9000

На отправителе (для ipv6)

      pi@blueberry:~ $ echo "Hello multicast" | netcat -w 0 -u ff05:feed:dead:beef:feed:dead:beef:beef 9000

Для этого вы можете использовать omping.

Пример: Чтобы проверить многоадресный трафик между 3 хостами - выполните одну и ту же командную строку на каждом хосте:

omping example.org example.com example.net

Omping по умолчанию использует 192.168.178.79, но вы можете указать ему использовать любой другой многоадресный адрес.

Если вы отслеживаете трафик IGMP, вы видите отчет (присоединитесь) и оставляете сообщения.

В отличие от socat omping также поддерживает IPv6, если вы хотите протестировать MLD вместо IGMP.

Другие вопросы по тегам