用于在 75K 数据包/秒负载下的实时应用程序的 python 网络嗅探器

问题描述

我正在开发一些基于python的应用程序(主要是因为可以灵活地进行更改),该应用程序将侦听以太网上的数据,将其保存到数据库sqlite)并实时显示数据。以太网上的数据是基于 UDP 的,在它之上有一些自定义协议。

我的挑战:

  1. 我已经有一个 Wireshark 解析器来解析这个自定义协议。但是,我不能像 tshark 这样的工具(该应用程序是基于 MS Windows 的)使用它来限制我如何使用它来存储实时应用程序的数据(该应用程序应运行几个小时)。每次我开始嗅探时,都会创建一个临时文件。如果我想要日志轮换(以便文件大小不变),我不能使用显示过滤器。

  2. 使用 scapy - 在 UDP 之上快速实现自定义协议。现在,我对将数据存储到 sqlite 进行了一些测试,发现了一些性能问题,其中似乎并非所有数据包都由 scapy 处理,即,我已经使用 Wireshark 和 scapy 进行了跟踪,并且已经看到使用 scapy 丢失了一些数据包。我查看了每秒数据包的统计数据,发现该接口上可能有 75K 数据包每秒,因为这是监控计算机,它可以查看我网络中的所有流量(我从中需要少于 0.1% 的数据)。

2.a 监控计算机可以有 2 种网络配置:中间有 ERSPAN 协议(即 IP 协议内的 IP 协议,我的数据在整个数据包的最后一部分)或没有它(因此我可以向 scapy 的 sniff 命令添加一些额外的过滤器)。不幸的是,第二个配置尚不可用。

对此有何建议?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)