Les Forums

Les Forums

Les forums sont fermés. Ils restent présent pour consultation et archivage.
Vous pouvez désormais poser vos questions directement dans les commentaires en bas de chaque page du site.
Alors n'hésitez pas à participer

le checksum

Re, c'est encore le ptit b0mbjack 😉

dans la rfc pour udp, le checksum prend en compte un pseudo entete udp
le pseudo entete udp contient l'ip source et destination

checksum udp = PseudoEnteteUDP + EnteteUDP + DATA

(les 2 champs sont identique au champ ip source et destination de l'entete ip normalement)...donc ma question est :

pourkoi sur frameip le checksum udp ne change pas quand on modifie l'ip source et destinataire
le champ longueur totale de l'entete ip

on le fait apres avoir rempli le champ du checksum ip,cheksum udp?

EnteteIp.Longueur = EnteteIp + PseudoEnteteUDP + EnteteUDP + DATA

je m'embrouille trop 😳
erreur de ma part, je confirme ... le checksum udp change quand on change l'ip de l'entete ip

desolé ^^
Lu b0mbjack,

As tu répondu seul à tes propres questions ou en reste t il en suspend ?

@+
_SebF - Sébastien FONTAINE
Lu Seb,

je rempli ma structure, avec les meme parametres que frameip
et j'ai pas le meme checksum

'je procede comme ca
je rempli ma structure enteteip
et je laisse à 0 le champ totalelongueur et le checksum
juste apres je rempli le champ checksum
Enteteip.Checksum = ...fonction Checksum
je forge le pseudoenteteudp et l'enteteudp
et apres je rempli le champ totale longueur
Enteteip.Longueur = Enteteip+PseudoEntete+EnteteUDP+DATA

' à titre d'info
j'ai version et Len de l'enteteip sur cette structure
Enteteip.Version = 4
Enteteip.Len = 5
et non sur un seul : enteteip.verLen = (4<<5)

'pour la longeur du pseudoenteteudp
PseudoEnteteUDP.Len =LaTailleDe(EnteteUDP + DATA)

et quand je forge mon paquet
EnteteIP & PseudoEnteteUDP & EnteteUDP & DATA

et que je compare mon checksum par rapport à frameip, j'ai une différence qui varie entre 300...jusqu'a 3000
pour le checksum ip, elle est petite la différence
mais c'est pour le checksum udp, j'ai au moins un bon ptit 3000
sinon pour l'envoi et la reception y'a pas d'erreur sauf ke le data(ma phrase) lors de la reception j'ai plus ca...à la place j'ai des caracteres bien chelou .... 🙂
(il doit pas etre complet mon paquet!)

' 2ieme partie concernant icmp
voila mon paquet
eIcmp.Type = 8
eIcmp.Code = 0
eIcmp.Checksum = 0
eIcmp.Checksum = ...fonction checksum
eIcmp.Identifiant = 0
eIcmp.Sequence = 0

et je le forge comme ca
EnteteIp & eIcmp
pareil, par rapport à frameip, j'ai pas le meme resultat pour le checksum mais j'ai la meme longueur total pour l'entete ip et icmp
lors de l'envoi , j'ai aucune erreur avec la fonction Sendto ...mon paquet est bien parti mais je receptionne kedal

quand je remplace mon checksum enteteip sur frameip, je receptionne bien les données....mais quand je remplace le checksum de l'entete icmp par le mien, je recois plus la trame envoyer par frameip

et j'arrive pas à comprendre cette différence de checksum , pourtant je prend bien le pseudoentete dans mon paquet

chose importante aussi , voila comment je crée le socket

Sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
Re Seb
y'a du nouveau pour ICMP

mon checksum ip : 47436
checksum frameip : 47180

mon checksum icmp : 63231
checksum frameip icmp : 63487

la différence est de 256
pour checksum ip, j'ai 256 en plus ke frameip
et pour le checksum icmp il me manque 256

🙄
Lu b0mbjack,

C'est pas mal. Au feeling, comment traite tu tes entêtes et ta data ? si tu utilise des sprintf() ou strcpy() alors ton problème est compréhenssible. J'espère que tu utilise memcpy 🙂

Sonne ton code car je ne vois pas.

@+
_SebF - Sébastien FONTAINE
c'est du vb6.....no probleme ?
Re Seb
on raoncte que sur xp sp2 on peut pas crée des raw sockets!!

sur frameip, y'a TCP qui marche pas pour l'envoi des paquets
(je parle meme pas des changement d'ip) car sur xp sp2 c'est pas possible car le module internet de notre hote controle l'ip de la carte reseau avec le champ ip source, si elle correspond pas...le champ est corrigé automatiquement.

de plus la sp2 est integrée à mon xp, donc impossible de la killer
j'dois me tapé une partition et mettre un bon vieux windaube pour etre sur de pouvoir forger mes entetes
elle m'enerve trop cette sp2

mais sachant que le icmp marche bien sur frameip
dis moi comment tu as déclaré le socket

choix 1)
Sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)
choix 2)
Sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)

(les 2 choix marche chez moi, sauf que en mode raw je recoi quelque chose avec un protocole raw! ...valeur 255 et le mode icmp je recoi rien)
Lu b0mbjack,

Avec le SP2, tu ne peux pas en mode RAW faire de l'IPSpoofing et m^me pas utiliser TCP du tout.

Toutes mes socket sont en mode RAW 😉 C'est pourquoi j'ai dernièrement tout redéveloppé en Libpcap avec un argument supplémentaire -send_mode qui permet de choisir l'envoi en Socket RAW ou en Libpcap.

@+
_SebF - Sébastien FONTAINE
Lu Seb,

j'ai solutionner mon probleme de checksum tout est bon!!..ca fait plaisir!!
sinon quand je change le Type à 8 et le code toujours 0, c'est pour faire un echo request
ma question est la suivante


Ps: à la fin, j'compte déposé une source en vb6 sur ton site
"générateur de trame ip/tcp/udp/icmp" ...avec des commentaires

à bientot .....++
Lu b0mbjack,

Cool, je suis content pour toi. Peux tu nous expliquer ce que tu as fait pour corriger le problème ?

Pour la Data, je penses que l'on peux mettre ce que l'on veux. Dans mes dev, je remplis les data de "www.frameip.com" 🙂

@+
_SebF - Sébastien FONTAINE
Lu Seb,
y'a un truc que je comprend pas

il faut quel port pour utiliser l'echo request

quand j'envoi ma trame en echo request de Type 8 Code 0
dans mon sniffeur, j'ai le Type Reserved et le code N/A,c'est à dire rien
Lu b0mbjack,

Il n'y a pas de port dans ICMP.

@+
_SebF - Sébastien FONTAINE