2.0 Comment gérer le chevauchement de packets

Discussion dans 'Questions / Réponses' créé par -FaLcOn-, 13 Juin 2018, à 15:57.

  1. -FaLcOn-

    -FaLcOn- Magouilleur

    Inscrit:
    9 Mai 2012
    Messages:
    44
    J'aime reçus:
    0
    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
     
  2. Waren

    Waren Membre

    Inscrit:
    26 Mars 2011
    Messages:
    15
    J'aime reçus:
    3
    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).
     
  3. ToOnS

    ToOnS Membre Actif

    Inscrit:
    8 Avril 2009
    Messages:
    977
    J'aime reçus:
    51
    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
     
  4. -FaLcOn-

    -FaLcOn- Magouilleur

    Inscrit:
    9 Mai 2012
    Messages:
    44
    J'aime reçus:
    0
    D'acc merci j'avais la mauvaise approche :)
     
  5. Labo

    Labo Membre Actif

    Inscrit:
    16 Août 2013
    Messages:
    795
    J'aime reçus:
    59
    @ToOnS peut-être que ça va plus vite de vérifier un booléen ;)
     

En naviguant sur ce site web, vous acceptez les Termes et Conditions d'utilisation. Tout le contenu que vous pourrez trouver sur ce site est soumis à la license Creative Commons.