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

我正在使用OpenFlow数据包,并通过tcpdump分析networking。

目前,我使用WireShark GUI来parsing生成的捕获文件,它符合我的需要。

然而,我想知道WireShark是否有一个API,所以可以通过一个脚本而不是GUI来完成相同的操作(我本质上是要提取某些OpenFlow参数并自动执行检查我的系统的过程)

WireShark的命令行是tshark(与tcpdump相似)。

这个博客足以让我开始。

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

sudo tshark -i eth0 

我们可以添加捕获filter以及命令:

 sudo tshark -i eth0 "port 6633" 

该命令将捕获来自端口6633的所有stream量(OpenFlow控制器的默认端口)

简单地捕捉stream量是不够的。 要通过程序分析捕获,我们需要首先将捕获转换为易于理解的格式。 inputXML。

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

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

这可以随后使用任何标准的XMLparsing器进行分析。

我调整了一些额外的东西:我报废了“6633端口”。 并添加了一个-n选项(地址不解决)。 作为结果捕获的附加数据包可能总是被xmlparsing器过滤掉。 由于我的应用程序略微重视了各种数据包的时间戳,所以我不想因过滤/parsing而导致额外的延迟。 请注意,我在这里的推理可能是非常错误的(这只是一个预感)。 每个数据包都有一个时间戳,当设备收到相同的数据时,networking适配器会添加一个时间戳。 因此,使用这种技巧很可能根本不会影响时间戳。

因此我的最终命令是:

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

附加说明:如果您习惯使用WireSharkdebuggingOpenFlow数据包,则可能使用显示filter:“of”。 然而,这不是tshark所需的有效捕获filter(捕获filter类似于tcpdump中使用的filter)

PS:给我一条线,如果你需要XMLparsing器(我用Python)

尝试查看以下输出:

 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