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 :

Checksum protocole IP en RAW


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    IRIS, ATS, 3IL Rodez
    Inscrit en
    Juin 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : IRIS, ATS, 3IL Rodez

    Informations forums :
    Inscription : Juin 2014
    Messages : 27
    Par défaut Checksum protocole IP en RAW
    Bonjour,

    Je suis en train d'essayer de réaliser un petit programme qui envoie une trame ICMP echo, donc à l'aide du protocole IP. Je travail en RW :

    note:
    SOCKET monSocket;
    sockaddr_in sockaddrIn;

    icmphdr headerIcmp;

    char icmpMessage[50];

    int m_sockfd;



    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
     
        SOCKET mon_soket = socket(AF_INET, SOCK_RAW ,IPPROTO_ICMP);
     
        sockaddrIn.sin_family = AF_INET; 
     
        inet_aton("192.168.255.153", &sockaddrIn.sin_addr);
     
        headerIcmp.type = ICMP_ECHO;
        headerIcmp.code = 0;
     
        headerIcmp.checksum; 
     
        bind(mon_soket,(const sockaddr*)&sockaddrIn,sizeof(sockaddrIn));
     
        sendto(mon_soket,&headerIcmp,sizeof(icmphdr),0,(const sockaddr*)&sockaddrIn,sizeof(sockaddrIn));  
     
        memset(icmpMessage, 'X', sizeof(icmpMessage));
     
        recv(mon_soket, icmpMessage, sizeof(icmpMessage),0);
     
       close(mon_soket);


    Avec Wireshark j'observe :

    Type 8
    Code 0
    Checksum 0xca28 Incorrect, shloud be 0xccbf
    Identifier (BE) : 16639 (0x40ff)
    Identifier (LE) : 65344 (0xff40)
    Sequence number (BE) 59968 (0xea40)
    Sequence number (LE) 16618 (0x40ea)

    No Response Seen


    Bref, je n'ai pas réglé le checksum dans mon programme.

    Ce que j'en sais, c'est que sa logique ressemble à cette phrase :

    So, as far as the algorithm goes, IP header checksum is : 16 bit one’s complement of the one’s complement sum of all 16 bit words in the header

    J'aurais aimé savoir :

    * si je dois passer par une méthode artisanal de calcul du checksum, ou s'il existe une méthode système qui fait sa proprement ?

    * Le résultat final est il bien... la Somme des compléments de l'entête divisé en 16mots ? (Je découpe l'entête en 16mots, et j'additionne tous les compléments ?)

    Voilà, c'est pas gagné, mais j’espère avancer tout doucement

    Bon code !


    EDIT : Il s'agit donc du "Complément à 1 de la somme des complément à 1 sur 16 bits"

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Non puisque tu es en RAW, il faut tout faire à la mano. L'algorithme est détaillé sur Wikipédia de manière un poil plus claire : https://en.wikipedia.org/wiki/IPv4_h...eader_Checksum .

Discussions similaires

  1. Analyse de protocole -> Checksum, CRC qu'est ce que c'est?
    Par DiJiTooL dans le forum Développement
    Réponses: 2
    Dernier message: 16/01/2007, 09h34
  2. raw socket et protocole TCP/IP
    Par robertmouac dans le forum Développement
    Réponses: 3
    Dernier message: 09/03/2005, 23h09
  3. Quelle est la fiabilité du protocole SSL ?
    Par Anonymous dans le forum Développement
    Réponses: 5
    Dernier message: 05/09/2002, 13h31
  4. lire une image au format RAW
    Par Anonymous dans le forum OpenGL
    Réponses: 5
    Dernier message: 20/05/2002, 00h11

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