Linux
查找前 5 個(根據發送的數據包數)源 IP 地址
我正在做一個作業,我被要求根據給定的 pcap 文件回答某些問題。問題之一是找到前 5 個(根據發送的數據包數量)的源 IP 地址。
我想出了以下命令:
$ tshark -r assign1.pcap | sort -n -7 | tail -n 5 | awk '{print $3}'
在哪裡
tshark -r
讀取 pcap 文件assign.pcap
是抓封包件sort -n -7
根據第 7 列對文件進行排序(此列包含每個 ip 地址的包長度)tail -n 5
列印數據包長度最長的最後 5 條記錄awk '{print $3}
僅列印第三列。現在這是我的問題,因為我需要唯一的前 5 個源 IP 地址,所以我嘗試
uniq
在腳本末尾輸入命令,但沒有幫助。我也嘗試sort -u -t, -k3,3
從此連結使用,但這也不會列印唯一的 IP 地址!我的 pcap 文件列標題如下所示:
因此,在從這個答案中得到提示後,我想出了這個腳本:
$ tshark -r assign1.pcap | sort -n -r -k7 | awk '!seen[$3]++' | awk '{print $3}' | head -n 5 >> result.txt
解釋該行中的每個命令:
tshark -r assign1.pcap
讀取 pcap 文件sort -n -r -k7
數字排序 (-n) 基於 (-r) (-k7) 列 7 的反向順序的文件$$ this column has length of package for each ip address $$awk '!seen[$3]++'
列印以前從未見過的源 IP 地址(第 3 列),因此它只列印唯一的 IPawk '{print $3}'
僅列印第 3 列(源 IP 地址)head -n 5 >> result.txt
因為我需要前 5 個,所以我通過使用head命令將我的結果限制為只有 5 個,最後還將>> result.txt
終端結果附加到文本文件中。
我認為如果你重新組織
tshark
使用-T fields
它的輸出會容易得多。我能夠像這樣完成你想要的:$ tshark -r blah.pcap -T fields -e frame.len -e ip.src | sort -k 1n | tail -5 92 10.0.2.2 92 10.0.2.2 92 10.0.2.2 100 10.0.2.15 156 10.0.2.15
鯊魚領域
您可以使用此命令獲取所有欄位的列表:
$ tshark -G field
但我發現這有點難以閱讀。如果您想了解
-G field
輸出中的列,請參閱此處:tshark - 轉儲和分析網路流量:* Header Fields * ------------- * Field 1 = 'F' * Field 2 = descriptive field name * Field 3 = field abbreviation * Field 4 = type (textual representation of the ftenum type) * Field 5 = parent protocol abbreviation * Field 6 = base for display (for integer types); "parent bitfield width" for FT_BOOLEAN * Field 7 = bitmask: format: hex: 0x.... * Field 8 = blurb describing field
grep
如果你夠勇敢,可以使用它來過濾輸出:$ tshark -G fields | grep -P '\s+(ip.src|frame.len)\s+' F Frame length on the wire frame.len FT_UINT32 frame BASE_DEC 0x0 F Source ip.src FT_IPv4 ip 0x0
參考