【发布时间】:2010-11-22 11:03:56
【问题描述】:
我有一个使用socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)) 创建的套接字,我已使用以下方法将其设置为混杂模式:
struct ifreq ifr;
strncpy((char*)ifr.ifr_name, interface, IF_NAMESIZE);
if(ioctl(sock, SIOCGIFINDEX, &ifr)<0) fail(2);
struct packet_mreq mr;
memset(&mr, 0, sizeof(mr));
mr.mr_ifindex = ifr.ifr_ifindex;
mr.mr_type = PACKET_MR_PROMISC;
if(setsockopt(sock, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mr, sizeof(mr)) < 0) fail(2);
问题是当我从套接字执行read() 时,它只返回来自或来自我的计算机的数据。
如何让它读取和处理网络上的所有数据包?
Wireshark 可以正常显示所有数据包,所以我知道这不是我的计算机或 NIC。 ifconfig 报告它在运行时是 PROMISC。
【问题讨论】:
标签: c linux security raw-sockets promiscuous-mode