1
votes

Comment Wireshark interprète-t-il l'ordre des octets?

Je travaille avec le en-tête radiotap 802.11 pour créer mon propre analyseur et il indique que le format du paquet est le suivant où la longueur est de 2 octets:

 entrez la description de l'image ici

Dans WireShark, l'hex de l'en-tête est celui-ci où les 2 octets 19 00 sont le champ de longueur, mais WireShark ignore le 00 de fin et l'interprète comme legnth 25 (décimal) au lieu de longueur 6400 ( décimal):

 entrez la description de l'image ici

Comment WireShark sait-il (correctement) interpréter correctement le nombre?

Le lien ci-dessus indique que la longueur est stockée dans little endian et mon système est little endian donc je ne suis pas sûr de ce qui se passe sur ce front?


4 commentaires

"ordre des octets du réseau" signifie-t-il quelque chose pour vous? ntohs () et tout ça


Ce n'est pas que Wirehark. Les paquets réseau standard codent les données dans l'ordre des octets du réseau. Votre interprétation de la spécification est erronée. C'est un gros édian (ordre des octets du réseau), pas un petit boutien


@slebetman La page de spécification liée dit en fait que "tous les champs de données ... dans l'en-tête radiotap doivent être spécifiés dans l'ordre des octets petit boutiste". (Peut-être un choix de conception étrange, mais vous devez suivre la documentation.)


Ne publiez pas d'images. Publiez toujours tout dans le texte.


4 Réponses :


1
votes

Depuis https://en.wikipedia.org/wiki/Endianness

" Big-endian est le format le plus courant dans les réseaux de données; les champs des protocoles de la suite de protocoles Internet, tels que IPv4, IPv6, TCP et UDP, sont transmis en big-endian ordre. Pour cette raison, l'ordre des octets big-endian est également appelé ordre des octets du réseau "


5 commentaires

Ça me revient maintenant, faire ça en java, oublier l'ordre des octets net ... quelle est la règle pour l'appliquer? Les adresses MAC sont déjà dans le bon ordre, n'est-ce pas?


Désolé, je ne peux pas vous aider, ce n'est pas mon domaine, je connais juste une base. Demandez une autre question si vous ne parvenez pas à la comprendre par vous-même. Bonne chance !


@Crizly La règle générale est d'appliquer l'ordre des octets du réseau à tout. Toutes les normes IEEE et IETF utilisent l'ordre des octets du réseau. Les rares exceptions sont les protocoles propriétaires (généralement développés par des amateurs qui ne connaissent pas l'ordre des octets du réseau ou ignorent délibérément l'ordre des octets du réseau au profit d'une «optimisation» prématurée). Donc, si ce sont des choses comme TCP, IP, ARP, MAC, etc., utilisez l'ordre des octets du réseau. S'il s'agit de choses comme bencoding (bittorrent), protobuf (google) se réfère à leur documentation respective


... cependant cet en-tête est clairement stocké en little-endian .


La documentation de Radiotap nous dit que cette réponse est incorrecte, @atanas



5
votes

La manière dont Wireshark interprète l'endianess appartient aux développeurs du dissecteur de décider. Ils choisissent de lire le tampon en tant que little endian ou big endian. Il existe différentes fonctions d'analyse pour chaque type. La finalité à utiliser se trouve généralement dans la documentation du protocole.

Le protocole que vous étudiez est peu endian. Je ne sais pas pourquoi la réponse ( originale ) a accepté et les commentaires suggèrent le contraire. 19 00 est égal à 25 en décimal, lors de l'utilisation de little endian. Cela peut être un peu déroutant, mais la petite fin vient en premier. Vous pouvez en savoir plus sur ici .


0 commentaires

0
votes

"little-endian" signifie que l'octet bas est stocké avant l'octet haut.

Les deux octets stockés sont 19 00 (hexadécimal). L'octet de poids faible est 19 (hex) et l'octet de poids fort est 00 (hex). Le nombre global est donc 0019 (hexadécimal) ou 25 (décimal).

Si vous exécutez ceci sur un système little-endian, vous n'avez pas besoin de faire de conversion endian. Si vous écrivez un programme que vous souhaitez également travailler sur des systèmes big-endian, vous devrez faire attention avec endian-ness.


0 commentaires

2
votes

J'ai peur que la réponse acceptée (originale), qui serait normalement correcte, ne soit pas correcte pour l'en-tête Radiotap.

Big-endian est la norme pour l'ordre des octets du réseau, mais la documentation Radiotap indique spécifiquement:

Les données sont spécifiées dans l'ordre des octets little endian, tous les champs de données, y compris les champs it_version, it_len et it_present dans l'en-tête radiotap, doivent être spécifiés dans l'ordre des octets little endian.


0 commentaires