Оптимизация скрипта генерации пакетов - PullRequest
1 голос
/ 29 марта 2019

У меня есть набор данных, содержащий более 250 миллионов записей данных 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 х 2) из ​​записи 2, 0,24 с (0,12 х 2) из ​​записи 3, 0,3 с (0,1 х 3) из записи 2, 0,36 с (0,12 х 3) из записи 3, 0,4 с (0,2 х 2) от записи 1]

Какая лучшая система, которую я могу предложить, которая позволит этому процессу происходить при одновременном выводе всех пакетов в один и тот же список?

До сих пор я пытался просто перейти к записи по записи (добавить пакеты с правильным временем дельты) и добавить это в огромный список пакетов, затем перейти к следующей записи и так далее, и так далее. Этот метод работает, однако не только пакеты не по порядку и не нуждаются в алгоритме сортировки, но он очень медленный и занимает 15+ минут, чтобы разрешить только первые 100 записей из этого набора данных с 250 МИЛЛИОНАМИ записей! Я думаю, что я определенно мог бы направить этот процесс так, чтобы он работал над одновременным добавлением нескольких записей в список, но я просто не уверен, как это сделать.

Текущий код на моем github, https://github.com/NolanRudolph/UONetflow/blob/master/PyScripts/netflowPackager.py,, однако я не верю, что для решения этой проблемы нужно перечитать мой код. Я полагаю, что чьи-то обширные знания Python могут предложить оптимизированное решение в течение нескольких секунд. Я слышал об использовании наборов с хэш-отображением, но я не уверен, как бы я интегрировал это в эффективный экспорт множества пакетов записей.

Я понимаю, как этот вопрос может очень быстро запутаться, поэтому, пожалуйста, не стесняйтесь задавать уточняющие вопросы. Любая помощь будет принята с благодарностью. Большое вам спасибо!

...