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"![]()
Partager