用于发现交通数据中的异常(“尖峰”)的算法

时间:2010-02-08 13:55:18

标签: algorithm statistics trending

我发现自己需要处理使用tcpdump捕获的网络流量。阅读流量并不难,但有点棘手的是发现流量中出现“峰值”的地方。我主要关注的是TCP SYN数据包,我想要做的是查找给定目标端口的流量突然上升的日子。有相当多的数据要处理(大约一年)。

到目前为止我尝试使用的是指数移动平均线,这足以让我得到一些有趣的测量结果,但是将我看到的与外部数据源进行比较似乎有点过于激进了。将事情标记为异常。

我考虑过使用指数移动平均线加上历史数据的组合(可能是过去7天,认为应该每周都有我所看到的周期),正如我读过的一些论文似乎已经设法以这种方式模拟资源使用并获得了成功。

那么,有没有人知道一个好的方法或某个地方去阅读这类事情。

我一直在使用的移动平均线看起来大致如下:

avg = avg+0.96*(new-avg)

avg是EMA而new是新措施。我一直在试验使用什么阈值,但发现“必须是一个给定的因子高于在权衡新值之前的平均值”和“必须至少高3”才能得到最差的结果。

2 个答案:

答案 0 :(得分:5)

这在入侵检测文献中得到了广泛的研究。这是一篇关于该问题的开创性论文,其中包括如何分析tcpdump数据以获得相关见解。

这是论文:http://www.usenix.org/publications/library/proceedings/sec98/full_papers/full_papers/lee/lee_html/lee.html这里他们使用RIPPER规则归纳系统,我想你可以用较新的东西代替http://www.newty.de/pnc2/http://www.data-miner.com/rik.html

答案 1 :(得分:4)

我会对数据应用两个低通滤波器,一个具有长时间常数T1,另一个具有短时间常数T2。然后,您将查看这两个滤波器输​​出的幅度差异,当它超过某个阈值K时,那将是一个尖峰。最难的部分是调整T1,T2和K,这样你就不会得到太多的误报,也不会错过任何小的尖峰。

以下是单刀IIR低通滤波器:

new = k * old + (1 - k) * new

k的值决定时间常数,通常接近1.0(但当然<1.0)。

我建议您并行应用两个这样的过滤器,具有不同的时间常数,例如:首先说k = 0.9表示一个(短时间常数),k = 0.99表示另一个(长时间常数),然后查看其输出的幅度差异。大部分时间的幅度差异很小,但是当出现尖峰时会变大。