Paket-Socket im Promiscuous-Modus, der nur lokalen Datenverkehr empfängt
Ich habe eine Steckdose mit erstelltsocket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))
, und ich habe es in den Promiscuous-Modus gesetzt mit:
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);
Das Problem ist, dass wenn ich aread()
Über den Socket werden nur Daten zurückgegeben, die von meinem Computer stammen oder auf ihn gelangen.
Wie kann ich es dazu bringen, alle Pakete im Netzwerk zu lesen und zu verarbeiten?
Wireshark zeigt alle Pakete gut an, daher weiß ich, dass es nicht mein Computer oder meine Netzwerkkarte ist.ifconfig
meldet, dass es istPROMISC
wenn es läuft.