Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 12 sur 12
  1. #1
    Invité de passage
    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 : 3
    Points
    3

    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 :
    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 chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    février 2007
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 29
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : février 2007
    Messages : 520
    Points : 623
    Points
    623

    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 :
    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
    Invité de passage
    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 : 3
    Points
    3

    Par défaut

    ok merci

  4. #4
    Invité de passage
    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 : 3
    Points
    3

    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 Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    novembre 2006
    Messages
    1 443
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 1 443
    Points : 1 870
    Points
    1 870

    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 plûtot des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  6. #6
    Invité de passage
    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 : 3
    Points
    3

    Par défaut

    SVP je veux savoir les rôles de chaque boucle et les pointeurs

  7. #7
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    novembre 2006
    Messages
    1 443
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 1 443
    Points : 1 870
    Points
    1 870

    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 plûtot des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  8. #8
    Invité de passage
    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 : 3
    Points
    3

    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 Confirmé
    Homme Profil pro Pierre
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    1 880
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre
    Localisation : France

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

    Informations forums :
    Inscription : juin 2007
    Messages : 1 880
    Points : 3 945
    Points
    3 945

    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.
    • La plus sotte des questions est celle qu'on ne pose pas.

    Pour faire des graphes, essayez yEd.

  10. #10
    Membre habitué
    Homme Profil pro Maxime Estrade
    Développeur en systèmes embarqués
    Inscrit en
    juillet 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Nom : Homme Maxime Estrade
    Âge : 25
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2009
    Messages : 99
    Points : 144
    Points
    144

    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 )
    Estrade Maxime
    Estrad_m
    Responsable Communication Roll the World.
    {Epitech}.5ème Année

  11. #11
    Invité de passage
    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 : 3
    Points
    3

    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 Confirmé
    Homme Profil pro Pierre
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    1 880
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre
    Localisation : France

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

    Informations forums :
    Inscription : juin 2007
    Messages : 1 880
    Points : 3 945
    Points
    3 945

    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.
    • La plus sotte des questions est celle qu'on ne pose pas.

    Pour faire des graphes, essayez yEd.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •