2

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

谢谢

4

2 回答 2

2

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

于 2010-10-27T11:52:56.207 回答
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使用pcap_open_live()

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

于 2010-10-27T23:00:42.757 回答