В окне ascii захвата wireshark есть много точек (.). Что они значат именно? Какую информацию означают эти точки?
1 ответ
Какую информацию означают эти точки?
Они представляют непечатные символы - такие как переводы строк, переводы каретки, EOF, NUL и т.д. И т.д. Вы можете взглянуть на соответствующий шестнадцатеричный код (слева), чтобы выяснить, что такое фактический байт.
Рассмотрим этот пример, отображающий пакет «Сертификат» с HTTPS-сервера на клиент. Сообщение TLS «Сертификат» содержит как двоичные, так и текстовые данные; текст взят из самого сертификата:
Обратите внимание, что я выбрал поле "Длина сертификата", которое показывает, что длина сертификата составляет 1336 байт. Но если вы посмотрите на подсвеченные байты с "текстом" справа, он не говорит "1336", он говорит «..8». Это потому, что "..8" является ASCII представлением 0x000538.
Если вы посмотрите на таблицу ASCII, то увидите, что 0x00 - это «NUL (нулевой символ)», 0x05 - это «ENQ (запрос)», а 0x38 - "8". NUL и ENQ не предназначены для печати - они не могут быть отображены - поэтому Wireshark печатает «.» вместо.
Но в базовом протоколе это не текст в любом случае. Это 24-разрядное целое число - шестнадцатеричное 000538 равно десятичному 1336, что означает, что следующий сертификат имеет длину 1336 байт.
Далее, после запуска сертификата, мы видим обычные текстовые данные ASCII («Entrust, Inc.»), смешанные с двоичными нетекстовыми данными («..U ... 0").
Даже с полностью "текстовым" протоколом, таким как HTTP, вы увидите «.» для непечатаемых символов. Обратите внимание на «..» после «Соединение: закрыть», которое соответствует «Возврат каретки - перевод строки» (CRLF или \r \n):
Это означает, что wireshark использует ascii для декодирования битовых строк? Почему бы не использовать что-то вроде юникода, которое бы понимало весь текст независимо от языка?
Короче говоря, Wireshark просто отображает байты, которые могут быть или не быть текстовыми, но если они текстовые, они, скорее всего, будут ASCII, а не Unicode.
Wireshark отображает байты данных - как строковые, так и двоичные - в виде символов ASCII с символом «.» используется для обозначения любого непечатаемого символа. Существует множество сетевых протоколов, в которых для связи по проводам используются символы ASCII - FTP, SMTP, Telnet, HTTP, IRC и т.д. И т.д. Если сетевой протокол использует текст для связи, то он почти наверняка использует ASCII.
Я не знаком ни с какими протоколами, которые используют UTF/Unicode в качестве основы для связи. Любой протокол - такой как HTTP - который хочет передавать данные Unicode, будет сигнализировать на прикладном уровне, что следующие байты должны интерпретироваться как Unicode. (Я точно не знаю, но я ожидал бы, что интерпретаторы Wireshark, которые могут это отловить и отобразить соответствующим образом, существуют, но они все равно будут отображать ASCII в окнах "Пакетные байты", потому что это то, что это - байты - 8-битные блоки - лучше всего отображается в 8-битном текстовом формате, таком как ASCII.)