我有很多netflow数据(i.e src_ip, dest_ip, beg_time, end_time, data_size, etc)
,其中一些是周期性的,我想知道。
假设我有n个netflow(大约10^6),其中m个是周期性的。我怎么能找到哪些是周期性的?
我可以写一个代码,但它将至少是O(n^3 logn),这将永远在10^4个netflow之后。
我已经找过了,但什么也找不到。
注意:您可以认为数据是按开始时间排序的,开始时间是32位无符号整数(C++中的uint32)
更正:src_ip
是唯一的,dest_ip
不是唯一的,time for periodicity
是未知的。可能是5分钟,也可能是5天您可以忘记src_ip, dest_ip, end_time, data_size
和流的其他属性。我只寻找开始时间是周期性的事件,你可以考虑,我已经删除了一些不相关的事件,比如不同的src_ip,等等…
任何帮助都将不胜感激,
谢谢
最佳答案
我会试着根据你的数据计算信号的fft。
例如,我将块beg_time
=1,end_time
=5,data_size
=100转换为振幅为100的时间单位为1到5的方脉冲。
如果你想分析所有的东西,你就把所有的脉冲叠加起来。
如果把所有的东西放在一起没有意义,那么只叠加来自同一个src_ip
或来自同一对src_ip
和dst_ip
的脉冲。
然后对叠加得到的信号进行fft,看看频域中是否有明显的峰值,或者看起来都是随机的,没有明显的峰值。
fft在o(n*log(n))时间内运行,其中n
是信号样本数。
我相信一定有更好的方法来做,但这可能值得一试。
关于algorithm - 检测网络流量周期性的有效方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15704062/