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.

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));
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
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 l’identifiant de l’émetteur
        unsigned short        icmp_seq; // 16 bits permettant au récepteur d’identifier si il manque un paquet
    };
 
    struct ICMP_PAQUET
    {
        struct IP_HEADER    ip;
        struct ICMP_HEADER   icmp;
    };
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.

merci d'avance.