RAW_SOCKET - IP - ICMP - Sendto() -Erreur 'WSAEADDRNOTAVAIL'

 
Poster un nouveau sujet   Répondre au sujet    iprelax.fr Index du Forum -> Internet
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
dark1933
dummy mioche
dummy mioche


Inscrit le: 14 Sep 2003
Messages: 1

MessagePosté le: Dim Sep 14, 2003 5:07 pm    Sujet du message: RAW_SOCKET - IP - ICMP - Sendto() -Erreur 'WSAEADDRNOTAVAIL' Répondre en citant

Salut à tous,

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

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))
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
_sebf
dummy mioche
dummy mioche


Inscrit le: 28 Juin 2004
Messages: 1

MessagePosté le: Lun Juin 28, 2004 8:27 pm    Sujet du message: Numéro du port non valide Répondre en citant

Salut,

Voici l'explication officielle de ton message d'erreur :

"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). "

Tu as donc certainement dû oublié de préciser le port.

_SebF

http://www.frameip.com
Pour ceux qui aiment TCPIP
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    iprelax.fr Index du Forum -> Internet Toutes les heures sont au format CET (Europe)
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum
Affilzen SARL : Mention légale