Обнаружение IGMP-сообщений в локальной сети
Я пытаюсь прослушать все сообщения IGMP в локальной сети (по сумасшедшим причинам не обсуждаемые;-)). У меня есть несколько вопросов, связанных с этим, так как я на самом деле не эксперт по IGMP/ маршрутизации.
Это вообще возможно? Я знаю, что могу читать IGMP из необработанного сокета, и я знаю, что вы можете использовать Wireshark для мониторинга сообщений IGMP, которые поступают на ваш локальный компьютер, но меня удивляет следующее:
Я использую программу на другом компьютере (отделенном от того, на котором запущен Wireshark с помощью коммутатора), который присоединяется к многоадресному адресу - НО - не всегда я даже вижу отчет о членстве /JOIN в Wireshark. Теперь кто-нибудь знает, гарантировано ли, что каждое соединение IGMP распространяется по всей локальной сети? Иногда я вижу соединение в Wireshark, иногда нет.
Предполагая, что все сообщения о присоединении IGMP всегда отправляются на каждую станцию в сети, не должно быть возможности отслеживать, какие станции являются членами каких групп многоадресной рассылки, что-то вроде этого (код posix socket C++):
int rawSock = ::socket(AF_INET, SOCK_RAW, IPPROTO_IGMP);
uint8_t buf[10*1024];
while(true)
{
ssize_t rval = ::recv(rawSock, buf, sizeof(buf), 0);
iphdr *iph = (iphdr*)buf;
printf("Received %d bytes - protocol %d\n", rval, iph->protocol);
/*do whatever needed to the IGMP message*/
}
1 ответ
Ваша проблема может заключаться в следующем... Каждый пакет IGMP должен иметь IP TTL=1, это означает, что IGMP никогда не будет пересекать маршрутизируемую границу (например, vlan).
Like ICMP, IGMP is a integral part of IP. It is required to be
implemented by all hosts wishing to receive IP multicasts. IGMP
messages are encapsulated in IP datagrams, with an IP protocol number
of 2. All IGMP messages described in this document are sent with IP
TTL 1, and contain the IP Router Alert option [RFC 2113] in their IP
header.
Это означает, что вы не можете быть нигде и видеть IGMP; Вы должны убедиться, что указанный выше IGMP-приемник находится в той же IP-подсети, что и отправитель. Вы также можете проверить, получает ли ваша машина IGMP с tshark
или же wireshark
...