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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
laurent
J'avais cherché des infos sur les raw sockets de windows il y a un moment. Je crois avoir vu que ces raw sockets n'ont pas un controle absolu des entetes et ne peuvent manipuler que au delà de l'entête IP. Je n'ai pas personnellement vérifié, pour les besoins de mon programme j'avais profité de la déception pour me motiver à tester winpcap. Mais si c'est le cas, ca a certainement à voir avec tes erreurs.
J'avais cherché des infos sur les raw sockets de windows il y a un moment.
Je crois avoir vu que ces raw sockets n'ont pas un controle absolu des
entetes et ne peuvent manipuler que au delà de l'entête IP. Je n'ai pas
personnellement vérifié, pour les besoins de mon programme j'avais profité
de la déception pour me motiver à tester winpcap. Mais si c'est le cas, ca a
certainement à voir avec tes erreurs.
J'avais cherché des infos sur les raw sockets de windows il y a un moment. Je crois avoir vu que ces raw sockets n'ont pas un controle absolu des entetes et ne peuvent manipuler que au delà de l'entête IP. Je n'ai pas personnellement vérifié, pour les besoins de mon programme j'avais profité de la déception pour me motiver à tester winpcap. Mais si c'est le cas, ca a certainement à voir avec tes erreurs.