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

Réseau C Discussion :

Construction de packet


Sujet :

Réseau C

  1. #21
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut
    Tout d'abord, je tiens a tous vous remercier pour vos réponses.

    Alors, d'après ce que j'ai compris de vos réponses, pour les raw socket, je ne peux pas modifier mon packet suffisamment haut dans le modèle osi pour que le firewall réponde aux besoins exigé par mon école.

    Donc je vais m'orienter vers pcap_sendpacket pour voir ce que je peux en retirer. Mais je suis vraiment un "cretin" de pas l'avoir vu surtout que j'ai lu le man de la libpcap au moin 20 fois lol. Enfin, j'ai du la loupé pcq sur beaucoup de site parlant de la libpcap, il est écrit qu'on ne peut pas l'utiliser pour envoyer des packets.

    Je vous remercie pour votre aide, je ferais des tests demain et je vous tiendrais au courant de ce que cela donne.

    Bonne soirée a tous

  2. #22
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    libpcap a des restrictions sur la modification des trames que libnet n'a pas. Donc je te conseille de jeter aussi un coup d'oeil à libnet :
    http://www.packetfactory.net/libnet/
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  3. #23
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut
    Salut,

    pourrais-tu m'en dire d'avantage sur ces restrictions ?

    Car je viens d'essayer de renvoyer un packet dont je modifie les adresses comme ceci avec la libpcap :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            inet_aton("192.192.192.192",&c_ip->source_ip); // on change l'adresse
    	inet_aton("10.0.0.41",&c_ip->destination_ip);
    	ether_aton("00:90:d0:53:e2:cb",&c_physique->destination_physique);
    	ether_aton("00:13:e8:10:54:07",&c_physique->source_physique);
    	// on verifi que c'est bien changé :
    	printf("\n Adresse ip de l'expediteur modifié : %s",inet_ntoa(c_ip->source_ip));
    	printf("\n Adresse ip du destinataire modifié : %s\n\t---------------",inet_ntoa(c_ip->destination_ip));
    	pcap_sendpacket(handle2, corps, sizeof(corps));
    Et cela marche a moitier on va dire. Car si je laisse la partie sniffer de mon firewall tourner, je récupère bien le nouveau packet, avec mes modifications sur le réseau. Par contre, avec wireshark, j'obtient une erreur qui me dit que mon packet est mal former. Seulement j'ignore pourquoi pour l'instant.

    Edit : je laisse se message pour ceux que ca intéresse, mais j'ai trouvé d'ou vient mon erreur, une bete erreur lol, sizeof(corps) ne vaut pas la taille en mémoire, mais la taille du type qui est u_char donc 4. Voila d'ou vient certainement mon problème. Je vais m'empresser de corriger cela.

    Edit bis : Voici la correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pcap_sendpacket(handle2, corps, entete->len);
    ou entete est une structure du type pcap_pkthdr qui est déclaré dans la fonction appellé pour chaque packet via l'instruction pcap_loop. Donc il est tout a fait possible de manipuler les adresses mac via la libpcap. Bon maintenant je vais aller faire des tests concrets pour natter les packets autoriser. Si cela passe, je serais contant, sinon, je devrais surrement regarder aux checksums que wireshark me signal a chaque réponse.

    Merci de votre aide

  4. #24
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut
    Bonjour tlm,

    j'arrive effectivement a réenvoyer les packets. Cependant, j'ai un légé probléme avec les checksums.

    J'arrive a calculer le bon checksums pour la couche Ip via 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    unsigned short inet_checksum(unsigned short *pkt, int n)
    {
    	register long sum;
    	unsigned short oddbyte;
    	register unsigned short answer;
     
    	/*
    	* Our algorithm is simple, using a 32-bit accumulator (sum),
    	* we add sequential 16-bit words to it, and at the end, fold back
    	* all the carry bits from the top 16 bits into the lower 16 bits.
    	*/
     
    	sum = 0;
    	while (n>1)
    	{
    		sum += *pkt++;
    		n -= 2;
    	}
     
    	/* mop up an odd byte, if necessary */
    	if (n == 1)
    	{
    		oddbyte = 0;	/* make sure top half is zero */
    		*((unsigned char *)&oddbyte) = *(unsigned char *)pkt;/* one byte only */
    		sum+=oddbyte;
    	}
     
    	/*
    	 * Add back carry outs from top 16 bits to low 16 bits.
    	*/ 
     
    	sum=(sum>>16)+(sum & 0xffff);	/* add high-16 to low-16 */
    	sum+=(sum >> 16);				/* add carry */
    	answer = (unsigned short)~sum;		/* ones-complement, then truncate to 16 bits */
     
    	return answer;
    }
    Suite à cela, je tente déespérément de calculer le checksum du protocole tcp. Pour se faire, j'utilise la structure suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct pseudohdr
    {
    	unsigned long saddr;
    	unsigned long daddr;
    	unsigned char nu;
    	unsigned char protocol;
    	unsigned short len;
    };
    Et je la rempli comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
          pseudo->saddr=inet_ntoa(c_ip->source_ip); // in_addr source_ip
    	pseudo->daddr=inet_ntoa(c_ip->destination_ip); // in_addr destination_ip
    	pseudo->nu=0;
    	pseudo->protocol=6;
    	/* +12 pour les options */
    	pseudo->len=htons(sizeof(struct sniff_tcp));
     
    	tcp->th_sum = inet_checksum((unsigned short *)pseudo, sizeof(struct pseudohdr)+sizeof(struct sniff_tcp));
    On me retourne bien un checksum, mais celui-ci n'est pas valable. Je pense que mon erreur ce site soit dans la convertion des adresses en unsigned long ou alors dans mon calcule de la taille. Mais je ne suis pas sur. J'ai fais différent tests sur ces éléments, mais jamais je n'arrive a avoir un checksums validé par wireshark.

    Un petit coup de main svp

    Je vous remerci d'avance

Discussions similaires

  1. Réponses: 15
    Dernier message: 04/01/2007, 11h15
  2. [JBuilder 7] Construction d'executable natif
    Par renaudfaucon dans le forum JBuilder
    Réponses: 3
    Dernier message: 24/11/2006, 22h28
  3. [JBuilder 9] Construction d'exécutables natifs
    Par jamloum dans le forum JBuilder
    Réponses: 3
    Dernier message: 10/10/2003, 11h16
  4. [jAPI]Probleme de construction
    Par exe dans le forum C++Builder
    Réponses: 10
    Dernier message: 07/08/2003, 10h03
  5. Packet forwarder
    Par Gabuzomeu dans le forum Développement
    Réponses: 3
    Dernier message: 03/06/2003, 17h44

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