在 Linux 路由器上,我编写了一个 C 程序,它使用 pcap 来获取 IP 标头和数据包的长度。通过这种方式,我能够收集统计数据并根据 IP 测量带宽。挺整洁的。:-)
现在流量和用户数量都在增长,旧程序开始挣扎。也就是说,路由器难以应对大量的数据包。在“黄金时段”总共每秒超过 50000 个数据包。
该程序本身非常优化。我不想炫耀,但我相信它可以做到最好。它读取 IP 标头和数据包长度。然后它将 IP 转换为索引(只是一个简单的减法),并将数据包的长度存储(累加)在一个数组中。它时不时地(实际上是一个 SIGALRM)将数组存储在 MySQL 数据库中。
我的问题是:有没有其他方法可以利用以太网设备来获得比 pcap 更“便宜”的比特流?
我当然可以修改以太网驱动程序以包含单个 IP 统计信息收集,但这似乎有点过头了。
基本上,我的程序是繁忙的 eth0 上的“tcpdump”,最终会杀死我的路由器。