У меня есть сокет, созданный с помощью 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 показывает все пакеты нормально, так что я знаю, что это не мой компьютер или сетевая карта. ifconfig
сообщает, что он PROMISC
во время работы.