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 :

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.
Comment utiliser correctement bind() dans ce cas la pour sniffer les paquets venant sur mon interface eth1 ? comment connaitre l'index de mon interface ??

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;
}