pfring之学习——cap文件查看解析与步骤

原文:http://hi.baidu.com/ah__fu/item/10400911b071c9041994ec3b
/*
引子:近期颓废得厉害。好多朋友向我要一个读取CAP文件的类,一方面工作繁忙,另一方面有空了就懒洋洋的不想动。
终于好好收拾了一下心情,把关于我知道的有关CAP文件的东东拿出来和朋友们分享。
*/

1、cap文件格式说明

    我所发现的情况是:windows下的ethereal和Linux下的tcpdump所抓的包为同样的CAP文件的格式,sniffer软件所抓的包文件扩展名也是.cap,但格式却不太一样。本文主要说明ethereal和tcpdump抓包产生的.cap文件的格式。

    其实,要获得PCAP文件的格式,除了直接打开.cap文件来分析外,可以看WinPcap包或Linux下/usr/include下的pcap.h头文件。pcap.h文件中不但提供了cap文件解析的各种结构体,还提供了解析函数。

    OK,先使用UE或WinHex打开.cap文件,开始分析其内容:
========================================================================
00000000h: D4 C3 B2 A1 02 00 04 00 00 00 00 00 00 00 00 00 ; 悦病............
00000010h: FF FF 00 00 01 00 00 00                         ; ......
========================================================================
    前面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_开头的宏。

    头信息后是顺序的每个数据段的信息,每个数据段中包含抓包时间、包类型等信息,然后是包的内容。
========================================================================
00000018h: F5 A4 9E 48 E5 A5 05 00 3E 00 00 00 3E 00 00 00 ; 酩濰濂..>...>...
00000028h: 00 13 C3 28 DC 00 00 E0 4D 60 61 0A 08 00 45 00 ; ..??.郙`a...E.
00000038h: 00 30 93 D0 40 00 80 06 2E 46 C0 A8 09 EA 3D 81 ; .0撔@.€..F括.??
00000048h: 30 9E 04 98 00 50 EB 1A 0A B7 00 00 00 00 70 02 ; 0??P?.?...p.
00000058h: FF FF 4F B4 00 00 02 04 05 B4 01 01 04 02       ; O?....?...
========================================================================
    以上一个数据段的内容。数据段的头对应的结构体为:
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包。

    OK,有了以上参考,按照偏移量读取cap文件的内容就易如反掌了。
/*
引子:近期颓废得厉害。好多朋友向我要一个读取CAP文件的类,一方面工作繁忙,另一方面有空了就懒洋洋的不想动。
终于好好收拾了一下心情,把关于我知道的有关CAP文件的东东拿出来和朋友们分享。
*/

    我所发现的情况是:windows下的ethereal和Linux下的tcpdump所抓的包为同样的CAP文件的格式,sniffer软件所抓的包文件扩展名也是.cap,但格式却不太一样。本文主要说明ethereal和tcpdump抓包产生的.cap文件的格式。

    其实,要获得PCAP文件的格式,除了直接打开.cap文件来分析外,可以看WinPcap包或Linux下/usr/include下的pcap.h头文件。pcap.h文件中不但提供了cap文件解析的各种结构体,还提供了解析函数。

    OK,先使用UE或WinHex打开.cap文件,开始分析其内容:
========================================================================
00000000h: D4 C3 B2 A1 02 00 04 00 00 00 00 00 00 00 00 00 ; 悦病............
00000010h: FF FF 00 00 01 00 00 00                         ; ......
========================================================================
    前面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_开头的宏。

    头信息后是顺序的每个数据段的信息,每个数据段中包含抓包时间、包类型等信息,然后是包的内容。
========================================================================
00000018h: F5 A4 9E 48 E5 A5 05 00 3E 00 00 00 3E 00 00 00 ; 酩濰濂..>...>...
00000028h: 00 13 C3 28 DC 00 00 E0 4D 60 61 0A 08 00 45 00 ; ..??.郙`a...E.
00000038h: 00 30 93 D0 40 00 80 06 2E 46 C0 A8 09 EA 3D 81 ; .0撔@.€..F括.??
00000048h: 30 9E 04 98 00 50 EB 1A 0A B7 00 00 00 00 70 02 ; 0??P?.?...p.
00000058h: FF FF 4F B4 00 00 02 04 05 B4 01 01 04 02       ; O?....?...
========================================================================
    以上一个数据段的内容。数据段的头对应的结构体为:
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包。

    OK,有了以上参考,按照偏移量读取cap文件的内容就易如反掌了。

  2、读取cap文件内容的步骤:

 1.跳过头文件,file_head_length = sizeof(struct pcap_file_header)
2.读取一个包,然后减去packet_head_length = hdr.extended_hdr.parsed_pkt.offset.payload_offset,所得到的数据就为包的实际内容
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CAP数据是一种用于网络数据分析和调试的文件格式。它是由Wireshark和其他网络数据分析工具使用的常见格式之一。 对于Java开发人员来说,解析CAP数据可以帮助他们分析网络通信和调试网络问题。以下是解析CAP数据的一般步骤: 1. 安装Wireshark:Wireshark是一个流行的开源网络分析工具,可以用于解析CAP数据。首先,下载并安装Wireshark。 2. 打开CAP文件:打开Wireshark并导入CAP文件。选择“File”菜单中的“Open”选项,然后选择要打开的CAP文件。 3. 分析网络报文:Wireshark会将CAP数据解析为一系列的网络报文。每个报文都含了与网络通信相关的信息,如源IP地址、目标IP地址、发送和接收的数据等。通过仔细查看每个报文的详细信息,可以了解网络通信的细节和问题所在。 4. 过滤和搜索:Wireshark提供了强大的过滤和搜索功能,可以帮助你筛选和查找特定类型的报文。通过在过滤栏中输入条件,如源IP地址、目标IP地址、协议类型等,可以将报文集中在感兴趣的部分,并更快地定位问题。 5. 统计和图表:Wireshark还提供了一些统计和图表功能,可以帮助你更好地理解和分析网络通信。例如,你可以查看流量分布图表、协议分布图表等,以了解哪些协议和应用程序使用了最多的网络带宽。 通过解析CAP数据,Java开发人员可以更好地了解网络通信和调试网络问题。这对于排除网络故障、优化网络性能以及开发和测试网络应用程序都是非常有帮助的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值