Forum général.général Comment voir le format précis des paquets pour un protocole???

Posté par  .
Étiquettes : aucune
0
4
juil.
2006
Voilà, en gros, je fais un générateur de paquets sur carte embarquée switch-routeur...

donc j'ai une partie superviseur qui envoie les ordres à la carte embarquée qui doit générer un (ou plusieurs ) paquet du type de protocole selectionné...

Bon niveau prog tout ça, ça va, par contre j'ai un petit problème, c'est que c'est très lourd de parcourir les RFCs pour savoir comment sont formés les paquets de chaque protocole.
Voir des fois, c'est vraiment galère... donc est ce que quelqu'un connait un truc qui permet de générer des paquets en choisissant le type de protocole et ensuite je capturerai ça dans ethereal et déjà avec un exemple, ça sera beaucoup plus simple.

Moi je pense que comme ça, ça peut me simplifier la vie, si quelqu'un voit autre chose, ne pas hésiter!

J'espère avoir été clair, merci d'avance!
  • # Avé les outils par défaut

    Posté par  . Évalué à 1.

    ping -> ICMP
    netcat -> TCP,UDP
    • [^] # Re: Avé les outils par défaut

      Posté par  . Évalué à 1.

      Oui merci mais en fait, c'est plus pour des protocoles plus complexes styles IGMP, STP, LACP etc...
      Les trucs de bases ne me posent pas de problèmes (IP, UDP, TCP, ICMP).
  • # Re

    Posté par  . Évalué à 3.

    Pour tout les protos gérés par le noyau linux en natif, c'est très simple, il te suffit d'aller voir dans les headers de ce dernier.

    Exemple pour l'IGMP:

    /usr/src/linux-2.6.13.4/include/linux/igmp.h



    struct igmpv3_query {
    __u8 type;
    __u8 code;
    __u16 csum;
    __u32 group;
    #if defined(__LITTLE_ENDIAN_BITFIELD)
    __u8 qrv:3,
    suppress:1,
    resv:4;
    #elif defined(__BIG_ENDIAN_BITFIELD)
    __u8 resv:4,
    suppress:1,
    qrv:3;
    #else
    #error "Please fix <asm/byteorder.h>"
    #endif
    __u8 qqic;
    __u16 nsrcs;
    __u32 srcs[0];
    };


    Sachant que cette structure sera généralement utilisé dans le contexte suivant:


    struct igmpv3_query *datas;
    char *pkt;
    ...
    pkt = recv(...);
    datas = (struct igmpv3_query *)pkt;


    Ta structure décrit parfaitement le paquet à priori (taille et ordre des champs).
    Voilà voilà.

    Pour les autres protos, tu peux regardes les dissectors Ethereal, mais les RFC me semble incontournable, au moins si tu veux comprendre le proto.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.