Доброго времени суток!
Не могу понять, как вычленять время из пакетов протокола Netflow версии 5.0.
Маршрутизатор Cisco 4507R, находится в новосибирске (GMT+6). Экспортирует flow-поток на одну из рабочих станций. Моя задача - вычленять оттуда некоторые пакеты, точнее данные с них. По-большому счету все понятно, кроме времени. Есть в протоколе следующие поля:
(Далее воспользовался информацией с http://www.securitylab.ru/forum/forum21/topic46779/messages/?PAGEN_1=2 )
/**********************************************************/
UNIX_SECS - Время когда поток был экспортирован - в секундах
SYSUPTIME - UpTime экспортирующей системы на время когда поток был экспортирован. Тут тысячные секунды
FIRST - UpTime экспортирующей системы на время когда поток был создан (получен первый пакет). Тут тысячные секунды
LAST - UpTime экспортирующей системы на время когда был получен последний пакет потока. Тут тысячные секунды.
Есть однозначная привязка UNIX_SECS и SYSUPTIME Поэтому формула для Unix_Time когда получен первый пакет потока такая.
Unix_Time_Flow_Created = UNIX_SECS + (FIRST - SYSUPTIME)/1000
Для последнего пакета потока - такая.
Unix_Time_Flow_Died = UNIX_SECS + (LAST - SYSUPTIME)/1000
Точность времени для данных порядка одной секунды, так как приходится округлять
/********************************************************/
Попробовал реализовать.
Что в итоге получаю:
Сегодня 05.05.09, местное время примерно 18.14. Время на экспортирующем маршрутизаторе указано верно.
Получаю пакет.
unix_secs (8-11) = 1241522062
sys_uptime (4-7) = 1228598392
first (24-27) = 1228430416
last (28-31) = 1228450356
Использую формулу, получаю
Unix_Time_Flow_Created = 1245816861
Для последнего пакета потока - такая.
Unix_Time_Flow_Died = 1245816881
преобразуем
select FROM_UNIXTIME(1241522062) as UNIXSECS,FROM_UNIXTIME(1245816861) as Unix_Time_Flow_Created
получаем результат:
UNIXSECS Unix_Time_Flow_Created '2009-05-05 18:14:22', '2009-06-24 11:14:21'
UnixSecs похож на правду, а вот Unix_Time_Flow_Created - ни в какие ворота - даже если прибавить шесть часов (GMT+6) то 24 июня 2009 тут совсем не при делах :(.
Подскажите в чем я не прав, кто знает, плиз.