#python-3.x #scapy #packet #netflow
#python-3.x #scapy #пакет #netflow
Вопрос:
У меня есть набор данных, содержащий более 250 миллионов записей данных netflow. Моя цель — разработать эффективный способ генерации пакетов для этих данных netflow, и я решил использовать Scapy в качестве средства эмуляции пакетов. Для каждой из записей в моем наборе данных я обнаружил, что подавляющее большинство пакетов отправляется между некоторыми временными рамками, превышающими пять минут, и у некоторых из этих записей общее количество пакетов достигает сотен тысяч!
Итак, вот в чем проблема: мне понадобится способ отслеживать тысячи разных записей одновременно, чтобы гарантировать, что пакеты каждой записи отправляются в правильное дельта-время, пока все пакеты не будут отправлены.
Например:
Допустим, у нас есть 3 записи в нашем наборе данных. Первый — это 100 пакетов продолжительностью 20 секунд. Следующий — это 200 пакетов продолжительностью 20 секунд. Последний из 500 пакетов длится 60 секунд. Время разности между каждым пакетом в нашем наборе данных составляет 0,2 с, 0,1 с и 0,12 с соответственно (20/100, 20/200, 60/500). Теперь у меня есть только три записи, которые должны доставлять эти пакеты со скоростью, равной этим временам разности. Примером первых нескольких пакетов каждой записи, добавленных в список, может быть следующий: [0,0 с от записи 1, 0,0 с от записи 2, 0,0 с от записи 3, 0,1 с от записи 2, 0,12 с от записи 3, 0,2 с от записи 1, 0,2 с (0,1 x 2) от записи 2, 0,24 с (0,12 x 2) от записи 3, 0,3 с (0,1 x 3) от записи 2, 0,36 с (0,12 x 3) от записи 3, 0,4 с (0,2 x 2) из записи 1]
Какую лучшую систему я могу придумать, которая позволит этому процессу происходить со всеми пакетами, выводимыми в один и тот же список одновременно?
До сих пор я пытался просто переходить от записи к записи (добавляя пакеты с правильным временем разности) и добавлять это к огромному списку пакетов, затем переходить к следующей записи и так далее, и тому подобное. Этот метод работает, однако пакеты не только находятся в неправильном порядке и нуждаются в алгоритме сортировки, но он также чрезвычайно медленный и требует более 15 минут для разрешения только первых 100 записей из этого набора данных с 250 МИЛЛИОНАМИ записей! Я думаю, что я определенно мог бы конвейеризировать этот процесс, чтобы работать над добавлением нескольких записей в список одновременно, но я просто не уверен, как это сделать.
Текущий код находится на моем github,https://github.com/NolanRudolph/UONetflow/blob/master/PyScripts/netflowPackager.py , однако я не считаю, что для решения этой проблемы нужно перечитывать мой код. Я полагаю, что чьи-то обширные знания Python определенно могли бы предложить оптимизированное решение в течение нескольких секунд. Я слышал об использовании наборов с хэш-отображением, но я не уверен, как бы я интегрировал это в эффективный экспорт пакетов множества записей.
Я вижу, как этот вопрос может очень быстро стать очень запутанным, поэтому, пожалуйста, не стесняйтесь задавать уточняющие вопросы. Любая помощь была бы высоко оценена. Большое вам спасибо!