TL; DR - Выберите один:
sudo ip addr add 233.54.12.234/32 dev eth1 autojoin
socat STDIO UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1 > /dev/null
Сначала я собирался сказать «просто используйте ip maddress addи покончите с этим». Проблема ip maddressкасается только групповых адресов канального уровня, а не протокольных групповых адресов ( man 8 ip-maddress).
Это сказанное использование autojoinфлага с адресным глаголом делает трюк просто приятно.
Это поднимает некоторые последующие вопросы, хотя. Я предполагаю, что так как вы будете работать tcpdumpили tsharkу вас есть права root. В случае, если у вас нет номера 22001, порт с высоким номером, и другие утилиты, как socat, также сделают это.
Не верьте мне на слово, хотя. Просто чтобы проверить это, мы можем сгенерировать многоадресные UDP-пакеты с помощью socatили ncat(обычно упакованные через nmap/ nmap-ncat).
На некотором количестве хостов запустите одну из следующих двух комбинаций:
Опция 1:
sudo ip addr add 233.54.12.234/32 dev eth1 autojoin
Вариант 2:
socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1 /dev/null &
Первый вариант потребует либо root, либо, по крайней мере, возможность CAP_NET_ADMIN . Второй вариант не требует root, но также предполагает запуск на переднем плане и, следовательно, может быть менее благоприятным для сценариев (хотя отслеживание идентификатора дочернего процесса и очистка его с помощью trapBASH может быть именно тем, что вам нужно.
Как только это будет сделано (но прежде чем идти орехи тестирования нашего tcpdump/ tsharkкоманды) , убедитесь , что ядро распознает интерфейс, вступив в соответствующую группу IGMP. Если вы чувствуете себя супер фантазией, вы можете сходить с ума, разбирая гекс /proc/net/igmp, но я бы посоветовал просто бежать netstat -gn.
Убедившись, что вы видите интерфейс, подписанный на правильную группу, запустите команду tcpdump:
tcpdump -nnXs 0 -i eth1 udp port 22001 and dst 233.54.12.234
В качестве альтернативы, если вы не хотите полностью идти по пути tcpdump (или наткнулись на этот ответ, и вам просто интересно увидеть многоадресную рассылку в действии), вы можете использовать socatкоманду выше, чтобы присоединиться и повторить содержимое STDOUT, заменив /dev/nullна STDOUT:
socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1
Затем с другого компьютера используйте одну из следующих двух опций для отправки простых тестовых данных:
Опция 1:
socat STDIO UDP-DATAGRAM:233.54.12.234:22001
Вариант 2:
ncat -u 233.54.12.234 22001
Когда вы запустите любую из этих команд, она будет интерактивно ожидать ввода. Просто введите некоторые вещи, нажмите Enter, чтобы отправить, а затем, CTRL+Dкогда вы закончите, чтобы отправить EOFсообщение.
К этому моменту вы должны были увидеть тест до конца и с помощью нескольких команд создать худшую, самую небезопасную систему чата в мире.
-pфлаг, в стандартных версиях ТСРйитра, получается смешанным режим выключен , так как это по умолчанию. В смешанном режиме он должен видеть весь трафик, включая многоадресный трафик, независимо от того, установлена ли у вас подписка - если вы не находитесь в коммутируемой сети и необходимо, чтобы подписка была установлена, чтобы коммутатор перенаправлял вам трафик.