erreur lors de l'envoie de donn� via les socket.
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:
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:
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;
}; |
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.