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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du 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
    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 chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    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
    Nouveau membre du 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
    Par défaut
    ok merci

  4. #4
    Nouveau membre du 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
    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 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    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.

  6. #6
    Nouveau membre du 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
    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 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    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).

  8. #8
    Nouveau membre du 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
    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

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    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à.

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