присоединиться / покинуть группу многоадресной рассылки с помощью libpcap - PullRequest
1 голос
/ 27 октября 2010

Мне нужно получить многоадресный поток, но фильтровать входящие пакеты по MAC-адресу источника в CentOS 5.5. Я планирую использовать библиотеку libpcap. Можно ли присоединиться / покинуть группу многоадресной рассылки, используя libpcap? Если да, то как это сделать?

Спасибо

Ответы [ 2 ]

2 голосов
/ 28 октября 2010

1.Создание фиктивного гнезда: sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

2.Связать его: rc = bind(sd, (sockaddr*) &addr, sizeof(sockaddr_in));

3.Присоединиться к группе многоадресной рассылки:

ip_mreq mreq;
mreq.imr_interface.s_addr = htonl(InterfaceIp);
mreq.imr_multiaddr.s_addr = htonl(DestIp);
if (setsockopt(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0) {
  close(sd);
  // Error handle...
}

Неотправлять или получать пакеты, используя фиктивный сокет

4.open pcap, используя pcap_open_live()

Общая идея состоит в том, чтобы использовать обычный сокет, чтобы «сообщить» ядру отправлять пакет соединения IGMP и после использованияpcap для захвата пакетов.

2 голосов
/ 27 октября 2010

Конечно, просто создайте и отправьте соответствующие пакеты IGMP.

...