Wireshark

如何以程式方式使用 tcpdump 擷取文件解析 OpenFlow 數據包

  • November 15, 2019

我正在處理 OpenFlow 數據包,並正在通過 tcpdump 分析網路。

目前,我使用 WireShark GUI 來解析生成的擷取文件,它確實滿足了我的需要。

但是,我想知道 WireShark 是否有一個 API,因此可以通過腳本而不是 GUI 來完成相同的操作(我的主要目標是提取某些 OpenFlow 參數並自動化檢查我的系統的過程)

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)

引用自:https://serverfault.com/questions/517323