三千年读史无外乎功名利禄,九万里悟道终归是诗酒田园。

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

一、前言

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安装上去:

brew install wireshark
brew install wireshark-chmodbpf

三、用法案例分析

0.输出所有信息

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

capinfos <文件名>

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

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

1.通用选项

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

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

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)可能会出现的情况。

比如下面的案例:

capinfos -E <文件名>

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

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

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

capinfos -I <文件名>

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

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

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

capinfos -F <文件名>

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

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

capinfos -H <包文件>

2.文件大小选项

1)显示包量(-c)

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

capinfos -c <文件名>

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

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

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

capinfos -s <文件名>

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

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

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

capinfos -d <文件名>

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

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):

capinfos -l <文件名>

输出含义如下:

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)

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

capinfos -u <文件名>

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

capinfos -I <文件名>

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

tshark -n -r <文件名> -t r -Y 'frame.number==xxx'

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

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

此参数不用做过多介绍:

capinfos -a <文件名>

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

tshark -n -r <文件名> -t ud -Y 'frame.number==1'

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

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

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

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

capinfos -e <包文件>

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

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

capinfos -a -e <包文件>

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

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

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):

capinfos -y <文件名>

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

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

capinfos -i <文件名>

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

默认以字节为单位:

capinfos -z <文件名>

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

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

单位为包量每秒:

capinfos -x <文件名>

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

5.输出格式选项

选项 含义
-L 生成长报告,默认行为
-T 以表格形式生成
-M 在长报告中显示机器可读的值

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

选项 含义
-R 生成头记录,默认行为
-r 不生成头记录
-B 使用TAB字符分隔字段,默认行为
-m 使用逗号(,)分隔字段
-b 使用空格分隔字段
-N 不要引用信息,默认行为
-q 使用单引号引用信息
-Q 使用双引号引用信息

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

capinfos -T <文件名> > output.xlsx

用Excel打开的效果:

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

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

capinfos -c -t -H -u -y -T <文件名> > output.xlsx

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

四、总结

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

赞(10)
转载请注明出处:RokasYang's Blog » Capinfos实用指南: