2.0 Comment gérer le chevauchement de packets

-FaLcOn-

Magouilleur
Inscrit
9 Mai 2012
Messages
44
Reactions
0
#1
Salut

Je suis en train de faire un sniffer classique, et j'ai remarqué que certains packets ne remplissaient pas toujours tout le buffer

On m'a dit que les packets pouvaient se chevaucher, donc si j'ai bien compris:

Pour que les choses soient clair, on va dire que le packet TCP est "packetTCP" et que le packet Dofus à parser dans ce packet est "packetDOF"

Quand la longueur trouvée dans un packetDOF à la même longueur que le contenue du packetTCP, tout est gucci

Quand cette longueur est inférieur à la taille du packetTCP, ça veut dire qu'il y a au moins un autre packetDOF à parser dans le même packetTCP

Si le cas ci-dessus se produit, et que je recalcule la taille prochain packetDOF de ce même packetTCP, et que cette taille est inférieur à la taille restante du packetTCP, ça veut dire que je vais sans doute avoir le reste dans le prochain packetTCP?

Je ne sais pas si j'ai bien compris ces petits détails du protocol Dofus est-ce que quelqu'un voudrait bien m'éclairer sur ces points :D
 
Inscrit
26 Mars 2011
Messages
26
Reactions
1
#2
Il ya 2 cas, soit le message est envoyée sur plusieurs packet (le 226 si la map est peuplée par exemple). En gros , si tu regarde les sources, le client calcule la taille du message et la compare avec la taille du packet si la taille du message est plus grande il met une variable _splittedPacket = true et sauvegarde le tout dans un buffer, une fois que la taille du buffer = la taille du message il le traite.

Le 2 eme cas ou tu trouveras 2 message dans le meme packet ( ou meme 1 message entier et une partie d'un 2 eme message ( retour au cas 1)), dans ce cas a la fin de ta fonction "parse" tu test si il ya des bytes restants et tu fait appel a la meme fonction pour traiter la 2 eme partie.

Tu trouveras tout les details dans com.ankamagames.jerakine.network.ServerConnection , plus precisement dans la function lowReceive (ligne 641 chez moi).
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#3
d'ailleurs _splittedPacket = true sert un peu a decorer , parceque si le buffer est vide alors le "packet" (qui en vrai est un message) est pas "splitted" et si le buffer est pas vide alors le message est "splitted"

du coup je suis enervé qu'on utilise ma memoire pour stocker une variable qui sert a rien
 

-FaLcOn-

Magouilleur
Inscrit
9 Mai 2012
Messages
44
Reactions
0
#4
D'acc merci j'avais la mauvaise approche :)
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#5
@ToOnS peut-être que ça va plus vite de vérifier un booléen ;)
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#6
Oui , c'est meme certain que c'est pourca :p , c'est plus simple
et vraiment aujourd'hui on est pas a un octet de RAM près (et du coup encore 8 fois moins a un bit)
 
Haut Bas