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 :

Simulation de latence en utilisant les hooks


Sujet :

Réseau C

  1. #1
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Simulation de latence en utilisant les hooks
    Bonjour,

    J'ai comme sujet de PFE : « développement d'un outil de simulation de latence sur flots VOIP » donc ma prof me demande de faire un programme qui permet la simulation de latence. Utilisant les hooks. Et voila, elle m'a donné un programme pour m'aider mais j'ai rien compris :/

    Netfilter hook
    This example shows how to use hook to alter network traffic in the Linux kernel using Netfilter.
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #include <linux/module.h>
    #include <linux/kernel.h>
    #include <linux/skbuff.h>
     
    #include <linux/ip.h>
    #include <linux/tcp.h>
    #include <linux/in.h>
    #include <linux/netfilter.h>
    #include <linux/netfilter_ipv4.h>
     
    /* Port we want to drop packets on */
    static const uint16_t port = 25;
     
    /* This is the hook function itself */
    static unsigned int hook_func(unsigned int hooknum,
                           struct sk_buff **pskb,
                           const struct net_device *in,
                           const struct net_device *out,
                           int (*okfn)(struct sk_buff *))
    {
            struct iphdr *iph = ip_hdr(*pskb);
            struct tcphdr *tcph, tcpbuf;
     
            if (iph->protocol != IPPROTO_TCP)
                    return NF_ACCEPT;
     
            tcph = skb_header_pointer(*pskb, ip_hdrlen(*pskb), sizeof(*tcph), &tcpbuf);
            if (tcph == NULL)
                    return NF_ACCEPT;
     
            return (tcph->dest == port) ? NF_DROP : NF_ACCEPT;
    }
     
    /* Used to register our hook function */
    static struct nf_hook_ops nfho = {
            .hook     = hook_func,
            .hooknum  = NF_IP_PRE_ROUTING,
            .pf       = NFPROTO_IPV4,
            .priority = NF_IP_PRI_FIRST,
    };
     
    static __init int my_init(void)
    {
            return nf_register_hook(&nfho);
    }
     
    static __exit void my_exit(void)
    {
        nf_unregister_hook(&nfho);
    }
     
    module_init(my_init);
    module_exit(my_exit);
    et merci.

  2. #2
    Membre éclairé
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Points : 751
    Points
    751
    Par défaut
    Bonjour:

    1. ouvre un nouveau topic avec des questions precises. Ne deterre pas un vieux topic de 2 ans.
    2. Utilise la balise code pour mettre en forme le code que tu postes


    Citation Envoyé par channel Voir le message
    j'ai comme sujet de PFE "développement d'un outil de simulation de latence sur flots VOIP" donc ma prof me demande de faire un programme qui permet la simulation de latence .utilisant les hook. et voila elle m'as donné un prog pou m'aider mais j'ai rien compris :/
    Qu'est ce que tu n'as pas compris dans ce programme?
    De plus, je vois pas vraiment l'interet de developper un tel programme alors que tc permet de gerer la latence, perte de paquet, ... Ca semble plus approprie que de re-ecrire un module noyaux pour ca.

    Citation Envoyé par channel Voir le message
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #include <linux/module.h>
    #include <linux/kernel.h>
    #include <linux/skbuff.h>
     
    #include <linux/ip.h>
    #include <linux/tcp.h>
    #include <linux/in.h>
    #include <linux/netfilter.h>
    #include <linux/netfilter_ipv4.h>
     
    /* Port we want to drop packets on */
    static const uint16_t port = 25;
     
    /* This is the hook function itself */
    static unsigned int hook_func(unsigned int hooknum,
                           struct sk_buff **pskb,
                           const struct net_device *in,
                           const struct net_device *out,
                           int (*okfn)(struct sk_buff *))
    {
            struct iphdr *iph = ip_hdr(*pskb);
            struct tcphdr *tcph, tcpbuf;
     
            if (iph->protocol != IPPROTO_TCP)
                    return NF_ACCEPT;
     
            tcph = skb_header_pointer(*pskb, ip_hdrlen(*pskb), sizeof(*tcph), &tcpbuf);
            if (tcph == NULL)
                    return NF_ACCEPT;
     
            return (tcph->dest == port) ? NF_DROP : NF_ACCEPT;
    }
     
    /* Used to register our hook function */
    static struct nf_hook_ops nfho = {
            .hook     = hook_func,
            .hooknum  = NF_IP_PRE_ROUTING,
            .pf       = NFPROTO_IPV4,
            .priority = NF_IP_PRI_FIRST,
    };
     
    static __init int my_init(void)
    {
            return nf_register_hook(&nfho);
    }
     
    static __exit void my_exit(void)
    {
        nf_unregister_hook(&nfho);
    }
     
    module_init(my_init);
    module_exit(my_exit);
    Le programme que tu postes est un module noyaux qui installe un hook netfilter matchant sur les paquets IPv4, avant que la decision de routage soit faites (avant que ip_rcv_finish() soit appelee). C'est un example de comment utiliser un hook netfilter noyaux pour dropper tout packet TCP dont le port destination est 25 (smtp). Le fonction de hook appelee est hook_func. Tout le code ne fait que caster la structure sk_buff (qui contient le paquet en espace noyaux) vers des structures (headers) interpretables (iphdr, tcphdr) afin d'effectuer la comparaison de port pour dropper le paquet.

  3. #3
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    ok merci

  4. #4
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    justement il me demande de comprendre ce programme pour l'installer après comme module sur le noyau linux mais "avec la variation de latence latence " svp si vous avez des tutos pour m'aider de comprendre les differentes instruction et merc

  5. #5
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    Te documenter sur le développement de modules noyau sous Linux te serait utile (ainsi que la doc de netfilter), que de chercher des tutos, et pour ça est ton ami, vu qu'il n'y a plus trop de tutos "SdZ-like" dès que tu tripotes le mode noyau.

    Bref tout le boulot se fait dans hook_func (cf ce qui a été dit plus haut), et c'est là où tu devras "générer" de la latence si tu es sur un port utilisé par la VoIP, avant d'autoriser le paquet à circuler.
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  6. #6
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    SVP je veux savoir les rôles de chaque boucle et les pointeurs

  7. #7
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Euh... tu veux qu'on te serve le café aussi ? (avec des macarons tant qu'on y est).

    A un certain moment, faut un peu arrêter de vouloir être assisté et se débrouiller avec la doc... D'autant plus que le code est facilement compréhensible (et je suis loin d'être un dieu au niveau de la création de modules noyau Linux).
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  8. #8
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    merci mais je bois pas de café je pose la question serieusemnt et j'ai bien dit que je suis debutante si tu me donne un document qui permet de resoudre mon probleme sa sera mieux

  9. #9
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Justement, pour te répondre, la plupart d'entre nous irions lire la documentation des fonctions, ce que tu peux très bien faire, dans le seul but de te la répéter.

    Reviens poser des questions précises quand tu n'auras pas compris quelque chose de la dite documentation
    Nous nous ferons un plaisir de répondre à ces questions là.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  10. #10
    Membre averti
    Homme Profil pro
    DevOps AWS
    Inscrit en
    Juillet 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : DevOps AWS
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 120
    Points : 334
    Points
    334
    Par défaut
    La bonne solution pour t'en sortir c'est de prendre le problème par petits bouts.
    Commence par te documenter et fais en une synthèse, histoire de t'y retrouver =)

    Personne ne te donnera de solution toute prête pour la simple et bonne raison que ça n'existe pas (surtout en info )

  11. #11
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    merci pour les conseils
    vous pouvez me donner un site ou tuto que se parle à ce type de programmation

  12. #12
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Ici même, dans la faq et les cours C, dans la section réseau, dans la section système, par exemple.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. Simuler une saisie au clavier en utilisant les API Windows
    Par devvanjier dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 04/06/2014, 13h11
  2. Source : Utiliser les hook souris et claviers en VB.NET
    Par MrThorr dans le forum Contribuez
    Réponses: 5
    Dernier message: 28/03/2013, 09h13
  3. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  4. Merci d'utiliser les TAG
    Par Cian dans le forum Etudes
    Réponses: 0
    Dernier message: 07/08/2003, 17h46
  5. Utiliser les frames
    Par laury dans le forum Composants VCL
    Réponses: 5
    Dernier message: 10/05/2003, 10h14

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