• pacp格式文件分析


    1 介绍

    1.1. 五元组

    网络通信过程中会发送大量的请求,每一个请求都需要通过IP数据包进行交互,但是IP数据包的头部信息过于复杂,如果通过IP数据包头进行数据包之间的区分就太复杂了,所以就产生了元组。

    五元组是元组中的一种,还有四元组、七元组。通过五元组可以表示所在的数据包属于哪一个会话。该头正在数据包查重和流量对比的时候使用较多。

    五元组的结构包括:IP源地址、源端口、目的IP地址、目标端口、4层通信协议。

    1.2 pacp文件格式

    文件头+数据包头+数据+数据包头+数据+数据包头+数据+…

    数据包格式:

    结构名称字节数作用
    文件头Global Header24整个数据流文件,只会有一个Global Header,它定义了本文本的读取规则、最大存取长度限制等内容
    数据包头 Packet Header16Pachet Header可以有多个,每个Packet Header后面会跟一串Packet Data, Packet Header定义了Packet Data的长度、时间戳等信息
    Packet Data

    2 结构介绍

    2.1 Global Header 文件头

    这里以nacp库中定义的结构为例
    结构定义如下:
    在这里插入图片描述

    struct pcap_file_header {
    	bpf_u_int32 magic;		// 文件开始标记
    	u_short version_major;	// 当前文件主要的版本号
    	u_short version_minor;  // 当前文件次要的版本号
    	bpf_int32 thiszone;	    // 当地的标准时间 gmt to local correction; this is always 0
    	bpf_u_int32 sigfigs;	// 时间戳精度    accuracy of timestamps; this is always 0
    	bpf_u_int32 snaplen;	// 最大的存储长度 max length saved portion of each pkt
    	bpf_u_int32 linktype;	// 链路类型      data link type (LINKTYPE_*)
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1、Magic
    名称:文件开始标记
    大小4Byte
    描述:用来识别文件自己和字节顺序。
    0xa1b2c3d4:用来表示按照原来的顺序读取。
    0xd4c3b2a1:表示下面的字节都要交换顺序读取。
    考虑到计算机的内存结构,一般采用0xd4c3b2a1,如下
    0xd4c3b2a1:所有字节都需要交换顺序读取

    2、 Major
    名称:当前文件主要的版本号
    大小:2Byte
    描述:一般为 0x0200 。【实际上因为需要交换读取顺序,所以计算机应该看到的是 0x0002

    3、 Minor
    名称:当前文件次要版本号
    大小:4Byte
    描述
    一般为 0x0400
    【计算机看到的应该是 0x0004

    4、 ThisZone
    名称:当地的标准时间
    大小:4Byte
    描述:如果用的是 GMT 则全零。一般都直接写 0000 0000

    5、 SigFigs
    名称:时间戳精度
    大小:4Byte
    描述:设置为 全零 即可。

    6、 SnapLen
    名称:最大存储长度
    大小:4Byte
    描述:如果想把整个包抓下来,设置为 ffff 0000,但一般来说 ff7f 0000就足够了。
    【计算机中看到的应该是 0000 ff7f

    7、 LinkType
    名称:链路类型
    大小:4Byte
    描述

    2.2 Packet Header 数据包头

    这里以nacp库中定义的结构为例
    数据包头有三个属性,每个属性占固定大小,所以可以使用一个结构体表示。
    在这里插入图片描述

    struct pcap_pkthdr {
    	struct timeval ts;	// 捕获时间 time stamp
    	bpf_u_int32 caplen;	// 数据帧/区的长度 length of portion present
    	bpf_u_int32 len;	// 离线数据长度 length of this packet (off wire)
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1、Timestamp
    名称:被捕获时间的高位
    大小:4Byte
    描述:单位 seconds

    2、Timestamp

    名称:被捕获时间的低位
    大小:4Byte
    描述:单位 microseconds

    3、Caplen

    名称:当前数据区的长度,即抓取到数据帧的长度
    大小:4Byte
    描述:不包括 Packet Header 本身的长度,单位是 Byte,由此可以的找到下一个数据帧的位置。

    4、Len

    名称:离线数据长度
    大小:4Byte
    描述:网络中实际数据帧的长度,一般不大于 caplen,多数情况下和 Caplen的数值相等。

    2.3 Packet Data 数据包数据

    参考地址:
    https://blog.csdn.net/qq_43481350/article/details/119909121
    https://blog.csdn.net/m0_58087444/article/details/123078984
    C语言解析pcap文件得到HTTP信息实例https://blog.csdn.net/koudaidai/article/details/7673082

  • 相关阅读:
    msvcp140.dll丢失的解决方法-一键下载自动快速修复msvcp140.dll
    基于同名面片的TLS测站点云配准
    【算法】第二代遗传算法NSGA-II优化SVR超参数模型
    史上最详细的hadoop安装教程
    今日头条小程序是什么
    [附源码]java毕业设计面向服装集群企业的个性化定制服务系统
    TypeScript 贪吃蛇游戏详细教程
    C Primer Plus(6) 中文版 第2章 C语言概述 2.1 简单的C程序示例
    【Uniapp小程序】自定义导航栏uni-nav-bar滚动渐变色
    R语言ggplot2可视化:使用ggpubr包的ggbarplot函数可视化柱状图、palette参数自定义不同水平柱状图边框以及填充的颜色
  • 原文地址:https://blog.csdn.net/zx77588023/article/details/126285001