Я написал простое приложение, которое взаимодействует с использованием сокетов UDP (на языке C). Приложение простое: клиенты отправляют цифры на сервер, а сервер вычисляет их сумму.
Теперь я знаю, как я могу перехватить пакеты, которыми обмениваются клиент и сервер, но мне интересно, как я могу, используя Wireshark, наблюдать разницу между порядком байтов с прямым и младшим порядком байтов для моих пакетов?
networking
wireshark
udp
mirx
источник
источник
Network Byte Order
протоколы, то вся эта вещь с порядком байтов становится неактуальной (что является смыслом того, чтобы эти протоколы были в первую очередь). См. например stackoverflow.com/q/19207745/31326Ответы:
На протоколах, не распознанных Wireshark, вы увидите только пакеты TCP или UDP с «непарсированным» полем полезной нагрузки. если протокол «распознается» Wireshark (BOOTP, DHCP, DNS, SMB, HTML и т. д.), вы увидите, что Wireshark «формирует» область полезной нагрузки TCP / UDP, отображая соответствующие распознанные поля протокола более высокого уровня.
Wireshark включил много
dissectors
для хорошо известных протоколов, и вы можете создайте свой собственный, если вы хотите отобразить свою конкретную полезную нагрузку протокола в отформатированном виде; посмотреть здесь. https://www.wireshark.org/docs/wsdg_html_chunked/ChDissectAdd.htmlв вашем случае ваш диссектор может иметь дело с «порядком байтов» определенного поля, обрабатывающего разрешенные значения.
Пожалуйста, примите во внимание, что последовательность байтов состоит в том, что «порядковый номер», с другой стороны, является первым из нескольких вложенных слоев числового представления информации (таких как размер байта, знак / без знака, целое число / с плавающей запятой и т. Д.), Преобразующего конкретную последовательность байтов в число.
источник
Невозможно определить, было ли число отправлено с порядковым или большим если нет каких-то очень строгих ограничений на числа, так что их можно понять только одним способом, то есть быть слишком большим или слишком маленьким, если понимать его неправильно.
Стандартный способ сделать это, добавить заголовок к вашему пакет, который предоставляет информацию о его содержимом, например, его полезная нагрузка большой или маленький порядок байтов. Или вы можете посылать пакеты всегда большой или маленький порядок байтов, с отправителем и получателем, динамически меняющими байты если необходимо.
Помните, что, как говорит Википедия о Протокол пользовательских датаграмм :
UDP в основном используется при потоковой передаче данных, но при доставке всех пакетов не важно. Например, камера безопасности, отправляющая видео, когда допустимо потерять несколько кадров при прибытии поврежден или вышел из строя.
Сервер, который делает сумму чисел, не является хорошим кандидатом для UDP, потому что если пакеты потеряны или повреждены, то сумма неверна. TCP который гарантирует правильную доставку, должен быть предпочтительным здесь. Встраивая отказоустойчивые меры в свой поток UDP, вы скоро окажетесь переизобретая ПТС.
Самое простое решение для отслеживания входящих сообщений - это иметь свой сервер При желании выведите информацию на консоль. Это может контролироваться параметром, указанным при вызове, или с помощью директивы препроцессора отладки (#ifdef для C / C ++).
источник
Обратите внимание на значения в разделе, который описывает разбивку для вас и сравните с необработанным гексом. Посмотрите на поле, которое больше одного байта, и посмотрите, есть ли в необработанном шестнадцатеричном коде младший или старший порядок байтов. То есть val (16) в разбивке и в hexdump (так как его 2-байтовое поле) показывает: 00 10 для старшего байта и будет 10 00 для младшего байта. Надеюсь, это поможет.
источник