Bonjour,
j'essaie d'écrire un sniffer réseau, en me basant sur la très bonne documentation disponible ici :
http://www.cgsecurity.org/Articles/sniffer/index.html
Cependant, cela fonctionne très bien sur mon interface réseau eth0. Je voudrais faire la meme chose, mais sur eth1.
D'après le man packet, je vois cela :
Comment utiliser correctement bind() dans ce cas la pour sniffer les paquets venant sur mon interface eth1 ? comment connaitre l'index de mon interface ??Par défaut, tous les paquets du type de protocole indiqué sont passés à la socket packet. Pour ne recevoir que les paquets d’une interface donnée utilisez bind(2) en indiquant une adresse dans une struct sockaddr_ll pour attacher la socket à une interface. Seuls les champs d’adresse sll_protocol et sll_ifindex sont utilisés pour l’attachement.
Merci,
doobs
PS : voici le code associé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 int main(int argc, char *argv[]) { int sock; /* Ouverture Socket */ sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); if (sock < 0) { perror("socket()"); exit(errno); } for(;;) { int n_read; char buffer[BUFFER_MAX]; struct sockaddr_ll from; socklen_t fromlen = sizeof(from); n_read = recvfrom(sock, buffer, BUFFER_MAX, 0, (struct sockaddr*)&from, &fromlen); /* Traitement de paquets */ } close(sock); return 0; }
Partager