IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

sendto + création de paquet pour les raw socket


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 134
    Points : 59
    Points
    59
    Par défaut sendto + création de paquet pour les raw socket
    Bonjour tout le monde,

    Je fais appel a vous car je suis dans l’incompréhension total.

    J’ai deux classes qui me créent chacune des objets. Le premier a une taille de 20 (IP) et l’autre une taille de 8 (ICMP). Chaque objet est composé d’élément simple (int, short, char).

    Ce que je souhaite faire c’est stocker les valeurs de mon objet dans un seul tableau. Pour cela j’ai créé la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    char * createICMPpaquet(ICMP icmp, IP ip)
    {
    	char *ptr = NULL, paquet[28]; //28 représente la taille de ICMP + IP
    	int icmpT = sizeof(icmp); //8
    	int ipT = sizeof(ip); //20
    	ICMP * icmpP = &icmp;
    	IP * ipP = &ip; //&ip donne l'adresse physique de la variable 
     
    	ZeroMemory(paquet, sizeof(paquet)); //permet de remplir un bloc de mémoire avec des 0
    	ptr = paquet;
    	memcpy(ptr, ipP, sizeof(ip));
    	ptr += sizeof(ip);
    	memcpy(ptr, icmpP, sizeof(icmp));
    	ptr += sizeof(icmp);
     
    	return paquet;
    }
    Ce que je souhaite savoir, c’est comment vérifier que le contenue du retour de la fonction est bien ip+icmp ??
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char * tempo = createICMPpaquet(icmp, ip);
    Note :
    1 j’utilise ce char * afin de l’envoyer au travers de socket RAW et de la fonction sendto().
    2 Le retour de sendto me donne 4 alors qu’il devrait me donner 28, ou est ou erreur ?

  2. #2
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char * createICMPpaquet(ICMP icmp, IP ip)
    Pourquoi passer les paramètres par copie ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    paquet[28]; //28 représente la taille de ICMP + IP
    sizeof(ICMP) + sizeof(IP) plutôt.

    paquet est un tableau locale.

    2 Le retour de sendto me donne 4 alors qu’il devrait me donner 28, ou est ou erreur ?
    Tu as sans doute envoyé sizeof(tempo) octets (taille du pointeur).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void createICMPpaquet( ICMP *icmp, IP *ip, char *paquet )
    {
    	int icmpT = sizeof(*icmp); 
    	int ipT = sizeof(*ip);
     
    	ZeroMemory( paquet, icmpT + ipT );
     
    	memcpy( paquet, ip, ipT );
     
    	paquet += ipT;
     
    	memcpy( paquet, icmp, icmpT );
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char paquet[sizeof(ICMP) + sizeof(IP)];
     
    createICMPpaquet( &ton_icmp, &ton_ip, paquet );

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser les raw socket
    Par dimitris dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 17/03/2009, 16h24
  2. recevoire (et envoyer) un paquet SYN (en raw socket)
    Par freakfm dans le forum Développement
    Réponses: 1
    Dernier message: 16/11/2006, 16h37
  3. C++, intercepter les sorties avec les raw sockets
    Par ThibG dans le forum Développement
    Réponses: 6
    Dernier message: 08/08/2005, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo