RAW SOCKET - IP - Sendto() - Erreur 'WSAEADDRNOTAVAIL'

Signaler
Messages postés
9
Date d'inscription
lundi 24 février 2003
Statut
Membre
Dernière intervention
11 novembre 2005
-
Messages postés
13
Date d'inscription
samedi 28 janvier 2006
Statut
Membre
Dernière intervention
28 février 2006
-
Salut à tous,

J'essaye désespérément d'envoyer un Ping en forgeant le datagramme IP adéquat.

J'obtiens l'erreur "WSAEADDRNOTAVAIL" au moment de l'appel de la fonction Sendto() :

Cannot assign requested address.
The requested address is not valid in its context.
This normally results from an attempt to bind to an address that is not valid for the local computer.
This can also result from connect, sendto, WSAConnect, WSAJoinLeaf, or WSASendTo when the remote address or port is not valid for a remote computer (for example, address or port 0).

=========================================================================
Voici les étapes importantes de la procedure :

// Initialisation des structure ICMP et IP

ICMP_HEADER->Type=8;
ICMP_HEADER->Code=0;
ICMP_HEADER->ID=1;
ICMP_HEADER->SEQ=1;
ICMP_HEADER->Checksum=0;
memcpy(&ICMP_HEADER->ICMP_DATA,"12345678",8);
ICMP_HEADER->Checksum=CALCUL_CHECKSUM((unsigned short *)ICMP_HEADER,8);

IP_HEADER->VS_LET=69;
IP_HEADER->TOS=0;
IP_HEADER->Size=htons(36);
IP_HEADER->ID=htons(16);
IP_HEADER->Flags=2;
IP_HEADER->Offset=0;
IP_HEADER->TTL=255;
IP_HEADER->Proto=1;
IP_HEADER->Checksum=0;
IP_HEADER->IP_S=inet_addr("82.64.7.233"); // mon ip lors des essais
IP_HEADER->IP_D=inet_addr("216.239.59.99"); // ip de Google.fr
memcpy(&IP_HEADER->IP_DATA,&ICMP_HEADER,8);
IP_HEADER->Checksum=CALCUL_CHECKSUM((unsigned short *)IP_HEADER,10);

// Création de la RAW SOCKET

Socket_IP=socket(AF_INET,SOCK_RAW,IPPROTO_RAW);

// Modification des options pour pouvoir manipuler l'entête IP

setsockopt(Socket_IP, IPPROTO_IP, 2, (char *) &optval, sizeof(optval));

// Initialisation de la structure SOCKADDR_IN

ip_sock_info.sin_family=AF_INET;
ip_sock_info.sin_addr.s_addr=inet_addr("216.239.59.99");
ip_sock_info.sin_port=htons(7); // le n° de port n'intervient, mais on ne sait jamais
memset(&ip_sock_info.sin_zero,0x0,8);

// envoit des données => et là se produit l'erreur

sendto(Socket_IP,(char*)IP_HEADER,36,0,(struct sockaddr *)&ip_sock_info,sizeof(struct sockaddr_in))

1 réponse

Messages postés
13
Date d'inscription
samedi 28 janvier 2006
Statut
Membre
Dernière intervention
28 février 2006

Salut j'ai un pb très proche du tiens, l'as tu reussi à le résoudre ?

merci d'avance