查找前5名(根据发送包数)的源IP地址

查找前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 文件列标题如下所示:

   在此输入图像描述

答案1

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

参考

答案2

所以在得到提示后回答,我想出了这个脚本:

$ 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根据 (-k7) 第 7 列的 (-r) 逆序对文件进行数字排序 (-n) [此列包含每个 IP 地址的包长度]
  • awk '!seen[$3]++'打印以前没有见过的源 IP 地址(第 3 列),因此这种方式仅打印唯一的 IP
  • awk '{print $3}'只打印第三列(源IP地址)
  • head -n 5 >> result.txt因为我需要前 5 个,所以我使用命令,最后>> result.txt还将最终结果附加到文本文件。

相关内容