IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

[Réseau] Socket - choisir son interface réseau


Sujet :

Réseau C

  1. #1
    Invité(e)
    Invité(e)
    Par défaut [Réseau] Socket - choisir son interface réseau
    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;
    }

  2. #2
    Membre éclairé
    Inscrit en
    Août 2005
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 89
    Par défaut
    Premier élément de réponse si jamais on te répond pas (je suis pas un pro du réseau) :

    bind() prend en paramètre une structure qui doit contenir une IP. Or il me semble que chaque interface a sa propre IP, donc je pense que c'est là que tu dois gérer.

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Résolu !

    Pour ceux que cela interesse, voici le bout de code qui va bien :

    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
    25
    26
    27
    28
    29
    struct sockaddr_ll ll;
     
        struct ifreq ifr;
    ....
    ....
    ....
        /* Retrieve Network Card identifier */
        memset(&ll, 0, sizeof(struct sockaddr_ll));
        memset(&ifr, 0, sizeof(struct ifreq));
     
        strncpy(ifr.ifr_name, argv[1], sizeof(ifr.ifr_name));
     
        sockdum = socket(AF_INET, SOCK_DGRAM, 0);
        if (sockdum < 0) {
            perror("sockdum()");
    		exit(errno);
        }
     
        ret = ioctl(sockdum, SIOCGIFINDEX, &ifr);
        printf("index %d <--> %s\n", ifr.ifr_ifindex, ifr.ifr_name);
        ll.sll_family = AF_PACKET;
        ll.sll_ifindex = ifr.ifr_ifindex;
        ll.sll_protocol = htons(ETH_P_ALL);
     
        if (bind(sock, (struct sockaddr *) &ll, sizeof(struct sockaddr_ll)) < 0) {
            perror("bind");
            exit(errno);
        }
        printf("binding pf_packet to %s interface.\n", ifr.ifr_name);

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/06/2010, 10h44
  2. Socket, définir l'interface réseau à utiliser
    Par psylox dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 08/12/2009, 11h12
  3. Sniffer Réseau - choisir son interface
    Par Invité(e) dans le forum Réseau
    Réponses: 3
    Dernier message: 03/03/2007, 23h27
  4. [Réseau]Comment définir son ordi comme proxy
    Par Janitrix dans le forum Hardware
    Réponses: 4
    Dernier message: 22/09/2006, 17h51
  5. [SQL SERVER] Interface réseau dédiée à chaque instance
    Par Damdew dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 24/05/2006, 18h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo