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

C Discussion :

Programmation d'un Sniffer en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Par défaut Programmation d'un Sniffer en C
    Bonjour, je suis encore novice en programmation en C et je souhaite créer un sniffer en C. J'ai récupéré le code source d'un sniffer très simple qui utilise la fonction pcap_next pour afficher la taille des paquets capturer. Je voudrais remplacer cette fonction par une fonction de type pcap_loop faisant appel à une fonction de callback appelée got_packet. Cette focntion à pour but également d'afficher la taille du paquet capturé mais aussi d'associer la taille des paquets (ce sont des paquets de taille spécifique) à des lettre avec je pense un switch case.

    Je bloque sur la focntion void got_packet (u_char *args, const struct pcap_pkthdr *header, const u_char *packet) en fait j'arrive pas à faire afficher la taille du paquet capturer avec cette fonction.

    Pourriez vous m'aider ??

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Ces fonctions me sont inconnues. N'hésites pas à poser des questions précises et à poster les morceaux de code qui te posent problème..

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Aenarion3
    Bonjour, je suis encore novice en programmation en C et je souhaite créer un sniffer en C.
    Il peut être instructif de réinventer la roue, mais je rappelle l'existence de l'excellent et gratuit Ethereal

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Par défaut
    Je connais ethereal mais il ne se prête pas à ce que je veux faire.
    En fait but précis est d'envoyer dans un canal chiffré IPSec des trames ICMP dont la taille varie en focntion de la lettre taper au clavier. En gros quand j'appuie sur une lettre ça encoie une trame ICMP chiffrée en ESP d'une taille spécifique pour la lettre.
    Mon sniffeur est censé écouter le traffic et lorsqu'il tombe sur une trame ESP avec une longueur spécifique il m'affiche la lettre.

    J'ai réussi à afficher la longueur grâce à la libraire pcap.h et à une fonction :
    void print_length (const u_char *packet)
    {
    int pkt_size;
    struct pcap_pkthdr header; //structure contenue dans pcap.h
    pkt_size = header.len;
    printf("Taille totale: %i\n", pkt_size);
    }

    Cette fonction est appelé par ma fonction de callback
    void got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet)
    {
    static int count = 1;
    printf("Paquet numero %i\n", count);
    print_length (packet); //affiche la longueur du paquet actuellement sniffer
    count ++;
    }

    Dans le main j'y fait appel par:
    pcap_loop (handle, num_packet, got_packet, NULL)
    le prototype de cette fonction se trouve également dans pcap.h

    Mon problème est que lorsqu'un paquet est reçu sa taille n'est afficher que lorsque le paquet suivant arrive ce qui provoque un décalage de 1 paquet à chaque fois et je ne vois pas d'ou vient le problème.

    Je suis désolé je ne peut pas vous poster le code source entier maintenant je ne dispose que d'un ordinateur sur internet avec accès restreint et interdit en lecture donc impossible d'ouvrir même un fichier text .
    J'essaierais de vous le poster ce soir de chez moi pour que ce que je dis soit plus clair .

  5. #5
    Membre très actif Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Compil your life guy!
    The Aures Project

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Aenarion3
    En fait but précis est d'envoyer dans un canal chiffré IPSec des trames ICMP dont la taille varie en focntion de la lettre taper au clavier. En gros quand j'appuie sur une lettre ça encoie une trame ICMP chiffrée en ESP d'une taille spécifique pour la lettre.
    Mon sniffeur est censé écouter le traffic et lorsqu'il tombe sur une trame ESP avec une longueur spécifique il m'affiche la lettre.
    Est-ce bien légal tout ça ?

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Quand je regarde le code:

    void print_length (const u_char *packet)
    {
    int pkt_size;
    struct pcap_pkthdr header; //structure contenue dans pcap.h
    pkt_size = header.len;
    printf("Taille totale: %i\n", pkt_size);
    }
    je me demande ce que tu cherches à faire. Tu n'utilises pas le paramètre packet et au lieu de cela, tu affiches un champ de la structure non initialisée header. C'est censé faire quoi ?

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Par défaut
    Je développe ce programme dans le cadre de mon stage de fin d'étude afin de tester la sécurité IPSec dans l'entreprise dans laquelle je suis et voir la fiabilité de différents algorithme de chiffrement.
    Ceci est donc tout à fait légal.

    Quand je regarde le code:


    Citation:
    void print_length (const u_char *packet)
    {
    int pkt_size;
    struct pcap_pkthdr header; //structure contenue dans pcap.h
    pkt_size = header.len;
    printf("Taille totale: %i\n", pkt_size);
    }



    je me demande ce que tu cherches à faire. Tu n'utilises pas le paramètre packet et au lieu de cela, tu affiches un champ de la structure non initialisée header. C'est censé faire quoi ?
    Cette fonction à pour but de renvoyer la taille du paquet actuellement sniffer.
    const u_char * packet est le paquet en cours de capture qui sera passer en paramètre.
    pcap_pkthdr header est la structure de l'entête de ce paquet qui contient la variable len contenant la taille totale de la trame en octets.

    Pour mon problème de décalage je pense que ça viens de la façon dont j'ai défini la boucle de "sniffage" (got_packet et pcap_loop) mais j'arrive pas à trouver comment y remédier.

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 168
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Il peut être instructif de réinventer la roue, mais je rappelle l'existence de l'excellent et gratuit Ethereal
    Bonjour,

    +1

    turbo_chess

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Par défaut
    Maintenant que mon problème est résolu, je voudrais rajouter un test de validation de paquet qui regarde si 5 paquet reçu à la suite sont identiques (même longueur) et dans ce cas on peut afficher la lettre correspondante.
    Je vois pas trop comment faire. Pourriez-vous m'aider ???

    PS: j'ai éditer le source de mon programme avec les modifs apportées.

Discussions similaires

  1. Programme sniffer en c
    Par f9o0S dans le forum Réseau
    Réponses: 0
    Dernier message: 18/11/2011, 19h40
  2. Réponses: 8
    Dernier message: 26/04/2010, 15h55
  3. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  4. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

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