Capinfos实用指南: 从零开始掌握PCAP/PCAPNG抓包文件元数据分析

2024-03-08 16:19:22 浏览数 (2)

一、前言

capinfos是Wireshark默认配套安装的命令行工具之一,从其命名来看也能顾名思义,主要用于显示抓包文件的信息,如文件格式、数据包数量、时间范围(首尾包)、数据包类型等。

使用场景大致为以下几种:

  • 检查抓包文件的基本信息:前面说过,用于查看抓包文件的格式、数据包数量、时间范围、数据包类型等基本信息,便于了解抓包文件的内容和特征;
  • 检查抓包文件的完整性:检查抓包文件是否完整,是否存在数据丢失或损坏的情况;
  • 检查抓包文件的时间范围:查看抓包文件中数据包的时间范围,以便于了解抓包文件中数据包的时间分布情况,利于快速判断抓包文件时间范围是否已经覆盖故障出现时间;
  • 检查抓包文件的数据包类型:查看抓包文件中数据包的类型,了解抓包文件中数据包的协议分布情况;
  • 检查抓包文件的过滤器:检查抓包文件中是否存在过滤器,了解抓包文件中数据包的过滤情况。

本文将详细介绍capinfos的用法案例。

二、安装

Linux

发行版

安装命令

Archlinux

pacman -Sy wireshark-cli

CentOS/Redhat

yum install -y wireshark

Debian/Ubuntu

apt install -y wireshark

Gentoo

emerge --ask wireshark

Windows

安装wireshark后,capinfos默认在wireshark安装路径:

其它配套命令也都在这个路径下:

添加路径到环境变量还是直接在路径下使用,可自行选择。

MacOS

前提:需要安装homebrew

使用homebrew安装wireshark,默认也会将capinfos安装上去:

代码语言:bash复制
brew install wireshark
brew install wireshark-chmodbpf

三、用法案例分析

0.输出所有信息

不接任何参数的情况下默认会引用-A参数,输出所有信息字段。

代码语言:bash复制
capinfos <文件名>

这些信息在Wireshark的统计(Statistics) --> 捕获文件属性(Capture File Properties)也有同样的输出:

每个字段代表什么含义实际已经写的很清晰了,没有精准过滤的需求其实已经满足你的需求了,需要更精细化控制和更多拓展用法,则继续阅读下文。

1.通用选项

1)显示文件类型(-t)

-t显示抓包文件的格式类型,文件后缀不一定和实际保存时的文件格式类型完全一致,后缀是可以通过修改文件名后缀来任意进行修改的,-t参数则分析实际的文件注入格式,而不是通过分析文件后缀:

代码语言:bash复制
capinfos -t <文件名>

比如上面这个示例,文件http-1.txt以txt结尾的后缀,实际文件格式为pcapng,file命令也能查看文件存储使用的格式;同时,使用通配符*则匹配当前目录下的所有文件,其中sum.pcap、sum.pcapng两个文件多出了一行:Packet size limit: inferred: 60bytes,这一行是包文件中数据帧的推断长度(inferred),这两个文件实际是通过mergecap -s 60来截断后合并保存的。

2)显示数据链路层协议封装类型(-E)

此参数将显示数据链路层使用的封装协议,通常情况下都是以太网(Ethernet),也可能会出现Linux cooked-mode capture,至于Linux cooked-mode capture是什么,可以参考笔者写的这篇文章。简单来讲,它是虚拟协议,在Linux抓包时指定抓包设备为所有时(-i any)可能会出现的情况。

比如下面的案例:

代码语言:bash复制
capinfos -E <文件名>

1.pcap、2.pcap的链路层协议均为以太网,且包文件中数据帧的推断长度(inferred)大小为192字节,http-2.pcap的链路层协议为Linux cooked-mode capture,因为这个包是通过tcpdump -i any来捕获保存的。

3)显示包文件接口信息、链路层协议(-I)

-I选项可以帮助了解抓包文件中的数据包来源,譬如网络接口、链路层协议等:

代码语言:bash复制
capinfos -I <文件名>

同时还显示了总包量、时间精度、捕获长度等详细信息。

4)显示包文件的附加信息(-F)

这个选项会尽可能显示能识别到的抓包文件的额外信息,比如时间精度、包文件中每个数据帧的推断长度(inferred)、抓包时使用的抓包程序版本、使用的操作系统:

代码语言:bash复制
capinfos -F <文件名>

5)显示文件的SHA256、RIPEMD160和SHA1散列(-H)

这个参数相当于把sha256sum、sha1sum、ripemd160等用来计算文件hash值的工具合并输出了,有利于校验文件一致性,避免抓包文件被篡改的情况:

代码语言:bash复制
capinfos -H <包文件>

2.文件大小选项

1)显示包量(-c)

此选项用于打印包文件里的帧数量:

代码语言:bash复制
capinfos -c <文件名>

对应在wireshark页面的 统计(Statistics) --> 捕获文件属性(Capture File Properties),也有这部分信息:

2)显示捕获文件的大小(-s)

以字节为单位,统计包文件大小:

代码语言:bash复制
capinfos -s <文件名>

如图,File size即为文件大小字段,如果文件过大会自动进行单位转换。

3)显示所有数据包的总长度(-d)

统计包文件中所有包的Length总大小:

代码语言:bash复制
capinfos -d <文件名>

以http-2.pcap为例,统计的大小为726字节,我们通过tshark把每个包的frame.len字段值输出出来,并且用awk做一个累加,刚好为726字节:

代码语言:bash复制
tshark -n -r <文件名> -T fields -E header=y -e 'ip.src' -e 'ip.dst' -e 'frame.len'|column -t|awk 'NR>1{sum =$NF}END{print sum}'

4)显示数据包大小限制(-l)

此选项会显示包文件抓包时的限制大小(file hdr)和包文件中数据帧的推断长度(inferred):

代码语言:bash复制
capinfos -l <文件名>

输出含义如下:

代码语言:bash复制
File name:           1.pcap
Packet size limit:   file hdr: 2048 bytes #抓包设置的每个帧最大抓包Length
Packet size limit:   inferred: 192 bytes  #根据包文件里的帧推断的Length

File name:           2.pcap
Packet size limit:   file hdr: 2048 bytes  #抓包设置的每个帧最大抓包Length
Packet size limit:   inferred: 192 bytes   #根据包文件里的帧推断的Length

File name:           http-2.pcap
Packet size limit:   file hdr: (not set)  #没有设限

3.时间信息选项

1)统计捕获持续时间(-u)

以秒为单位,显示统计抓包时的持续时间:

代码语言:bash复制
capinfos -u <文件名>

以1.pcap为例,如上图,-u统计的时间间隔为2466.796133秒,我们先通过-I选项拿到包文件的总包量:

代码语言:bash复制
capinfos -I <文件名>

包量为1911713,也就是说最后一帧的帧序号为1911713;此时通过tshark,来看最后一帧相对于第一帧的时间间隔:

代码语言:bash复制
tshark -n -r <文件名> -t r -Y 'frame.number==xxx'

输出结果为2466.796133秒,符合预期。所以可以清晰知道,-u统计方法实际就是尾包减去首包的时间差。

2)显示抓包的开始时间日期(-a)

此参数不用做过多介绍:

代码语言:bash复制
capinfos -a <文件名>

还有很多种方式可以查看抓包开始时间,比如通过tshark输出第一帧的时间:

代码语言:bash复制
tshark -n -r <文件名> -t ud -Y 'frame.number==1'

-t ud统计的是UTC时间,需要在此基础上 8才是北京时间。

在Wireshark的捕获文件属性里,也能看到首尾包时间:

3)显示抓包的结束时间日期(-e)

与开始(-a)相对的则为-e显示抓包结束时间,实际就是统计尾包的时间日期:

代码语言:bash复制
capinfos -e <包文件>

如图,通过tshark统计尾包的UTC时间再 8,也能得到相同的结果。

-a和-e可以同时使用,既显示开始时间又显示结束时间:

代码语言:bash复制
capinfos -a -e <包文件>

4)显示抓包文件的时间顺序真假(-o)

当数据帧的顺序没有严格按照时间顺序进行排列时,则会判定为False,反之判定为True:

代码语言:bash复制
capinfos -o <文件名>

以下面这个例子为例:

sum-desc.pcap的包序,没有严格按照绝对时间进行排序,-o选项识别为False:

而反观sum.pcap的包序,已经严格按照绝对时间排序,识别为True:

路径下还有1.pcap、2.pcap识别为False:

通过时间戳也可以判断,tshark时间格式设定为-t d(delta时间,相对于上一个frame的时间间隔),如果出现负值,则说明包序不对(即:明明更早就收到了,但排序在后面):

所以-o判定为False。

4.统计分析选项

1)统计数据传输平均速率(-y/-i)

输出单位为字节每秒( Bytes/sec):

代码语言:bash复制
capinfos -y <文件名>

Data byte rate字段即为数据传输的平均速率。

输出单位以比特每秒(bit/sec),则为-i选项:

代码语言:bash复制
capinfos -i <文件名>

2)统计每个帧的平均大小(-z)

默认以字节为单位:

代码语言:bash复制
capinfos -z <文件名>

Average packet size字段即为每个帧的平均大小。

3)统计平均收发包速率(-x)

单位为包量每秒:

代码语言:bash复制
capinfos -x <文件名>

统计逻辑也很简单,平均包速率 = 总包量 / 总时间,比如sum.pcap:

5.输出格式选项

选项

含义

-L

生成长报告,默认行为

-T

以表格形式生成

-M

在长报告中显示机器可读的值

值得一讲的是-T参数,-T参数下面还包含一系列子选项:

选项

含义

-R

生成头记录,默认行为

-r

不生成头记录

-B

使用TAB字符分隔字段,默认行为

-m

使用逗号(,)分隔字段

-b

使用空格分隔字段

-N

不要引用信息,默认行为

-q

使用单引号引用信息

-Q

使用双引号引用信息

-T后面接什么按需调整,如果一次性需要读取包信息的内容比较多,可以考虑把输出内容重定向到Excel文件,比如:

代码语言:bash复制
capinfos -T <文件名> > output.xlsx

用Excel打开的效果:

输出的字段包含所有信息,因为没有接任何其他选项,默认采用-A,即输出所有信息:

结合前面所讲的参数,你可以任意搭配使用,比如显示包量、文件类型、hash值、抓包持续时间、传输平均速率,可以是:

代码语言:bash复制
capinfos -c -t -H -u -y -T <文件名> > output.xlsx

此时输出的字段则为我们想要的内容:

四、总结

本文介绍了capinfos的使用方法及其在实际应用中的案例,也包含了所有重要参数的用法分析,如果没有特殊需求,不加任何参数是最快最高效率的方式。同时,capinfos是Wireshark套件中一个实用的命令行工具,方便快速查看抓包文件(包括但不限于pcap、pcapng等)的元数据信息,包括文件类型、数据链路层类型、数据包数量、文件大小、捕获持续时间等,利于快速定位抓包文件是否覆盖到异常时间点。

附带PDF版本:

Capinfos实用指南:从零开始掌握PCAP/PCAPNG抓包文件元数据分析.pdf

0 人点赞