je me casse les dents depuis qqes jours sur un pb insoluble.
Insoluble ? oui en effet car le meme code en C sous Linux fonctionne a
merveille, et le portage sous Windows pose pb sans que je vois pkoi.
Le but pour l'instant est de creer une RAW socket et de creer une entete
IP, et enfin d'envoyer ce paquet IP vers une IP de mon LAN.
Voisi le code de l'appli win32 console :
/* definition of IP header version 4 as per RFC 791 */
#define IPVERSION 4
typedef struct IP_HDR
{
unsigned char VerIHL; //Version and IP Header Length
unsigned char Tos;
unsigned short Total_len;
unsigned short ID;
unsigned short off; //Flags 3 bits and Fragment offset 13 bits
unsigned char TTL;
unsigned char Protocol;
unsigned short Checksum;
unsigned long SrcIP;
unsigned long DstIP;
//unsigned long Options_and_Padding;
} IP_HDR;
res = bind(fd, (sockaddr *)&dest, sizeof(dest));
if (res == SOCKET_ERROR)
{
res = WSAGetLastError();
printf("bind -> %i\n\n", res);
MessageBox(0, "envois du paquet échoué", "erreur", MB_ICONERROR);
}
printf("bind OK\n\n");
//
//** L'erreur est ICI **//
//
// # envois du paquet #
res = sendto(fd, (const char *)pckt, sizeof(pckt), 0, (sockaddr
*)&dest, sizeof(dest));
if (res == SOCKET_ERROR)
{
res = WSAGetLastError();
printf("sendto -> %i\n\n", res);
MessageBox(0, "envois du paquet échoué", "erreur", MB_ICONERROR);
}
printf("envoi éffectué\n\n");
// # fermeture du socket #
closesocket(fd);
return 0;
}
##################################
Lors du "sendto" j'obtient l'erreur documentée sur MSDN suivante :
WSAEADDRNOTAVAIL
10049
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).
J'ai beau essayé de 36 façon differentes je retombe tjs sur ce message.
Un ami m'as suggéré que l'entete etait pt etre mal construite, est ce
que ca pourrait etre le pb ?
(le checksum est deliberemment faux, je n'ai pas encore pris le tps de
faire une fonction pour).
Je rappele, le but est just d'envoyer un paquet IP a un poste du meme LAN.