Salut,
si tu ne sais pas ce que c'est qu'un octet et que tu essaies de faire de l'analyse de protocole, tu vas avoir du mal .
donc , déjà: http://www.commentcamarche.net/base/binaire.php3
ensuite , offset: décalage .
ensuite , notre référence: http://www.commentcamarche.net/internet/protip.php3
ou bien: http://www.frameip.com/entete-ip/
si on prend ton datagramme tel qu'il est aligné en mémoire:
00: 45 00 00 40 07 20 00 00 02 06 E3 5F 83 FE 3D 0A
10: C0 2C 4D 04 00 0F 00 80 00 00 01 C0 50 00 08 00
20: 50 10 04 00 3E 11
l'octet 0 a pour valeur 45 et l'offset 0
l'octet d'offset 1 a pour valeur 00
l'octet d'offset 3 a pour valeur 40
l'octet d'offset 15 (0F en hexadécimal) a pour valeur 0A
l'octet d'offset 16 (10 en hexa) a pour valeur C0
l'octet 32 (0x20) a pour valeur 50 (80 en décimal) ... jusqu'à l'octet 37 qui vaut 0x11
la longueur de l'entête ip est donc le 5 de 45 (offset 0)
pour les 4 octets:
3.2 - IHL
IHL signifie "Internet header lengh". ce champ est codé sur 4 bits et représente la longueur en mots de 32 bits de l'entête IP. Par défaut, il est égal à 5 (20 octets), cependant, avec les options de l'entête IP, il peut être compris entre 6 et 15.
en fait le 5 signifie 5 fois 32 bits , donc 5 fois 4 octets , un octet étant 8 bits comme nous l'avons vu plus haut .
question 2:
3.4 - Longueur totale
Le champ Longueur totale est codé sur 16 bits et représente la longueur du paquet incluant l'entête IP et les Data associées. La longueur totale est exprimée en octets, ceci permettant de spécifier une taille maximum de 216 = 65535 octets. La longueur des Data est obtenu par la combinaison des champs IHL et Longueur totale :
Longueur_des_data = Longueur_totale - ( IHL * 4 );
donc dans ton cas la longueur des données utiles après l'entête est bien longueur totale du datagramme 0x0040 soit 64 moins 20 (indiqué par IHL) soit 44 octets .
et ... Voili Voilou Voila !