TZSP

TZSP (англ. TaZmen Sniffer Protocol) — это протокол инкапсуляции данных, используемый для обёртывания других протоколов. Наиболее часто применяется для передачи пакетов беспроводных сетей формата 802.11 с целью поддержки систем обнаружения вторжений, организации мониторинга беспроводных сетей и других беспроводных приложений.

Краткое описание протокола

Ряд датчиков 802.11 и беспроводных точек доступа используют протокол TZSP для захвата сетевых пакетов. Это открытый протокол, изначально разработанный для инкапсуляции других протоколов поверх UDP. Основной областью применения TZSP является сбор беспроводного трафика и передача его по проводной сети.

Заголовок протокола

Каждый пакет TZSP состоит из трёх частей: 4-байтного заголовка, за которым следуют одно или несколько тегированных полей (последним обязательно служит TAG_END (0x01)), после чего размещаются инкапсулированные данные.

Заголовок и тегированные поля используют порядок байтов big-endian, где это применимо.

Заголовок Версия (1 беззнаковый байт)
Тип (1 беззнаковый байт)
Инкапсулированный протокол (1 беззнаковое короткое целое)
Тегированные поля Тегированные поля (переменной длины)
Завершение тегированного поля (1 беззнаковый байт)
Инкапсулированный пакет Инкапсулированный пакет (переменной длины)

Версия

Версия TZSP всегда должна быть равна 1 (0x01).

Тип

0 (0x00) — список полученных тегов  
1 (0x01) — пакет для передачи  
2 (0x02) — зарезервировано  
3 (0x03) — конфигурация  
4 (0x04) — контроль связи (keepalive)  
5 (0x05) — открытие порта  

Инкапсулированный протокол

  1 (0x01) — Ethernet  
 18 (0x12) — IEEE 802.11  
119 (0x77) — Prism Header  
127 (0x7F) — WLAN AVS  

Тегированные поля

Тегированные поля состоят из однобайтового типа тега, однобайтового значения длины и переменного объёма данных. Длина не включает байты типа и длины. Все декодеры, совместимые с TZSP, должны пропускать неизвестные теги.

<1 беззнаковый байт> Тип тега  
<1 беззнаковый байт> Длина тега  
<переменная длина> Данные  

Существуют два исключения. Во-первых, TAG_END (0x01) означает завершение всех тегированных полей и не содержит ни длины, ни данных. Во-вторых, TAG_PADDING (0x00) может быть вставлен в любое место, его декодер должен игнорировать. Этот тег также не содержит данных и длины.

Ниже приведены допустимые типы тегов TZSP:

TAG_PADDING = 0 (0x00)

Этот специальный тег не содержит ни длины, ни данных. Получателю его следует игнорировать. Иногда используется для выравнивания данных по границе слова.

TAG_END = 1 (0x01)

Этот специальный тег также не содержит длины и данных. После него начинается инкапсулированный пакет (до конца UDP-пакета). Является обязательным — ни один другой переменный тег не может следовать за ним.

TAG_RAW_RSSI = 10 (0x0A)

Содержит необработанное значение уровня приёма сигнала с сенсора. Данные представлены знаковым байтом или знаковым коротким целым.

TAG_SNR = 11 (0x0B)

Содержит необработанное значение шума с сенсора. Данные представлены знаковым байтом или знаковым коротким целым.

TAG_DATA_RATE = 12 (0x0C)

Поле фиксирует скорость передачи данных для инкапсулированного пакета.

Допустимые значения:

  2 (0x02) = 1 МБ/с  
  4 (0x04) = 2 МБ/с  
 11 (0x0B) = 5,5 МБ/с  
 12 (0x0C) = 6 МБ/с  
 18 (0x12) = 9 МБ/с  
 22 (0x16) = 11 МБ/с  
 24 (0x18) = 12 МБ/с  
 36 (0x24) = 18 МБ/с  
 44 (0x2C) = 22 МБ/с  
 48 (0x30) = 24 МБ/с  
 66 (0x42) = 33 МБ/с  
 72 (0x48) = 36 МБ/с  
 96 (0x60) = 48 МБ/с  
108 (0x6C) = 54 МБ/с  

Следующие значения могут использоваться в старых сенсорах на базе Prism, но не должны выставляться энкодерами TZSP (рекомендуется только поддержка декодирования):

 10 (0x0A) = 1 МБ/с  
 20 (0x14) = 2 МБ/с  
 55 (0x37) = 5,5 МБ/с  
110 (0x6E) = 11 МБ/с  

TAG_TIMESTAMP = 13 (0x0D)

Содержит время получения пакета сенсором на уровне MAC. Представлено как четырёхбайтовое беззнаковое целое.

TAG_CONTENTION_FREE = 15 (0x0F)

Показывает, был ли пакет отправлен в контеншн-фри периоде. 1 байт, беззнаковый.

TAG_DECRYPTED = 16 (0x10)

Показывает, был ли пакет расшифрован. 1 байт, беззнаковый.

TAG_FCS_ERROR = 17 (0x11)

Используется для указания наличия ошибки контрольной суммы кадра (FCS) при приёме. 1 байт, беззнаковый. Значение один (0x01) указывает на наличие FCS-ошибки; ноль (0x00) или отсутствие данного поля — на отсутствие ошибки. Все другие значения зарезервированы.

TAG_RX_CHANNEL = 18 (0x12)

Канал, на котором работал сенсор при захвате пакета (не обязательно совпадает с передающим каналом). Представлен как беззнаковый байт.

TAG_PACKET_COUNT = 40 (0x28)

Монотонно увеличиваемый счётчик пакетов. Представлен четырёхбайтовым беззнаковым целым.

TAG_RX_FRAME_LENGTH = 41 (0x29)

Длина принятого пакета (не обязательно совпадает с длиной исходного передаваемого пакета, который мог быть усечён). Представлен как двухбайтовое беззнаковое короткое целое.

TAG_WLAN_RADIO_HDR_SERIAL = 60 (0x3C)

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

Инкапсулированный пакет

Инкапсулированный пакет размещается сразу после тегированных полей. Он может быть укорочен по сравнению с исходным пакетом и не обязан соответствовать длине, указанной в TAG_RX_FRAME_LENGTH. Предполагается, что он занимает весь оставшийся объём UDP-пакета.

Поддержка в открытом ПО

Примечания

Литература