我正在处理 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