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

29268
chriskirk

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

7

4 ответа на вопрос

10
grawity

Вы можете сделать это с помощью 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 
Запуск этого в окне Ubuntu 14.04 приводит к следующему сообщению об ошибке: `" ff02 "является недействительным lladdr. Ошибка: "ff02" не является юридическим адресом. Nathan Osman 9 лет назад 0
После дополнительного копания выясняется, что `ip maddr` работает только с многоадресными адресами _link-layer_, а не с многоадресными адресами _protocol-layer_. Nathan Osman 9 лет назад 3
@ NathanOsman - Вы когда-нибудь находили способ подписаться на многоадресные адреса уровня протокола? kit 7 лет назад 0
К сожалению, этот ответ не отвечает на вопрос, поскольку он работает только для ** канального уровня **, т. Е. MAC-адресов. Пример IPv6 завершается неудачно, как упомянуто в 1-м комментарии, а пример IPv4 завершается неудачно, но тихо (то есть группа не присоединяется и не перечисляется в `ip maddr show`) Pierz 6 лет назад 0
8
NeilenMarais

Можно использовать 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Немного прослушивает пакеты на фиктивную группу и UDP - порт, который не должен получать какие - либо данные, чтобы предотвратить SOCAT от вывода также все на стандартный вывод. Если вместо этого вы хотите направить полезную нагрузку на стандартный вывод, измените эту группу и порт на фактическую группу и порт, на который вы хотите подписаться.

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

0
SergA

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

smcroutectl join eth0 239.1.1.27 smcroutectl leave eth0 239.1.1.27 
0
Siegfried

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

Похожие вопросы