【发布时间】:2016-05-18 08:47:12
【问题描述】:
我想编写一个应用程序,它应该接收所有传入的数据包,无论数据包是发往我的机器并假设是转发还是发往本地主机。
为此,我打开了一个AF_PACKET 套接字。但是,由于我的机器有多个接口,我如何将套接字绑定到多个接口以捕获来自任何接口的所有传入数据包。
以下代码段仅将我的套接字绑定到一个接口。如何修改它以绑定所有接口。另外,我如何绑定一些接口,我可以在同一个套接字上多次调用bind来绑定不同的接口吗?
strncpy ((char *) ifr.ifr_name, interface, IFNAMSIZ);
ioctl (sock, SIOCGIFINDEX, &ifr);
sll.sll_family = AF_PACKET;
sll.sll_ifindex = ifr.ifr_ifindex;
sll.sll_protocol = htons (ETH_P_IP);
if(bind ( sock, (struct sockaddr *) &sll, sizeof (sll) ) )
{
perror("Bind");
exit(1);
}
//len = recvfrom(sock, rec_buff, 5000,0,(struct sockaddr *)&client_addr, &addr_len);
len = read(sock, rec_buff, 5000);
【问题讨论】: