我正在使用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