正如问题标题所述,给定一个数据包捕获,我想提取 TCP(或 UDP)的前 5 个流,并按总字节数降序排序。
到目前为止我已经想到了这一点
tshark -r test.pcap -q -z conv,tcp | sed "1,5d" | head -n -1 | sort -r -k5 | head -n 5
和命令用于删除前 5 行和最后一行,然后对第 5 列进行排序,并再次使用将输出截断为前 5sed
行。head
head
tshark 命令输出的示例如下所示(删除了标题行和最后一行):
10.215.173.1:49248 <-> 49.44.185.78:443 84 312 kB 78 10 kB 162 323 kB 215.775760000 12.0809
10.215.173.1:49212 <-> 49.44.185.78:443 83 312 kB 76 10 kB 159 322 kB 215.740042000 12.1151
10.215.173.1:49302 <-> 49.44.185.78:443 79 211 kB 80 9876 bytes 159 221 kB 215.811485000 12.0465
10.215.173.1:49242 <-> 49.44.185.78:443 82 312 kB 76 10 kB 158 322 kB 215.771412000 12.0851
10.215.173.1:49134 <-> 49.44.185.78:443 80 311 kB 76 10 kB 156 322 kB 215.647900000 12.2038
10.215.173.1:49202 <-> 49.44.185.78:443 83 312 kB 73 10 kB 156 322 kB 215.728497000 12.1263
10.215.173.1:49290 <-> 49.44.185.78:443 77 211 kB 78 9700 bytes 155 221 kB 215.803830000 12.0538
10.215.173.1:49278 <-> 49.44.185.78:443 77 211 kB 77 9612 bytes 154 221 kB 215.797622000 7.7149
10.215.173.1:49342 <-> 49.44.185.78:443 74 211 kB 75 9436 bytes 149 220 kB 215.866905000 11.9925
10.215.173.1:49360 <-> 49.44.185.78:443 73 211 kB 74 9348 bytes 147 220 kB 215.895946000 11.9642
按顺序排列的列:Source ip:port
Destination ip:port
Incoming Packets:Bytes
Outgoing Packets:Bytes
Total Packets:Bytes
Relative start
Duration of flow
我想您能看出这里的问题,有些值是 in,kB
而其他值只是字节,因为 sort 仅适用于数值,所以结果会是错误的。即使所有值都在,kB
似乎sort
也会给出错误的输出,这意味着我使用的方式是错误的。
如何将所有相关的bytes
列相关值转换为kB
,然后以正确的方式对输出进行排序?
任何其他替代方法tshark
也是可以接受的。
答案1
完成您所要求的最干净的方法是找到一种方法来tshark
打印实际的(机器可读的)数字,以便您可以轻松地sort
。不幸的是,tshark
似乎在 3.3.0 版本中改变了它们打印这些值的方式(从机器可读到人类可读),并且查看源代码,这似乎不可配置,无论是使用命令行选项,还是使用其中一个首选项。
如果没有这个选项,我能看到的最容易实现的方法是尝试将人类可读的格式转换为人类可以理解的格式sort -h
,即数字和之间没有空格,kB
也没有单位bytes
。
像这样的事情应该可以解决问题:
tshark -r test.pcap -q -z conv,tcp |
sed "1,5d" |
head -n -1 |
sed -E -e 's/ ([kMGT]B )/\1/g' |
sed -e 's/ bytes / /g' |
sort -h -r -k5 |
head -n 5
但同样,最佳解决方案是如果有人要更新tshark
并添加一个选项,使这些值的呈现可配置(人机可读)。这种格式被称为人机可读是有原因的,并且不需要由机器解析。
答案2
看了评论和答案后,我认为最好解析输出tshark
并使用某种编程语言来推断所需的结果。
我认为使用带有包的python比使用linux CLI工具pandas
更能让我轻松简单地完成这项任务。 我知道这不是预期的方法,但可以节省时间并更轻松。sed
sort