Как Wireshark интерпретирует порядок байтов? - PullRequest
1 голос
/ 07 мая 2019

Я работаю с заголовком радиоленты 802.11 , создавая свой собственный синтаксический анализатор, в котором говорится, что формат пакета такой: длина составляет 2 байта:

enter image description here

В wireshark это шестнадцатеричный заголовок заголовка, где 2 байта 19 00 - это поле длины, но wireshark игнорирует завершающий 00 и интерпретирует его как длину 25 (десятичную) вместо длины 6400 (десятичное число):

enter image description here

Как Wireshark (правильно) узнает, как правильно интерпретировать число?

Ссылка выше говорит, что длинахранится в порядке с прямым порядком байтов, а моя система имеет порядок байтов, поэтому я не уверен, что происходит на этом фронте?

Ответы [ 4 ]

5 голосов
/ 08 мая 2019

То, как Wireshark интерпретирует этот порядок, зависит от разработчиков диссектора. Они выбирают либо чтение буфера как младший или большой порядок байтов. Для каждого типа есть разные функции разбора. Порядковый номер для использования обычно находится в документации протокола.

Протокол, на который вы смотрите, имеет младший порядок. Я не уверен, почему ( оригинал ) принял ответ, и комментарии предполагают обратное. 19 00 - это 25 в десятичном виде, если используется младший порядок. Это может быть немного запутанным, но маленький конец приходит первым. Вы можете прочитать об этом здесь .

2 голосов
/ 08 мая 2019

Боюсь, что (оригинальный) принятый ответ, который обычно был бы правильным, не корректен для заголовка Radiotap.

Big-endian является стандартом для порядка сетевых байтов, однако Документация о радиоленте конкретно гласит:

Данные указываются в порядке байтов с прямым порядком байтов, все поля данных, включая поля it_version, it_len и it_present в заголовке радиоленты, должны указываться с прямым порядком байтовпорядок байтов.

1 голос
/ 07 мая 2019

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

" Big-endian является наиболее распространенным форматом в сети передачи данных; поля в протоколах набора протоколов Интернета, такие как IPv4, IPv6, TCP и UDP, передаются в порядке байтов По этой причине порядок байтов с прямым порядком байтов также упоминается как порядок сетевых байтов"

0 голосов
/ 08 мая 2019

«little-endian» означает, что младший байт сохраняется до старшего байта.

Два байта, которые сохраняются, это 19 00 (шестнадцатеричный).Младший байт равен 19 (шестнадцатеричный), а старший байт - 00 (шестнадцатеричный).Таким образом, общее число равно 0019 (шестнадцатеричное) или 25 (десятичное).

Если вы используете это в системе с прямым порядком байтов, вам не нужно выполнять какие-либо порядковые преобразования.Если вы пишете программу, которая также предназначена для систем с прямым порядком байтов, вам нужно быть осторожным с порядком байтов.

...