如何以程式方式使用 tcpdump 擷取文件解析 OpenFlow 數據包
我正在處理 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)