7

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

4 ответа4

10

Вы можете сделать это с помощью команды 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
8

Можно использовать 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

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

smcroutectl join eth0 239.1.1.27
smcroutectl leave eth0 239.1.1.27
0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .