Для записи перехваченных пакетов в файлы
.NCF
или .NCFX CommView и CommView для WiFi используют формат данных,
описанный ниже. Это открытый формат, который можно использовать в
собственных приложениях для обработки log-файлов, созданных
CommView for WiFi. Этот формат также можно использовать для прямого
обмена данными между CommView for WiFi и пользовательским
приложением (это метод описан ниже).
Формат NCFX
Этот новый формат используется в CommView for WiFi начиная с версии
7.3. Предыдущие версии CommView for WiFi, а также текущие версии
CommView (анализатор проводных сетей) используют формат NCF,
который также описан в этой главе, в следующем разделе.
Пакеты идут последовательно. Перед каждым пакетом идут два и более
заголовка, структура которых описана ниже. Все поля заголовка,
размер которых превышает 1 байт, не подписаны и используют формат с
прямым порядком байтов.
Основной заголовок – обязательный. Длина = 20
байтов.
Название поля
|
Длина (байты)
|
Описание
|
Длина данных
|
4
|
Длина тела пакета, включая длину этого и последующих заголовков, а
также длину данных в пакете (тело пакета).
|
Год
|
2
|
Дата создания пакета (год)
|
Месяц
|
1
|
Дата создания пакета (месяц)
|
День
|
1
|
Дата создания пакета (день)
|
Часы
|
1
|
Время создания пакета (часы)
|
Минуты
|
1
|
Время создания пакета (минуты)
|
Секунды
|
1
|
Время создания пакета (секунды)
|
Микросекунды
|
4
|
Время создания пакета (микросекунды)
|
Тип среды
|
1
|
Тип среды пакета. 0x01 для пакетов Wi-Fi, 0x00 для проводных
пакетов.
|
Флаг расшифровки
|
1
|
0x01, если пакет был расшифрован CommView for WiFi и сохранен в
расшифрованном виде. В противном случае, указывается значение
0x00.
|
Направление
|
1
|
Для проводных пакетов - направление пакета.
0x00
для транзитных, 0x01 для входящих, 0x02 для исходящих. Для пакетов
Wi-Fi
всегда указывается значение 0x00.
|
Зарезервировано 1
|
1
|
В настоящее время не используется.
|
Зарезервировано 2
|
1
|
В настоящее время не используется.
|
Заголовок RF – обязательный. Длина = 20 байтов.
Название поля
|
Длина (байты)
|
Описание
|
Длина RF-заголовка
|
2
|
Длина этого заголовка, включая длину всех дополнительных расширений
(если такие имеются).
|
Статус
пакета
и
модуляции
|
2
|
Битовая маска, где установлены один или несколько из следующих
битов:
Bit 0 – пакет поврежден (некорректный FCS);
Bit 1 – пакет, передаваемый с PHY-рейтом HT (802.11n)
Bit 2 – пакет, передаваемый с PHY-рейтом VHT
(802.11ac)
Bit 3 – пакет, передаваемый с PHY-рейтом HE (802.11ax)
Bit 4 – модуляция HE, 0 – OFDM, 1 – OFDMA, действительно только,
если установлено значение для Bit 3.
|
Диапазон
|
2
|
0x40
для 5 Ггц, 0x80 для 2,4
Ггц.
|
Канал
|
2
|
Канал Wi-Fi.
|
Уровень шума, dBm
|
1
|
Уровень шума, измеряемый в дБм. Указывается как положительное
значение. Например, уровень -90 dBm указывается как 90.
|
Уровень сигнала, dBm
|
1
|
Уровень сигнала, измеряемый в дБм. Указывается как положительное
значение. Например, уровень -30 дБм указывается как
30.
|
Уровень сигнала в процентах
|
1
|
Уровень сигнала в процентах.
|
Зарезервировано
|
1
|
В настоящее время не используется.
|
PHY-рейт
|
4
|
Скорость передачи данных в Мбит/с, умноженная на 10
|
Дополнительные расширения
|
4
|
Битовая маска, указывающая на наличие дополнительных расширений,
которые следуют за заголовком RF. Например, если установлены биты
3, 2 и 0, тогда за этим заголовком RF следует расширение типа 0,
затем расширение типа 2, и после этого расширение типа 3.
|
Поддерживаемые в настоящее время расширения
MCS Header Type 0 – опциональный. Длина = 4 байта.
Обратите внимание, что MCS Header Type 0 не добавляется, если вы
захватываете пакеты адаптером, поддерживающим стандарт старее
802.11ac. Расширение добавляется, только если вы выполняете захват
адаптером стандарта 802.11ac или 802.11ax.
Название поля
|
Длина (байты)
|
Описание
|
Индекс MCS
|
1
|
Индекс MCS.
|
Число потоков
|
1
|
Число пространственных потоков MIMO минус 1, то есть, параметр 0x00
обозначает один поток.
|
Ширина канала
|
1
|
Ширина канала.
Если значение bit 4 в поле
Статус пакета и модуляции
равно 0 (модуляция OFDM):
0x00 – 20 МГц, 0x01 – 40 МГц, 0x02 – 80 МГц, 0x03 – 160 МГц.
Если значение bit 4 в поле
Статус пакета и модуляции
равно 1 (модуляция OFDMA):
0x00 - 26-tone RU, 0x01 – 52-tone RU, 0x02 – 106-tone RU, 0x03 –
242-tone RU,
0x04 – 484-tone RU, 0x05 – 996-tone RU, 0x06 – 1992-tone RU
(996x2-tone RU)
|
GI
|
1
|
Защитный интервал (Guard Interval): 0x00 - 0.8μs, 0x01 - 0.4μs,
0x02 - 1.6μs, 0x03 - 3.2μs
|
Следом за заголовками указывается тело пакета, которое не содержит
4-byte FCS на конце.
Пример 1: Пакет длиной 350 байт, пересылаемый с legacy PHY-рейтом 6
Мбит/с, сохраняется в следующем виде:
[20 байтов для основного заголовка, где поле
Длина данных
имеет значение 390] + [20 байтов для заголовка RF, где поле
Длина данных
RF
имеет значение 20, а поле
Дополнительные расширения
содержит значение
0x00000000]
+ [350 байтов тела пакета]
Пример 2: Пакет длиной 1002 байта, пересылаемыйс PHY-рейтом VHT
72,2 Мбит/с, сохраняется в следующем виде:
[20 байтов для основного заголовка, где поле
Длина данных
имеет значение 1046] + [20 байтов для заголовка RF, где поле
Длина данных
RF
имеет значение 24,
а поле
Дополнительные расширения
содержит значение 0x00000001] + [4 байта для заголовка MCS] + [1002
байта тела пакета]
NCF Format
Формат используется CommView (любая версия), а также CommView for
WiFi (версии до 7.2 включительно). Новые версии CommView for WiFi
(7.3 и далее) используют формат NCFX, который описан в
соответствующем разделе выше.
Пакеты записываются последовательно. Перед каждым пакетом идет
24-байтовый заголовок, структура которого описана ниже. Все поля
заголовка, размер которых превышает 1 байт, используют формат с
прямым порядком байтов.
Название поля
|
Длина (байты)
|
Описание
|
Длина данных
|
2
|
Длина тела пакета, который идет следом за
заголовком.
|
Длина исходных данных
|
2
|
Исходная длина тела пакета, который идет следом за заголовком (без
компрессии). Если компрессия не применялась, то это поле равно
предыдущему.
|
Версия
|
1
|
Версия формата пакета (текущая – 0).
|
Год
|
2
|
Дата создания пакета (год)
|
Месяц
|
1
|
Дата создания пакета (месяц)
|
День
|
1
|
Дата создания пакета (день)
|
Часы
|
1
|
Время создания пакета (часы)
|
Минуты
|
1
|
Время создания пакета (минуты)
|
Секунды
|
1
|
Время создания пакета (секунды)
|
Микросекунды
|
4
|
Время создания пакета (микросекунды)
|
Флаги
|
1
|
Битовые флаги:
Среда передачи
|
0...3
|
Тип пакета (0 - Ethernet, 1 - WiFi, 2 - Token Ring)
|
Расшифрован
|
4
|
Пакет был расшифрован (только для пакетов WiFi)
|
Поврежден
|
5
|
Пакет был искажен, т. е. имел некорректную контрольную сумму
(только для пакетов WiFi)
|
Компрессия
|
6
|
Пакет хранится в сжатом виде
|
Зарезервировано
|
7
|
Резерв
|
|
Уровень сигнала
|
1
|
Decrypted
|
PHY-рейт
|
1
|
Broken
|
Диапазон
|
1
|
Compressed
|
Канал
|
1
|
Номер канала (только для пакетов WiFi)
|
Направление
|
1
|
Для проводных пакетов - направление пакета. 0x00 для транзитных,
0x01 для входящих, 0x02 для исходящих. Для пакетов WiFi – старший
байт для поля
PHY-рейт,
для тех случаев, когда однобайтное поле PHY-рейт недостаточно для
хранения значения переменной (т.е. если значение превышает
255).
|
Уровень сигнала (dBm)
|
1
|
Уровень сигнала в дБм (для пакетов WiFi)
|
Уровень шума (dBm)
|
1
|
Уровень шума в дБм (для пакетов WiFi)
|
Данные
|
Переменная
|
Тело пакета (без изменений, в исходном виде). Если установлен флаг
компрессии, данные сжимаются с помощью свободно распространяемой
библиотеки Zlib 1.1.4. Длина записывается в поле
Длина данных.
|
Общая длина заголовка составляет 24 байта.
Если пакеты сохраняются в сжатом виде, поле
Длина данных
показывает длину данных после сжатия, в то время как поле
Длина исходных данных
показывает исходную длину. Если пакет сохраняется без сжатия, оба
поля содержат одинаковое значения.
|