Обнаружение IGMP-сообщений в локальной сети - PullRequest
0 голосов
/ 26 октября 2011

Я пытаюсь прослушать все сообщения 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 Ответ

1 голос
/ 26 октября 2011

Ваша проблема может заключаться в следующем ... Каждый пакет IGMP должен иметь IP TTL = 1, это означает, что IGMP никогда не пересечет маршрутизируемую границу (например, vlan).

From RFC 2236 - IGMP Version 2 :

   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 ...

...