Linux BSD Socket编程实现以太帧的捕获与分析(2)

要使建立的套接口能够真正监听到同一网段其他站点在网上传输的数据帧,还必须使用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);

}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwfxfy.html