Messages sur plusieurs paquets (NetworkDataContainerMessage)

Inscrit
20 Janvier 2018
Messages
7
Reactions
1
#1
Hello!

J'essaye depuis plusieurs jours de parfaire mon analyseur de paquets, mais je sèche avec un paquet nommé "NetworkDataContainerMessage". En effet le header de celui-ci me donne une taille énorme (8Mb+), ce qui n'a pas l'air de correspondre à la réalité, et fait que mon programme lit beaucoup trop de paquets comme si ils appartenaient au "NetworkDataContainerMessage".

Je suis relativement sur que mon code pour lire le header est correct:

Python:
def get_packet_size(data: bytes, send_type: str) -> (int, int, int, int):
    header = bytes([data[0], data[1]])
    id = ((header[0] << 8) | header[1]) >> 2

    sizesize = header[1] & 0b11
    if send_type == "received":
        st = 2
    else:
        st = 6
    size = 0
    if sizesize == 0:
        size = 0
    elif sizesize == 1:
        size = data[st]
    elif sizesize == 2:
        size = data[st] << 8 | data[st + 1]
    elif sizesize == 3:
        size = ((struct.unpack("!B", data[st:st + 1])[0] & 255) << 16) + (
                (struct.unpack("!B", data[st + 1:st + 2])[0] & 255) << 8) + (
                       struct.unpack("!B", data[st + 2:st + 3])[0] & 255)
    return sizesize, size, st, id
Une idée de ce qu'il se passe?

Voici pour reference les contenus du paquet en question:

b'\x00\x0b\x88?\x00\x0e\xcd\x7f\xe7\xbf\xffB\x00\x95\x07\x00\x01\x11\x01\x00\x10\x03\xda@\x00\x06\xdc:\x00\t\xcf\x7f\xe8\xbf\xffB\x0c\xcd\x7f\xe7\xbf\xffB\x0f\xe4\x91\x01\xe6\xbf\xffB\x01\xf8q\x00\x04\xc12\x00\x07\xd7@\x00\n\x88?\x00\r\xb6\x85\x01\xe3\xbf\xffB\x1c\xaau\x00\x02\xcf@\x00\x05\x93B\x00\x0b\xcc\x07\xe1\xbf\xffB\x0e\xe1\x05\xe0\xbf\xffB\x00\x95\x07\x00\x00\x15\x01\x00\x0f\x03\xba\x89\x01\x00\x06\xe77\x9f\xc1\xffB\t\xcf\x7f\xe8\xbf\xffB\x0c\xcd\x7f\xe7\xbf\xffB\x0f\xe4\x91\x01\xe6\xbf\xffB\x01\xf42\x00\x04\xcf@\x00\x07\xa2E\x00\n\xb6\x05\xe4\xbf\xffB\r\xb6\x85\x01\xe3\xbf\xffB\x02\xa5\x13\xe2\xbf\xffB\x05\xb9\x89\x01\x00\x0b\xcc\x07\xe1\xbf\xffB\x0e\xe1\x05\xe0\xbf\xffB\x00\xbd2\x00\x00\x04\x02\x0b\x00\x00\x04\t\x00\x06+-*E\t.\x03\x02\x00\x03! .\x00\x03\x00\x06+*\x0cE\t.U\xfd\x07\x06\x00\x01\xa5\x13\x00\x00a]\xde\x00\x00\x19\x01s\x03\x00\x00\x00\x00\x00\x00\x19\xe5\x01\xec\x1c\x02\x01s\x06\x00\x00\x00\x00\x00\x00%\xd6\x01s\t\x00\x00\x00\x00\x00\x00%\xda\x01s\x0c\x00\x00\x00\x00\x00\x00C+\x01s\x0f\x00\x00\x00\x00\x00\x00:\xaa\x01\xec\x12\x03\x01s\x15\x08_\xe0\x98\x00\x00/\x06\x01s\x02\x00\x00\x00\x00\x00\x00\x07\x1a\x01s\x05\x00\x00\x00\x00\x00\x00\x19t\x01s\x08\x00\x00\x00\x00\x00\x00%\xd8\x01r\x0b\x00\x01s\x0e\x00\x00\x00\x00\x00\x00:s\x01\xec\'\x00\x01\xec\x11\x02\x01s\x14\x08_\xe0C\x00\x00>v\x01s\x01\x00\x00\x00\x00\x00\x00\x1b4\x01s\x04\x00\x00\x00\x00\x00\x00\x19\x9a\x01\xec\x1d\x04\x01s\x07\x00\x00\x00\x00\x00\x00%\xd7\x01r\n\x01\x01s\r\x00\x00\x00\x00\x00\x00\x07(\x01s\x10\x00\x00\x00\x00\x00\x00:t\x01\xec\x13\x04\x01s\x00\x00\x00\x00\x00\x00\x00\x02$a]\xa2\x01\x00 \x01p\x19\xf1\x02\x01p\x03\xa6\x01\x01p\x06\xae\x01\x01p\x1f\xf5\x02\x01p\t\xa1\x01\x01p"\x9d\x03\x01p\x0c\xa3\x01\x01p\x0f\xb1\x01\x01p\x12\xa7\x01\x01p\x15\xa4\x01\x01p\x18\xee\x02\x01p\x02\xb4\x01\x01p\x1b\xf0\x02\x01p\x05\xa2\x03\x01p\x1e\xf2\x02\x01p\x08\xa9\x01\x01p\x0b\xb3\x01\x01p\x0e\xaf\x01\x01p\x11\xa8\x01\x01p\x14\xb0\x01\x01p\x17\xb2\x1b\x01p\x01\xa2\x01\x01p\x1a\xde\x02\x01p\x04\xac\x01\x01p\x07\xb2\x01\x01p\n\xa5\x01\x01p#\x9e\x03\x01p\r\xdfH\x01p\x10\xaa\x01\x01p\x13\xad\x01\x01p\x16\xef\x02\x01p\x00\x00g\x99\x01\x01gq\x04\x00\x02\x02\x01X\xe5\x16\x00\x14\x01\x02\t\x13\x16\x19\x1a!#+,8:LNRWe\x7f\x8aX^\x01{\x00\x13\x0f\x00\x01\x00d\rd\x18\x00\x04\x00c\x18\x1e\x01\x08\x00d0d\x00c\xaa\x02\x1e\x01\x01\x00d d\x1c\x00\n\x00c2\x1e\x03\x07\x00c5\x1e\x03\r\x00dmd\x00d\x1bd\x00c-\x1e\x03\x0f\x00c9\x1e\x03\x0b\x00dzd\x00c.\x1e\x03\t\x00c\xa8\x02\x1e\x01\x01\x00d/d$\x00\x0e\x00c\xbf\x02\x1e\x04\x08\x00c\x80\x01\x1e\x04\x11\x00c\xbe\x02\x1e\x04\t\x00c|\x1e\x04\x12\x00c\x7f\x1e\x04\x0c\x00c\x82\x01\x1e\x04\r\x00c\xc0\x02\x1e\x04\x07\x00c\xbd\x02\x1e\x04\n\x00c~\x1e\x04\x0e\x00c\x81\x01\x1e\x04\x0f\x00c\xad\x02\x1e\x01\x01\x00c}\x1e\x04\x10\x00d\x87\x01d\x00c\x83\x01\x1e\x04\x0b\x1a\x00\x07\x00cE\x1e\x03\r\x00c\xac\x02\x1e\x01\x01\x00cD\x1e\x03\x0f\x00cG\x1e\x03\x0b\x00cH\x1e\x03\t\x00d\x17d\x00cI\x1e\x03\x07\x02\x00\x06\x00c\x06\x1e\x03\r\x00c\'\x1e\x03\x0b\x00ded\x00c\n\x1e\x03\x07\x00c(\x1e\x03\t\x00c\xab\x02\x1e\x01\x01\x0b\x00\x01\x00d\x14d)\x00\x01\x00d\x86\x01d\x10\x00\x01\x00d\x0cd\x1b\x00\x01\x00d?dA\x00\x01\x00d\xab\x01d\r\x00\x01\x00d\x0fd<\x00\x03\x00d\xc9\x01d\x00d\xa9\x02d\x00d\x9c\x01d,\x00\x01\x00dq\n?\x00\x02\x00d\xa9\x01\x1b\x00d\xa8\x01\x1b@\x00\x01\x00d\xa6\x01F>\x00\x01\x00d\xa4\x01\x050\x00\x01\x00dv\x05J\x00\x01\x00d\xdf\x02\x05Z\xc5\xb3\x00\x13\x0f\x97\xb8\xf5\r\xc4\xe9\r\x90\x81\x0e\x18\x0e\xc5\x0f\x9c\x0e\xb4\x10\x1cU\xe9\xad\x04\xe8\xad\x04\x8c\xbb\x04$n\x9e\xaa\x07\xdc\xa8\x07\xf4\xb9\x07\x1aV\x90\xc3\x04\x8c\xbb\x04\xc4\xc8\x04\x02<\xd8\x99\x02\xc8\x94\x02\xf8\x9d\x02\x0b\xb4\xc6\xd7\x13\x98\xd5\x13\xa8\xf1\x13)\x12\xec\x18\xf4\x17\xdc\x1a\x10\x8e\x9c\xac\x0c\x9c\x9c\x0c\xb4\xb2\x0c\x1b\xc8\xa7\xde\x18\xb0\xa5\x18\x00Ae\xf9\xa1\x06\x88\x95\x06\xec\xa4\x06\r\xb9\xbd\xe5\x14\xb0\xe3\x14\xa4\x80\x15<O\x81\xe4\x03\xb4\xe1\x03\xe0\xed\x03,\x06\xbd\x02\xac\x02\xa4\x03?\x19\xdd/\xf0.\xe42@I\xf5\x9e\x03\xd0\x9a\x03\x84\xa6\x03>\x01\x00\x00\x140\x01\x00\x00\x14J\x01\x00\x00\x14XQ>\x00\x14\x0f\x01\x01\x18\x00\x01\x1c\x00\x01$\x00\x01\x1a\x00\x01\x02\x01\x01\x0be\x01)\x00\x01\x10e\x01\x1b\x01\x00A\x00\x01\re\x01<\x00\x01,\x00\x01?\x00\x01@\x00\x01\x01\x00\x01>\x00\x010\x00\x01J\x00\x01^\xa9\x02\x12\x00h\x1d\x04\x00\x00\x00\x00h\t\x04\x00\x00\x00\x00hi\x02\x00\x00hU\x02\x00\x00d\xa24\x8e\x00\xcd\x01\xb21\x00\xff\xe6\xff\xc6AY\x01\x01\xc0\x00\x00\x00\x01\xab\x01\x04Z\x93\x00\xa8Z\x90d\x8b\x10\xdd\n\x00\x04LMDA\x00\x1aLes Mo'
 
Dernière édition:

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#2
Salut, ton code m'a l'air correct, et en effet l'analyse qu'il fait du NetworkDataContainerMessage est correcte.
A quel moment reçois-tu ce message ?
Es-tu sûr que le message que tu donnes à ta fonction est correct ?

Sinon, quelques conseils pour améliorer la lisibilité de ton code :
- bytes(data[:2]) plutôt que bytes([data[0], data[1]])
- en fait, le header peut être directement converti en entier: header = int.from_bytes(data[:2] 'big')
- du coup, id = header >> 2 et sizesize = header & 3
- pour size, je conseille size = int.from_bytes(data[st: st + sizesize], 'big')
 
Inscrit
20 Janvier 2018
Messages
7
Reactions
1
#3
Hello, merci pour les conseils.

Le problème est que je recois des paquets avec des informations erronées (là par example, j'ai réessayé avec la nouvelle version, et je recois un message avec id '4' - qui n'apparait pas dans le code source...).

J'ai lu ton tuto et réimplémenté mon sniffeur (j'utilisais pyshark avant), toujours le meme souci (or j'ai quasi exactement le meme code que toi!)

Je suis sur que le problème vient des messages encodés sur plusieurs paquets, je me demande si le protocole n'est pas différent pour ces messages là?
 
Haut Bas