Чтобы найти что-то конкретное в командах на справочной странице, вы можете использовать:
man echo | grep output.
А вот для поиска переключателей (например-n
)надо использовать вот так:
man echo | grep -- -n
TL;DR :запустите ip link set dev eth0 allmulticast on
для решения вашей проблемы (адаптируйте имя карты ). Правильное исправление может означать модификацию вашего приложения, чтобы оно поддерживало -многоадресную рассылку и присоединялось к (IPv4 )группам многоадресной рассылки, в которых оно заинтересовано.
tcpdump
переводит интерфейс в неразборчивый режим , если не указано иное (-p
), что означает, что он будет передавать в систему любой увиденный кадр Ethernet, даже если он не был отправлен специально на MAC-адрес карты (). Вы можете убедиться, что использование tcpdump
с дополнительной опцией -p
больше не заставит вашу установку работать.
Исходя из этого, это означает, что вашему интерфейсу никогда не говорили прослушивать многоадресный трафик, и он будет получать только одноадресные кадры Ethernet с собственным MAC-адресом в качестве адреса назначения (, а также широковещательные кадры ). Обычно ваше приложение должно использовать параметры сокета для присоединения к многоадресным группам IPv4, как в этом примере, взятом из strace :
.setsockopt(5, SOL_IP, IP_ADD_MEMBERSHIP, {imr_multiaddr=inet_addr("239.255.1.5"), imr_interface=inet_addr("192.0.2.2")}, 12) = 0
... который, помимо прочего, зарегистрирует дополнительный хэш IP-адреса, отображаемый в формате Ethernet MAC , в специальную таблицу MAC-адресов многоадресной рассылки карты. Многоадресные кадры Ethernet легко распознаются картой :, у них младший бит первого байта MAC-адреса назначения установлен в 1, что оказывается самым первым битом MAC-адреса назначения , передаваемым по провод.
Если вы заранее знаете все используемые (IPv4 )группы многоадресной рассылки и их количество ограничено, вы можете самостоятельно вычислить полученные MAC-адреса многоадресной сети Ethernet , а затем добавить их непосредственно в таблица многоадресной рассылки карты, используя что-то похожее на эту команду (хэш для 239.255.1.5):
ip maddress add dev eth0 01:00:5e:7f:01:05
Если вы не можете этого сделать, вы все равно можете настроить свою карту для прослушивания всего многоадресного трафика:
ip link set dev eth0 allmulticast on
Если позже будет вставлен коммутатор, выполняющий отслеживание IGMP , этого может быть недостаточно без надлежащего изменения приложения.
Вы можете использовать тест отsocat
до с многоадресной рассылкой .