bonjour tout le monde.
Je me gal�re vraiment sur la cr�ation d'un programme qui envoie des socket en mode RAW.
j'ai un ensemble d'erreur, captur� avec WSAGetLastError(), et je ne comprend pas leur signification car c'est un nombre ==> 10065 (Windows 2000 sp4). note : le meme code ex�cut� sur un autre ordi me donne l'erreur 10004 (windows XP sp2) !!
Ces erreurs sont r�cup�r�es apres l'envoi d'un message via la socket (sendto());
voila un bout de code qui vous montrera comment je cr� et d�clare mes sockets.
pPaquet est une structure compos�e de deux autres structures formant l'entete IP et l'entete ICMP.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 //création de la socket SOCKET socketRaw; socketRaw = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); //initialisation de la socket int sockOpt = 1; setsockopt(socketRaw, IPPROTO_IP, IP_HDRINCL, (const char*)&sockOpt, sizeof(sockOpt)); //envoi de données sendto(socketRaw, (char *)pPaquet, dataSize, 0, (struct sockaddr *)&IP_sock_info, sizeof(IP_sock_info));
Si quelqu'un a une id�e sur mon probl�me, je suis preneur. si vous souhaitez voir mon code plus en d�tail ou s'il n'y a pas ass� de d�tails je suis � l'�coute.
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 struct IP_HEADER { unsigned char ip_hl:4; // 4 bits("Internet header lengh") représentant la taille de l'entête IP unsigned char ip_v:4; // ip_v la version (pour le moment version 4 de IP) unsigned char ip_tos; // "Type Of Service" est codé sur 8 bits. unsigned short ip_len; // 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 unsigned short ip_id; // Le champ Identification est codé sur 16 bits et constitue l'identification utilisée pour reconstituer les différents fragments. unsigned short ip_off; // Codé sur ce bits cette valeur comporte le flag (3 bits indiquant l'état de la fragmentation) et le champ Position fragment (13 bits indiquant la position du fragment par rapport à la première trame) unsigned int ip_ttl; // Time To Live : la durée de vie du socket. unsigned int ip_proto; // Le protocol utilisé pour transporter les données. Peut être tcp(6), udp(17), icmp(1) unsigned short ip_sum; // Le checksum du datagram unsigned int ip_src; //Adresse IP source unsigned int ip_dst; // Adresse IP destination }; struct ICMP_HEADER { unsigned char icmp_type; // Permet d'identifier le type de message envoyé ou recu (0 = Echo Reply, 8 = Echo Request, 11 = TTL exceeded) unsigned char icmp_code; // Associé au champ type il représente la définition de message d'erreur. unsigned short icmp_cksum; // Le champ Checksum est codé sur 16 bits et représente la validité du paquet de la couche 3 ICMP unsigned short icmp_id; // 16 bits définissant lidentifiant de lémetteur unsigned short icmp_seq; // 16 bits permettant au récepteur didentifier si il manque un paquet }; struct ICMP_PAQUET { struct IP_HEADER ip; struct ICMP_HEADER icmp; };
merci d'avance.
Partager