前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Capinfos实用指南: 从零开始掌握PCAP/PCAPNG抓包文件元数据分析

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

原创
作者头像
RokasYang
修改2024-03-08 16:19:22
7630
修改2024-03-08 16:19:22
举报
文章被收录于专栏:RokasYangRokasYang

一、前言

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版本:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、安装
    • Linux
      • Windows
        • MacOS
        • 三、用法案例分析
          • 0.输出所有信息
            • 1.通用选项
              • 1)显示文件类型(-t)
              • 2)显示数据链路层协议封装类型(-E)
              • 3)显示包文件接口信息、链路层协议(-I)
              • 4)显示包文件的附加信息(-F)
              • 5)显示文件的SHA256、RIPEMD160和SHA1散列(-H)
            • 2.文件大小选项
              • 1)显示包量(-c)
              • 2)显示捕获文件的大小(-s)
              • 3)显示所有数据包的总长度(-d)
              • 4)显示数据包大小限制(-l)
            • 3.时间信息选项
              • 1)统计捕获持续时间(-u)
              • 2)显示抓包的开始时间日期(-a)
              • 3)显示抓包的结束时间日期(-e)
              • 4)显示抓包文件的时间顺序真假(-o)
            • 4.统计分析选项
              • 1)统计数据传输平均速率(-y/-i)
              • 2)统计每个帧的平均大小(-z)
              • 3)统计平均收发包速率(-x)
            • 5.输出格式选项
            • 四、总结
            相关产品与服务
            命令行工具
            腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档