使用libpcap加入/离开多播组

时间:2010-10-27 11:29:49

标签: linux networking network-programming multicast libpcap

我需要接收组播流,但是在CentOS 5.5上按源MAC地址过滤传入的数据包。 我打算使用libpcap库。 是否可以使用libpcap加入/离开多播组? 如果是的话,怎么做?

由于

2 个答案:

答案 0 :(得分:2)

当然,只需构造并发送适当的IGMP数据包。

答案 1 :(得分:2)

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.使用pcap_open_live()

打开pcap

一般的想法是使用常规套接字以“告诉”内核发送IGMP加入数据包,并在使用pcap后才能捕获数据包。