Как разбить большие файлы детализации.

Технические вопросы по UTM 5.0
JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

Сообщение JAO »

Могу отрисовать в почту. Хотя это описание реальному не соответствует (естественно), но ключевые поля на своих местах.

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

Кто знает значение данных в .utm ? Здесь вот не все ($t - неизвестные). Нужны данные по ID связки, TCP-флаги, протокол, Tos.
И что за $time1 и $time2 ?

read ( FH, $t, 4 ); # 1-4
read ( FH, $src_ip, 4 ); # 5-8
read ( FH, $dst_ip, 4 ); # 9-12
read ( FH, $t, 8 ); # 13-20
read ( FH, $packets, 4 ); # 21-24
read ( FH, $bytes, 4 ); # 25-28
read ( FH, $time1, 4 ); # 29-32
read ( FH, $time2, 4 ); # 33-36
read ( FH, $src_port, 2 ); # 37-38
read ( FH, $dst_port, 2 ); # 39-40
read ( FH, $t, 16 ); # 41-56
read ( FH, $account_id, 4 ); # 57-60
read ( FH, $t, 4 ); # 61-64
read ( FH, $t_class, 4 ); # 65-68
read ( FH, $timestamp, 4 ); # 69-72
read ( FH, $t, 4 ); # 73-76

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

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

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

mikkey finn писал(а):судя по всему, get_nf_direct просто последовательно распаковывает поля. так что посмотри вывод этой команды, сопоставь с входными данными, скорее всего увидишь систему.
Пробовал, не сильно помогло. Вот строка:
1238842183 1 94.178.216.50 10.0.0.25 10 3 144 1534 50000 0.0.0.0 512 0 2 6 4 0 0 0 0 127.0.0.1 Sat Apr 4 14:49:43 2009
Большинство полей известно. Но что такое 0.0.0.0, 127.0.0.1, нули и прочее.
Вот сделал процедурку на рнр которая выдергивает все что мне удалось узнать - увидел сегодня тему старую viewtopic.php?t=2793 , взял за основу, написал под себя парсилку которая вызывается в raw_fd_script, с скидывает детальку в таблицы по дням (сначала хотел по аккаунтам, но тогда дофига таблиц и сложно контролировать рост базы, а по дням можно за старые месяцы бэкапить, паковать и отсылать мылом в фсб на хранение ;). Добавил фильтрацию классов трафика - пишу только инетные классы (не думаю что фсбшникам понадобяться терабайты логов хождения пользователей в личный кабинет).

Получилось не плохо. Скорость обработки - 1500 записей в сек. (на стареньком четвертом пне с 512 метрами оперативки). Теперь надо сделать для джумлы плагин показывающий детальную статистику.
Приятно всетаки когда деталька за сутки показывается за несколько секунд, а не за несколько часов ;) Хотя в родной админке утм за сутки не удавалось посмотреть не разу - умирала в процессе ;)

Процедурка декодирования, размеры и значения оффсетов выгребал из нескольких источников и методом тыка, больше узнать не удалось. Поля WTF - неизвестные науке звери.

Код: Выделить всё

function sfread($f) {
	$int_str = fread($f, 76);
	$result = unpack("VWTF1/Csrc_ip1/Csrc_ip2/Csrc_ip3/Csrc_ip4/Cdst_ip1/Cdst_ip2/Cdst_ip3/Cdst_ip4/Vnexthop/VWTF2/Vpackets/Vbytes/Vfirst/Vlast/vsrc_port/vdst_port/vtcp_flags/Cproto/Ctos/vWTF3/vsrc_as/vdst_as/vWTF4/Vslink_id/Vaccount_id/Vsourceaddr1/Vt_class/Vtimestamp/Vnfgen_addr",$int_str);
	$result['src_ip']  = $result['src_ip1'] + $result['src_ip2']*256 + $result['src_ip3']*256*256 + $result['src_ip4']*256*256*256; 
	$result['dst_ip'] = $result['dst_ip1'] + $result['dst_ip2']*256 + $result['dst_ip3']*256*256 + $result['dst_ip4']*256*256*256; 
	return ($result);
}
Может кому пригодится...

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

Крайне рекомендую проводить еще и аггрегацию в пределах 5-10 минут. Меньше места займет.

masis
Сообщения: 39
Зарегистрирован: Ср фев 18, 2009 13:30
Откуда: Н.Новгород

Сообщение masis »

Kayfolom писал(а):Пробовал, не сильно помогло. Вот строка:
1238842183 1 94.178.216.50 10.0.0.25 10 3 144 1534 50000 0.0.0.0 512 0 2 6 4 0 0 0 0 127.0.0.1 Sat Apr 4 14:49:43 2009
Большинство полей известно. Но что такое 0.0.0.0, 127.0.0.1, нули и прочее.
get_nf_direct в первой строке выдачи пишет названия полей.

А вообще из полезного WTF2 это
2 байта - input interface
2 байта - output interface

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

mikkey finn писал(а):Крайне рекомендую проводить еще и аггрегацию в пределах 5-10 минут. Меньше места займет.
Аггрегация в детальке маловозможна, на то она и детальная статистика чтоб видеть сырые данные. Даже если и делать, то потеряются важные данные (придется игнорить порты, адреса) из деталька превратится в счетчик трафа ;) А если аггрегировать разумно, то объемы вычислений вырастают на порядок. В таком случае деталька будет расти быстрее чем я буду успевать ее в базу заталкивать ;)

Объем и так не большой - у меня в среднем за день появляется полг гига детальки, при заталкивании в базу она уменьшается в 4 раза (это с учетом индексов). Можно еще сэкономить на полях хорошо: таймстамп урезать вдвое (оставить только время, дата это имя таблицы), ид аккаунта тоже в 2 байта, класс трафика можно и 1 байт затолкать.

Структура таблички сейчас вот такая:

Код: Выделить всё

CREATE TABLE IF NOT EXISTS `{TABLE_NAME}` (`id` int(11) NOT NULL auto_increment,`timestamp` int(4) unsigned,`account_id` int(4) unsigned,`t_class` int(4) unsigned, `packets` int(4) unsigned, `bytes` int(4) unsigned, `src_ip` int(4) unsigned, `src_port` smallint(2) unsigned, `dst_ip` int(4) unsigned, `dst_port` smallint(2) unsigned, `proto` TINYINT(1) unsigned, `tos`  TINYINT(1) unsigned, PRIMARY KEY  (`id`)) ENGINE=MyISAM

JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

Сообщение JAO »

Вот

Код: Выделить всё

class iptraffic_raw_utm
{ public:
   int something1; // always 1
   int sourceaddr;
   int destaddr;
   int nexthop; // 0
   int something2; // 0x200
   int packets;
   int octets;
   int first;
   int last;
   unsigned short src_port;
   unsigned short dest_port;
   unsigned short tcp_flags;
   unsigned char proto;
   unsigned char tos;
   unsigned short something3;
   unsigned short src_as;
   unsigned short dst_as;
   unsigned short something4; // 0x7C34
   int slink_id;
   int account_id;
   int sourceaddr1;
   int t_class; // 0x3F2, 0x3EE
   int timestamp;
   int nfgen_addr;
--- skipped ---

Ответить