zoukankan      html  css  js  c++  java
  • cap文件的格式说明

    前面24个字节是.cap文件的文件头。

    头信息对应的结构体为:
    struct pcap_file_header {
      bpf_u_int32 magic;
      u_short version_major;
      u_short version_minor;
      bpf_int32 thiszone; /* gmt to local correction */
      bpf_u_int32 sigfigs; /* accuracy of timestamps */
      bpf_u_int32 snaplen; /* max length saved portion of each pkt */
      bpf_u_int32 linktype; /* data link type (LINKTYPE_*) */
    };

    cap文件中的linktype很重要,不同的网络环境下抓包,数据帧的帧头是不一样的。
    在局域网内抓包,linktype为1 ( DLT_EN10MB, Ethernet (10Mb) ),以太网的帧头就是两个网卡物理地址;
    如果直接用ADSL拨号上线,则linktype为9 ( DLT_PPP, Point-to-point Protocol),数据帧头为PPP协议。
    关于linktype支持的类型,可以参考pcap-bpf.h中定义的以DLT_开头的宏。


    ========================================================================

    头信息后是顺序的每个数据段的信息,每个数据段中包含抓包时间、包类型等信息,然后是包的内容。
    struct pcap_pkthdr {
    struct timeval ts; /* time stamp */
    bpf_u_int32 caplen; /* length of portion present */
    bpf_u_int32 len; /* length this packet (off wire) */
    };
    ts为抓包的时间;
    caplen和len我发现一般都是一样的。(什么情况下会不一样还没搞懂)

    16字节的数据段头之后就是包的信息了。例子中的包信息是局域网中抓的,所以是以太网帧头,结构体如下:
    struct EthernetPacket
    {
    char MacDst[6]; ///< 目的网卡物理地址
    char MacSrc[6]; ///< 源网卡物理地址
    unsigned short PacketType; ///< 包类型, ip或ARP等
    };
    PacketType=0x0008是IP包,PacketType=0x0608是ARP包。

    红色框内为 pcap_file_header 

    绿色框内为 pcap_pkthdr

    后面为包内数据

    注意两个长度,一个是高位在后,一个是高位在前,后边长度不包含IP头长度

  • 相关阅读:
    LeetCode刷题记录(1)
    TypeScript实现设计模式——观察者模式
    TypeScript实现设计模式——策略模式
    TypeScript实现设计模式——工厂模式
    TypeScript实现设计模式——单例模式
    nodejs爬虫--抓取CSDN某用户全部文章
    JavaScript实现常见的数据结构
    利用PicGo、GitHub和jsDelivr搭建图床
    2019年终总结
    Git学习记录(一)
  • 原文地址:https://www.cnblogs.com/bloodofhero/p/4147320.html
Copyright © 2011-2022 走看看