首页 > 解决方案 > 数据包生成脚本的优化

问题描述

我有一个包含 250 多万条 netflow 数据的数据集。我的目标是开发一种有效的方法来为这个 netflow 数据生成数据包,我决定使用 Scapy 作为我模拟数据包的方法。对于我的数据集中的每个条目,我发现绝大多数数据包是在五分钟的某个时间范围内发送的,其中一些条目的数据包净总数高达数十万!

所以问题来了:我需要一种方法来一次跟踪数千个不同的条目,以确保每个条目的数据包在正确的增量时间发送出去,直到所有数据包都发送完毕。

例如:
假设我们的数据集中有 3 个条目。第一个是跨越 20 秒的 100 个数据包。接下来是跨越 20 秒的 200 个数据包。最后一个是跨越 60 秒的 500 个数据包。我们数据集中每个数据包之间的增量时间分别为 0.2s、0.1s 和 0.12s(20/100、20/200、60/500)。现在我只有三个条目需要以这些增量时间的速率传送这些数据包。附加到列表的每个条目的前几个数据包的示例如下:[0.0s from entry 1, 0.0s from entry 2, 0.0s from entry 3, 0.1s from entry 2, 0.12s from entry 3,从条目 1 开始 0.2s,从条目 2 开始 0.2s (0.1 x 2),从条目 3 开始 0.24s (0.12 x 2),从条目 2 开始 0.3s (0.1 x 3),从条目 3 开始 0.36s (0.12 x 3),距条目 1 0.4s (0.2 x 2)]

我能想出的最好的系统是什么,它将允许这个过程发生,所有数据包同时输出到同一个列表?

到目前为止,我已经尝试简单地逐个条目(添加具有正确增量时间的数据包)并将其添加到一个巨大的数据包列表中,然后进入下一个条目,依此类推。这种方法有效,但是不仅数据包的顺序不及时并且需要排序算法,而且它非常慢并且需要 15 分钟以上才能解决这个 2.5 亿条目数据集的前 100 个条目!我认为我绝对可以通过管道处理这个过程,以便一次将多个条目附加到列表中,但我只是不确定如何去做。

当前代码在我的 github 上,https://github.com/NolanRudolph/UONetflow/blob/master/PyScripts/netflowPackager.py,但是我不相信需要阅读我的代码来解决这个问题。我相信某人对 Python 的广泛了解肯定可以在几秒钟内提供优化的解决方案。我听说过使用具有哈希映射的集合,但我不确定如何将其集成到以有效方式导出大量条目的数据包中。

我可以看到这个问题很快就会变得非常混乱,所以请不要犹豫,提出澄清问题。任何帮助将不胜感激。太感谢了!

标签: python-3.xscapypacketnetflow

解决方案


推荐阅读