PCAP详解

在使用nexmon工具时,其提取的CSI最后保存在pcap文件中,因此学习一下pcap文件。

一、PCAP抓包

  抓包(Packet Capture)是一种网络分析工具,而PCAP是一个数据包抓取库, 很多软件都是用它来作为数据包抓取工具的,比如WireShark也是用PCAP库来抓取数据包的。PCAP抓取出来的数据包并不是原始的网络字节流,而是对其进行从新组装,形成一种新的数据格式。它可以记录网络数据包的详细信息,包括源地址、目标地址、协议类型、数据内容等。

在 Linux 中,可以使用工具如 tcpdump 或 Wireshark 来进行抓包操作。以下是一些常见的抓包工具和示例用法:

  1. tcpdump

    • 安装 tcpdump:如果系统未安装 tcpdump,可以使用包管理工具进行安装。例如,在 Debian/Ubuntu 系统中可以使用 sudo apt install tcpdump 命令安装。
    • 抓取数据包:可以使用以下命令抓取指定网络接口的数据包,并将结果保存到文件中:
      sudo tcpdump -i eth0 -w capture.pcap
      
      其中 -i eth0 指定抓取的网络接口为 eth0,-w capture.pcap 指定将抓取的数据包保存到 capture.pcap 文件中。
    • 查看抓包结果:可以使用 Wireshark 或 tcpdump 自带的命令行工具(例如 tcpdump -r capture.pcap)来查看抓取的数据包内容。
  2. Wireshark

    • 安装 Wireshark:可以从 Wireshark 官网下载安装包,并根据系统进行安装。
    • 使用 Wireshark 图形界面进行抓包操作:打开 Wireshark 图形界面,在菜单栏选择相应的网络接口(如 eth0),然后点击“开始捕获”按钮进行抓包。抓包结束后,可以保存捕获的数据包到 PCAP 文件中。

Tips:在使用抓包工具时需要管理员权限或 root 权限,以便访问网络接口并进行数据包捕获操作。另外,抓包操作会捕获网络上的所有数据包,包括敏感信息,请在合法授权和合规的情况下使用抓包工具。

二、PCAP格式

pcap文件格式是bpf保存原始数据包的格式,很多软件都在使用,比如tcpdump、wireshark等等,
了解pcap格式可以加深对原始数据包的了解,自己也可以手工构造任意的数据包进行测试。pcap文件的格式为:

  • 文件头header:24字节
    数据包头 + 数据包 :数据包头为16字节,后面紧跟数据包
    数据包头 + 数据包 …:一个用PCAP抓取的数据包的文件格式如下:
  1. Pcap文件头24B各字段说明:
    pcap.h里定义了文件头的格式

    struct pcap_file_header {
    	bpf_u_int32 magic;
    	u_short version_major;
    	u_short version_minor;
    	bpf_int32 thiszone; 
    	bpf_u_int32 sigfigs; 
    	bpf_u_int32 snaplen; 
    	bpf_u_int32 linktype; 
    };
    

    | magic |major | minor | thiszone | sigfigs | snaplen | linktype |
    | d4 c3 b2 a1 | 02 00 | 04 00 | 00 00 00 00 | 00 00 00 00 | ff ff 00 00 | 01 00 00 00 |

    Magic: 4B:0x1A 2B 3C 4D :用来标示文件的开始
    Major: 2B,0x02 00 :当前文件主要的版本号
    Minor: 2B,0x04 00 当前文件次要的版本号
    ThisZone: 4B 当地的标准时间;全零
    SigFigs: 4B 时间戳的精度;全零
    SnapLen: 4B 最大的存储长度,4字节抓包最大长度如果要抓全,设为0x0000ffff
    (65535),tcpdump -s 0就是设置这个参数,缺省为68字节
    LinkType: 4B 链路类型

    • 常用类型:
        0 BSD loopback devices, except for later OpenBSD
        1 Ethernet, and Linux loopback devices
        6 802.5 Token Ring
        7 ARCnet
        8 SLIP
        9 PPP
        10 FDDI
        100 LLC/SNAP-encapsulated ATM
        101 “raw IP”, with no link
        102 BSD/OS SLIP
        103 BSD/OS PPP
        104 Cisco HDLC
        105 802.11
        108 later OpenBSD loopback devices (with the AF_value in network byte order)
        113 special Linux “cooked” capture
        114 LocalTalk
      其中我们最为常见的类型就是1,以太网链路。
  2. Pcap数据包头各字段说明:

    struct pcap_pkthdr {
    	struct timeval ts; 
    	bpf_u_int32 caplen; 
    	bpf_u_int32 len; 
    };
    struct timeval {
    	long tv_sec; 
    	suseconds_t tv_usec; 
    };
    

    Timestamp:时间戳高位,精确到seconds;时间戳低位,精确到microseconds;8字节的抓包时间 ,4字节表示秒数,4字节表示微秒数;
    Caplen:4字节 保存下来的包长度(最多是snaplen,比如68字节),即抓取到的数据帧长度,由此可以得到下一个数据帧的位置。
    Len:4字节数据包的真实长度,即离线数据长度:网络中实际数据帧的长度,一般不大于caplen,多数情况下和Caplen数值相等。
    Packet 数据:即 Packet(通常就是链路层的数据帧去掉前面用于同步和标识帧开始的8字节和最后用于CRC校验的4字节)具体内容,长度就是Caplen,这个长度的 后面,就是当前PCAP文件中存放的下一个Packet数据包,也就是说:PCAP文件里面并没有规定捕获的Packet数据包之间有什么间隔字符串,我 们需要靠第一个Packet包确定下一组数据在文件中的起始位置,向后以此类推。

  • 28
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值