Ув.коллеги, помогите разобраться со структурой bgdl файла. Вроде основная часть понятна, но есть определенные нестыковки, непонятна нагрузка некоторых байт в логе.
Итак, заголовок лога понятен и разбирается нормально. На первом скриншоте все отметил.
Код:
header {
int magic = "BGDL" = 0x4247;
int version = 2;
int type = 1 (IP);
int header_params_length;
param<> {
int param_type;
int param_value_length;
opaque value;
}
}
Длина параметров заголовков=0x2с, адрес этого поля 0x10, значит заголовок кончается на 0x3с (вернее 0x3с это уже начала блока данных).
А вот с блоком данных оказалось сложнее. Согласно документации
Код:
data {
block<> {
int block_length;
long reserved;
int reserved;
opaque block_data;
}
}
Первые 4 байта - длина блока должна быть, но она какая-то нереальная (0007FF00). Вобщем пропустил это. Нашел с чего должен начинать нетфлоу пакет. 00 05 - версия, 00 1Е - 30 потоков в пакете (по спецификации от 1 до 30).
Между началом нетфлоу и концом заголовка - 6 полей по 4 байта, т.е. какие то 6 int чисел. По спецификации должно быть 3 числа, причем два из них пустыми должны быть.
Похожие два инт числа есть перед началом первого и второго пакета нетфлоу (00000130 0B7D0D84 и 00000130 0B7D0D86) Может быть это относится к типу данных opaque (но для переменной длины должно быть только 4 байта указывающих длину блока, и опять же - не сходится длина в этих числах никак с реальной длиной).
Более того, если идут к data block<> block<> - то вообще полей ну никак не хватает =) а если идет data block <> { lenght, long res, int res, opaque data, opaque data} то тогда в начале поле лишнее и между opaque data лишнии поля какие то.
Брррр вобщем, крыша едет, прошу помощи =)
ps хочу понять что за 6*4 байт между концом заголовка и началом первого пакета данных, и что за 2*4 между пакетами данных.
pps адрес строки с последними данных если что 0x99В338, а сам файл кончается байтом с адресом 0xa0017b. Итого всего 10486140 байт. Никакими перемножениями длин блоков на числа в предполагаемых длинах заголовках получить ни длину блока с данными по пакету нетфлоу, ни длину всех данных получить не удалось =(