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

dark1933 Messages postés 9 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 11 novembre 2005 - 14 sept. 2003 à 17:53
MisterDa2 Messages postés 13 Date d'inscription samedi 28 janvier 2006 Statut Membre Dernière intervention 28 février 2006 - 1 mars 2006 à 11:29
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

MisterDa2 Messages postés 13 Date d'inscription samedi 28 janvier 2006 Statut Membre Dernière intervention 28 février 2006
1 mars 2006 à 11:29
Salut j'ai un pb très proche du tiens, l'as tu reussi à le résoudre ?

merci d'avance
0
Rejoignez-nous