Linux

查找前 5 個(根據發送的數據包數)源 IP 地址

  • April 5, 2019

我正在做一個作業,我被要求根據給定的 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 列),因此它只列印唯一的 IP
  • awk '{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

參考

引用自:https://unix.stackexchange.com/questions/453520