J'ai un socket créé avec socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))
, et je l'ai mis en mode promiscuous utilisant:Prise de paquets en mode promiscuous recevant uniquement le trafic local
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);
Le problème est que quand je fais un read()
de la prise , il ne renvoie que les données qui proviennent ou qui arrivent sur mon ordinateur.
Comment puis-je l'obtenir pour lire et traiter tous les paquets sur le réseau? Wireshark montre tous les paquets bien, donc je sais que ce n'est pas mon ordinateur ou NIC. ifconfig
signale que c'est PROMISC
lorsqu'il est en cours d'exécution. Essayez d'utiliser SOCK_PACKET comme second argument de socket(), plutôt que SOCK_RAW.
Wireshark montre les paquets bien, tout comme tcpdump. – computergeek6
Oui, mais le socket ne recevra toujours pas d'autre trafic. – computergeek6
J'ai réussi à le réparer de mon côté, et c'était la réponse la plus utile. Merci! – computergeek6