Встроенная в Linux или открытая программа для присоединения к группе многоадресной рассылки?
29268
chriskirk
Я использую tcpdump для захвата многоадресных пакетов и мне пришлось кодировать пользовательскую программу для присоединения к многоадресным каналам, чтобы tcpdump «видел» пакеты. Просто интересно, может ли netcat или любое другое приложение выполнять эту функцию?
Вы можете сделать это с помощью 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:
Это подпишется на группу, 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 . Это приложение работает как демон и может управляться на лету:
Используйте часть «Receive» в https://stackoverflow.com/questions/603852/multicast-in-python, опустите определение MCAST_PORT и строку «sock.bind ...» и замените последнюю строку (печать. ..) с пропуском. Это дает вам программу, аналогичную примеру SOCAT, без чтения фиктивного порта.