0

Mon problème est, quand j'écoute avec PF_PACKET, j'obtiens aussi les paquets que ma boîte envoie et ce qui n'est pas souhaitable.Comment lier un raw_socket à une interface spécifique dans l'espace noyau?

err_create = sock_create(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL), sock); 

Au lieu de ETH_P_ALL j'ai essayé ETH_P_IP, mais je ne reçois que des paquets envoyer à mon hôte. Donc, mon idée était de lier le socket à une interface. Avec 'sockaddr_ll' je peux définir l'ifindex. Mais je n'ai trouvé aucune fonction pour obtenir l'index de mon interface. Ioctl ne fonctionne pas dans l'espace noyau.

..

memset(&my_addr, 0, sizeof(struct sockaddr_ll)); 
my_addr.sll_family = PF_PACKET; 
my_addr.sll_protocol = htons(ETH_P_ALL); 
// my_addr.sll_ifindex = 2; //I tried different numbers.. but then I got no packets 

err_bind = sock->ops->bind(sock, (struct sockaddr_ll *)&my_addr, sizeof(my_addr)); 

Toute aide serait appréciée

Répondre

0

Je ne suis pas sûr de ce que vous essayez de faire, mais vous pouvez rechercher un périphérique réseau dans le noyau via dev_get_by_name(). Mais pourquoi essayez-vous d'attraper des paquets dans le noyau en premier lieu? C'est pour cela que libpcap est dans userspace.

Questions connexes