аукцион / donate / услуги / RSS / распечатать / вход 
Мой мир
Вконтакте
Одноклассники

[24 февраля 2021 | 1 марта 2021 | 2 марта 2021]

NetFlow v5 Python (часть 4) анализатор конвертор

После того как будут собраны данные Netflow с помощью коллектора, эти данные необходимо как-то подготовить. Для тестирования и для того, чтобы можно было увидеть данные глазами я решил сделать конвертор. Этот конвертор будет сохранять данные в файл в понятном человеку виде.

Собственно исходник файла, на основании которого вы сможете сделать свой анализатор с Блэк Джеком и дамами лёгкого поведения.

#!/usr/bin/python3
# -*- Mode: Python; tab-width: 4 -*-
#       Id: convertor_file.py, v 1.02 2021
#       Author: Ivan Kurilko 
#       https://orcinus.ru
# ======================================================================
# Copyright 2020 by Ivan Kurilko aka Orcinus Orca
#
#                         All Rights Reserved
#
# Permission to use, copy, modify, and distribute this software and
# its documentation for any purpose and without fee is hereby
# granted, provided that the above copyright notice appear in all
# copies and that both that copyright notice and this permission
# notice appear in supporting documentation, and that the name of Ivan
# Kurilko not be used in advertising or publicity pertaining to
# distribution of the software without specific, written prior
# permission.
#
# IVAN KURILKO DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
# NO EVENT SHALL IVAN KURILKO BE LIABLE FOR ANY SPECIAL, INDIRECT OR
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# ======================================================================

import socket, struct

SIZE_OF_RECORD = 35

file_name = '448258'

print('Start Netflow convertor for:', file_name)

# Работа с файлом по кускам
#with open(file_name+'.bin', "rb") as f:
#    byte = f.read(1)

# Работаем с небольшими файлами и грузим их сразу в память
buf = open(file_name+'.bin', "rb").read()
outpackets = ''

file_size = len(buf)
flow_count = file_size//SIZE_OF_RECORD
flow_sequence_start = 0
flow_break = 0

print('Длина файла:', file_size, 'Число записей:', flow_count)

for i in range(0, flow_count):
   # Смещение 
   offset = i*SIZE_OF_RECORD

   # Заполняем переменные
   (iprouter, flow_sequence, startpkt,
      srcaddr, src_mask, srcport, if_input,
      dstaddr, dst_mask, dstport, if_output,
      dpkts, doсtets, prot) = struct.unpack('!IIIIBHHIBHHHHB',buf[offset:offset+SIZE_OF_RECORD])

   if flow_sequence_start == 0: flow_sequence_start = flow_sequence-1

   if flow_sequence_start != flow_sequence-1:
      flow_break += flow_sequence-flow_sequence_start-1
      print(flow_sequence_start, flow_sequence-flow_sequence_start-1)

   flow_sequence_start = flow_sequence


   outpackets += socket.inet_ntoa(struct.pack('!I', iprouter))
   outpackets += '\t'+str(flow_sequence)
   outpackets += '\t'+str(startpkt)
   outpackets += '\t'+socket.inet_ntoa(struct.pack('!I', srcaddr))
   outpackets += ':'+str(srcport)
   outpackets += '\t'+str(if_input)
   outpackets += '\t'+socket.inet_ntoa(struct.pack('!I', dstaddr))
   outpackets += ':'+str(dstport)
   outpackets += '\t'+str(if_output)
   outpackets += '\t'+str(dpkts)
   outpackets += '\t'+str(doсtets)
   outpackets += '\t'+str(prot)+'\n'


with open(file_name+'.txt', 'w') as file:
   file.write(outpackets)
   file.close()

print('Пропущенных Netflow:', flow_break)

За одно эта программа считает пропущенные Netflow-записи. Дело в том, что они периодически теряются, при этом теряются они иногда внутри большого пакета приходящего с Netflow-сенсора.

Для своей реализации я планирую небольшое сжатие данных. У меня будет вестись подсчёт кратно одному часу. По этому в моей реализации данные будут квантоваться с точностью до одного часа. Даже при такой точности объём данных, занимаемых статистикой, имеет не шуточные размеры. Хотя всё зависит от длительности хранения. Возможно при большом объёме можно будет удалять или сжимать данные ещё сильнее. Так же многое зависит от объёма проходящего трафика. Возможно в маленькой конторе даже не потребуется сжимать получаемые данные и можно будет квантовать до одной секунды.

Тэги: ИТ, Cisco, программирование, Питон

Отредактировано:2021-03-01 08:35:11


Этот сайт использует файлы cookies, чтобы упростить вашу навигацию по сайту, предлагать только интересную информацию и упростить заполнение форм. Я предполагаю, что, если вы продолжаете использовать мой сайт, то вы согласны с использованием мной файлов cookies. Вы в любое время можете удалить и/или запретить их использование изменив настройки своего интернет-браузера.

Сообщайте мне о замеченных ошибках на: web@orcinus.ru. Все пожелания и советы будут учтены при дальнейшем проектировании сайта. Я готов сотрудничать со всеми желающими. В некоторых случаях, мнение автора может не совпадать с мнением автора! Phone: +7-902-924-70-49.

Top.Mail.Ru
Top.Mail.Ru LiveInternet Rambler's Top100 Яндекс.Метрика