Tcpdump
使用 tcpdump/tshark 顯示 delta 時間戳和 UDP 數據負載
我有一個 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
選項 withtshark
,結合-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 手冊頁。