У меня есть сокет, созданный с socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))
, и я поставил его в неразборчивый режим с помощью:Packet гнездо в беспорядочном режиме только приема локального трафика
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
.
Wireshark показывает пакеты в порядке, также как и tcpdump. – computergeek6
Это так, но сокет по-прежнему не получит другого трафика. – computergeek6
Мне удалось исправить это на моем конце, и это был самый полезный ответ. Благодаря! – computergeek6