要使建立的套接口能够真正监听到同一网段其他站点在网上传输的数据帧,还必须使用ioctl函数设置网卡工作于“混杂”模式,相应的Linux C程序段如下:
char *dev = “eth0”; //(char *)dev标识设备名,eth0表示系统中的第一块以太网卡
struct ifreq ifr;
strcpy(ifr.ifr_name, dev); //“eth0”写入ifr结构的一个字段中
i = ioctl (fd, SIOCGIFFLAGS, &ifr); // SIOCGIFFLAGS(0x8913)表示要求取出接口标
// 志位
if (i<0)
{
close(fd);
perror(“can’t get flags \n”);
exit(0);
}
ifr.ifr_flags |= IFF_PROMISC; //在标志位中加入“混杂”方式
i = ioctl(fd, SIOCSIFFLAGS, &ifr); // SIOCSIFFLAGS(0x8914)表示要求保存接口标
//志位
if (i<0)
{
perror(“can’t set promiscuous \n”);
exit(0);
}