Как разбить большие файлы детализации.
Кто знает значение данных в .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
И что за $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
-
- Сообщения: 1612
- Зарегистрирован: Пт ноя 10, 2006 15:23
Пробовал, не сильно помогло. Вот строка: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);
}
-
- Сообщения: 1612
- Зарегистрирован: Пт ноя 10, 2006 15:23
get_nf_direct в первой строке выдачи пишет названия полей.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, нули и прочее.
А вообще из полезного WTF2 это
2 байта - input interface
2 байта - output interface
Аггрегация в детальке маловозможна, на то она и детальная статистика чтоб видеть сырые данные. Даже если и делать, то потеряются важные данные (придется игнорить порты, адреса) из деталька превратится в счетчик трафа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
Вот
Код: Выделить всё
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 ---