Tcpdump

使用 tcpdump/tshark 顯示 delta 時間戳和 UDP 數據負載

  • June 7, 2020

我有一個 1.5Gb 的小型 UDP 數據包擷取,我想將其轉換為 CSV,其中只有時間戳和十六進制格式的 UDP 有效負載數據。

所需輸出的範例如下:

% head Data3.txt 
0.000000,0000000041000000005ec812ac00047dce00000000
0.000194,0000000042000000005ec812ac00047db500000000
0.000227,0000000041000000005ec812ac00047dce00000000
0.000619,0000000042000000005ec812ac00047db500000000
0.000663,0000000041000000005ec812ac00047dce00000000
0.000854,0000000042000000005ec812ac00047db500000000
0.000883,0000000041000000005ec812ac00047dce00000000

我不需要這種確切的格式,只需要一種以後可以轉換為該數據的格式(在這種情況下,它們是 21 字節長度的 UDP 數據包)。

我正在努力使用 tcpdump 實現這一目標,但沒有成功,所以我發現 tshark 可以完成這項工作:

 tshark -r May31Jun5.pcap -t r -T fields -e frame.time -e data

該命令根據需要提供增量時間和有效負載(請參見下面的摘錄)。

Jun  1, 2020 00:02:27.567001000 CEST    0000000041000000005ed4297300049fe300000000
Jun  1, 2020 00:02:27.567014000 CEST    0000000042000000005ed4297300049fb100000000
Jun  1, 2020 00:02:27.567028000 CEST    0000000041000000005ed4297300049fe300000000
Jun  1, 2020 00:02:27.567042000 CEST    0000000042000000005ed4297300049fb100000000
Jun  1, 2020 00:02:27.567056000 CEST    0000000041000000005ed4297300049fe300000000
Jun  1, 2020 00:02:27.567066000 CEST    0000000042000000005ed4297300049fb100000000
Jun  1, 2020 00:02:27.567106000 CEST    0000000054000000005ed4297300049fb100000001
Jun  1, 2020 00:02:27.567124000 CEST    0000000041000000005ed4297300049fe300000000
Jun  1, 2020 00:02:27.567137000 CEST    0000000042000000005ed4297300049fb100000000
Jun  1, 2020 00:02:27.567152000 CEST    0000000041000000005ed4297300049fe300000000
Jun  1, 2020 00:02:28.095487000 CEST    0000000041000000005ed4297300049fe300000000

但是我希望只有幾秒鐘的小數,所以而不是:

Jun  1, 2020 00:02:28.095487000

這將是:

148.095487000

我怎樣才能做到這一點?我想這是可能的,因為 Wireshark 的 GUI 版本會顯示該值。

要獲得簡單欄位的 CSV 樣式輸出,您可以使用-T fields選項 with tshark,結合-E separator=,使用逗號作為分隔符而不是製表符的選項。

接下來,要確定要使用哪種類型的欄位名稱,請檢查 GUI 中的狀態欄以查找所選欄位,或使用tshark -T pdml -r some.pcap例如,或tshark -G fields支持欄位的完整列表。

對於列,您可以使用特殊_ws.col.<name>欄位。例如,_ws.col.Time

結合這些資訊,您可以使用以下內容:

tshark -r your.pcap -Tfields -Eseparator=, -eframe.time_relative -edata > your.csv

獎金資訊:

  • 如果 UDP(例如 DNS)使用 UDP 有效負載,則該data欄位將為空。添加--disable-protocol dns以避免這種情況。
  • 在目前的開發版本中,udp.payload添加了一個新選項,它應該避免以前的選項。(送出v3.3.0rc0-250-gf04475167a
  • 如果由於某種原因一個欄位多次出現,它將被輸出,以逗號分隔。您可以使用該-E occurence=1選項將結果限制為僅第一個值。
  • 有關這些選項的更多詳細資訊,請參閱tshark 手冊頁

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