• 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头长度

  • 相关阅读:
    Eclipse调试常用技巧
    12个小技巧,让你高效使用Eclipse
    Java程序生成exe可执行文件详细教程(图文说明)
    手机打开PDF文档中文英文支持(乱码问题)解决攻略
    Java修饰符public,private,protected及默认的区别
    Eclipse 各种小图标的含义
    continue break return的区别
    Android开发快速入门(环境配置、Android Studio安装)
    Struts2中的Unable to load configuration错误的分析与解决方法
    认识与入门 Markdown,Markdown教程
  • 原文地址:https://www.cnblogs.com/bloodofhero/p/4147320.html
Copyright © 2020-2023  润新知