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, но также предполагает работу на переднем плане, поэтому может быть менее подходящим для сценариев (, хотя отслеживает идентификатор дочернего процесса и очищает его с помощьюtrap
в BASH может быть именно тем, что вы ищете.
Как только это будет сделано (, но перед тем, как мы приступим к тестированию нашей команды 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
.
На этом этапе вы должны были увидеть сквозное тестирование и с помощью нескольких команд построить самую худшую и самую небезопасную систему чата в мире.
Н.Б. Если вы хотите оставить группу многоадресной рассылки, присоединенную с помощьюip addr add...
(опции 1 ), вы можете сделать это:
sudo ip addr del 233.54.12.234/32 dev eth1 autojoin
Оказывается, использование rootfs, созданного с помощью LXC, не подходит для создания реальных установок. Вместо этого мы должны использовать multistrap
.
Инструкции по полному решению вышеуказанной проблемы доступны по адресу multistrap -helpers@2ada86fd . Если вы создаете rootfs с помощью multistrap, то инструкция install-to-disk
работает отлично. Эта проблема возникает, если вы создаете rootfs с lxc-create
.