RAW SOCKET - IP - Sendto() - Erreur 'WSAEADDRNOTAVAIL'
dark1933
Messages postés9Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention11 novembre 2005
-
14 sept. 2003 à 17:53
MisterDa2
Messages postés13Date d'inscriptionsamedi 28 janvier 2006StatutMembreDernière intervention28 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
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