Envoi d'une structure dans un socket

Signaler
Messages postés
4
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
27 septembre 2003
-
Messages postés
5
Date d'inscription
mercredi 14 mai 2003
Statut
Membre
Dernière intervention
20 avril 2004
-
Bonjour, voilà j'ai besoin d'envoyer une structure dans un paquet udp :

typedef struct {
unsigned short TransactionId;
short Flags;
short Questions;
short AnswerRRs;
short AuthorityRRs;
short AdditionalRRs;
char Separator;
char *Name;
short Type;
short Class;
} DNSQUERY;

donc je l'ai mis avec une union pour essayer de la 'transformer' en chars, puis d'envoyer les chars par le socket, mais il envoie un peu n'importe quoi. En affichant les chars, on s'aperçoit ke c'est en effet du nimporte quoi.

union {
char *Char;
DNSQUERY Struct;
} QueryPacket;

QueryPacket.Struct.TransactionId = 0x0080;
QueryPacket.Struct.Flags = 0x0001;
QueryPacket.Struct.Questions = 0x0001;
QueryPacket.Struct.AnswerRRs = 0x0000;
QueryPacket.Struct.AuthorityRRs = 0x0000;
QueryPacket.Struct.AdditionalRRs = 0x0000;
QueryPacket.Struct.Separator = 0x04;
strncpy(sName, "test.com", 63);
QueryPacket.Struct.Name = sName;
QueryPacket.Struct.Type = 0x0001;
QueryPacket.Struct.Class = 0x0001;

for (i = 0 ; i <= sizeof(QueryPacket.Struct)-1 ; i++) {
printf("%.2x", QueryPacket.Char[i], QueryPacket.Char[i]);
if ((i+1) % 8) { printf(" "); } else { printf("\n"); }
}

----------
ça affiche :
67 00 73 00 5c 00 41 00
6c 00 6c 00 20 00 55 00
73 00 65 00 72 00 73 00

j'ai du loupé quelque chose ;o
donc si kkun voit quoi ou a kkch d'autre a proposer ça serait cool
merci d'avance :)

4 réponses

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,

SOCKET s; // a creer
sockaddr_in sin; // a remplir
DNSQUERY dns; // a remplir

sendto(s,(char*) &dns, sizeof(DNSQUERY), 0, (sockaddr*) &sin, sizeof(sin));
Messages postés
4
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
27 septembre 2003

oki merci beaucoup ça marche :)
par contre j'ai du mettre des htons() pour le remplissage de la structure sinon ça posait des petits problèmes
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,
Y'en a pas besoin normalement, la chaine d'octet est envoyée telle qu'elle.
Tu as mis des ntohs() du coté de celui qui lit la structure ?
Messages postés
5
Date d'inscription
mercredi 14 mai 2003
Statut
Membre
Dernière intervention
20 avril 2004

Salut,

j'ai essayer ce sytéme mais chez moi ca marche po :-(

Je sniffe avec ethereal pour voir comment ca se passe.

Bilan les niveaux IP et UDP sont nikel, mon probleme vien de la couche DNS , il semblerai que la string passer dans la structure poster par Taum n'ai pas reconnut . Elle se retrouve dans le paquet comme un seul hexa. Donc je me retrouve avec une methode Unknown.

Y'a t-il une solution?