Envoi d'une structure dans un socket

cs_Taum Messages postés 4 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 27 septembre 2003 - 2 sept. 2003 à 01:18
topl Messages postés 5 Date d'inscription mercredi 14 mai 2003 Statut Membre Dernière intervention 20 avril 2004 - 7 avril 2004 à 17:10
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

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
2 sept. 2003 à 01:45
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));
0
cs_Taum Messages postés 4 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 27 septembre 2003
2 sept. 2003 à 17:11
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
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
2 sept. 2003 à 17:29
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 ?
0
topl Messages postés 5 Date d'inscription mercredi 14 mai 2003 Statut Membre Dernière intervention 20 avril 2004
7 avril 2004 à 17:10
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?
0
Rejoignez-nous