Wireshark-как я могу наблюдать маленькую endian большую разницу в байтах в порядке использования Wireshark?

Я написал простое приложение, которое взаимодействует с помощью UDP сокетов (на C). Приложение простое: клиенты отправляют числа на сервер, а сервер вычисляет их сумму.

теперь я знаю, как я могу перехватывать пакеты, которыми обмениваются клиент и сервер, но мне интересно, как я могу, используя Wireshark, наблюдать разницу между малым порядком байтов и большим порядком байтов для моих пакетов?

16
задан mirx
02.04.2023 11:57 Количество просмотров материала 2851
Распечатать страницу

3 ответа

на Wireshark не признал протоколы вы увидите только TCP или UDP-пакеты, "не разбирается" содержимое поля. если протокол "является" признанным программой Wireshark (протокол bootp, DHCP-серверы, DNS, SMB, в формате HTML и т. д.) Вы увидите, что Wireshark "формы" протокол TCP/области УДП грузоподъемностью отображением соответствующих признанных высших сферах протокола уровня.

Wireshark включил много dissectors для известных протоколов и вы можете создайте свой собственный, если вы хотите отобразить полезные данные конкретного протокола в отформатированном виде; смотрите здесь. https://www.wireshark.org/docs/wsdg_html_chunked/ChDissectAdd.html

в вашем случае ваш диссектор может иметь дело с" endianness " определенного поля, обрабатывающего разрешенные значения.

Пожалуйста, обратите внимание, что последовательность байтов-это только то, что "endianness", с другой стороны, является первым из нескольких вложенных слоев числового представления информации (например, размер байта, знак/без знака, целое число/плавающее и т. д.) преобразование определенного байта последовательность в число.

4
отвечен Pat 2023-04-03 19:45

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

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

помните, что, как говорит Википедия о Протокол Датаграмм Пользователя:

Он не имеет диалогов рукопожатия, и, таким образом, предоставляет программу пользователя к любой ненадежности базовой сети: нет никакой гарантии доставки, заказа или защиты от дублирования.

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

сервер, который делает сумму чисел не является хорошим кандидатом для UDP, потому что если пакеты потеряны или повреждены, то сумма ошибочна. TCP которое гарантирует что правильная доставка быть предпочтенным здесь. Построение отказоустойчивых мер в потоке UDP, вы скоро найдете себе изобретать протокол TCP.

самое простое решение для следующих входящих сообщений на ваш сервер при необходимости распечатайте информацию на консоли. Это может управляться параметром, заданным при вызове, или директивой debug pre-processor (#ifdef для C / C++).

2
отвечен harrymc 2023-04-03 22:02

наблюдайте за значениями в разделе, который описывает разбивку для вас и сравните с сырым шестнадцатеричным. Посмотрите на поле, которое больше, чем один байт и посмотреть, если в RAW hex это в маленькой или большой endian. То есть. val (16) в разбивке и в шестнадцатеричном (так как его поле 2 байта) показывает: 00 10 для большого эндиана, и он покажет 10 00 для маленького эндиана. Надеюсь, это поможет.

0
отвечен chris 2023-04-04 00:19

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх