如何以编程方式使用 tcpdump 捕获文件解析 OpenFlow 数据包

如何以编程方式使用 tcpdump 捕获文件解析 OpenFlow 数据包

我正在处理 OpenFlow 数据包并通过 tcpdump 分析网络。

目前,我使用 WireShark GUI 来解析生成的捕获文件,它确实满足了我的需要。

但是,我想知道 WireShark 是否有 API,因此可以通过脚本而不是 GUI 完成相同的操作(我的主要目的是提取某些 OpenFlow 参数并自动执行检查系统的过程)

答案1

WireShark 的命令行替代品是 tshark(功能类似于 tcpdump)。

本博客有足够的理由让我开始。

tshark 捕获命令示例如下(假设您想要监控接口 eth0):

sudo tshark -i eth0

我们也可以随命令添加捕获过滤器:

sudo tshark -i eth0 "port 6633"

此命令将捕获往返于端口 6633(OpenFlow 控制器的默认端口)的所有流量

仅仅捕获流量是不够的。要通过程序分析捕获的数据,我们首先需要将捕获的数据转换为易于理解的格式。输入 XML。

sudo tshark -i eth0 -T pdml > dump.xml  

这会将捕获文件输出为 xml 文件,其中包含所有数据包及其各种属性作为标签。

随后可以使用任何标准 xml 解析器对其进行解析。

我调整了一些额外的事情:我废弃了“端口 6633”。并添加了 -n 选项(地址未解析)。因此捕获的额外数据包可能始终会被 xml 解析器过滤掉。由于我的应用程序对各种数据包的时间戳给予了轻微的重视,因此我不想因过滤/解析而导致额外的延迟。请注意,我在这里的推理可能完全错误(这只是一种预感)。当设备接收到数据包时,网络适配器会为每个数据包添加一个时间戳。因此,使用此类技巧很可能根本不会影响时间戳。

因此,我的最终命令是:

sudo tshark -n -i eth0 -T pdml > dump.xml

附加说明:如果您习惯使用 WireShark 调试 OpenFlow 数据包,您可能会使用显示过滤器:“of”。但这不是 tshark 所需的有效捕获过滤器(捕获过滤器与 tcpdump 中使用的过滤器类似)

PS:如果你需要 xml 解析器,请给我留言(我使用了 python)

答案2

尝试查看输出:

sudo tshark -O openflow_v4 -i eth0 port <openflow port>

您可以使用此命令查看可用的协议:

~] tshark -G protocols | grep openflow
OpenFlow        openflow        openflow
OpenFlow 1.0    openflow_v1     openflow_v1
OpenFlow 1.3    openflow_v4     openflow_v4
OpenFlow 1.4    openflow_v5     openflow_v5

相关内容