libpcap解析pcapng文件

libpcap介绍

libpcap(Packet Capture Library)即数据包捕获函数库,是Unix/Linux平台下的网络数据包捕获函数库。它是独立于系统的用户层包捕获的API接口,为底层网络监测提供了一个可移植的框架。

Linux下安装libpcap

命令行安装

sudo apt-get install libpcap-dev

分析

struct pcap_pkthdr * pkthdr
libpcap的包头

struct pcap_pkthdr  
{  
    struct timeval ts;  // 抓到包的时间
    bpf_u_int32 caplen; // 表示抓到的数据长度,抓取的长度
    bpf_u_int32 len; // 表示数据包的实际长度,本来应有长度
}  

const u_char * packet(真正的包的数据)
pcap_open_offline函数
函数说明:pcap_t *pcap_open_offline(char *fname, char *ebuf)
函数功能:打开以前保存捕获数据包的文件,用于读取。
参数说明:fname参数指定打开的文件名。ebuf参数则仅在pcap_open_offline()函数出错返回NULL时用于传递错误消息。
pcap_next函数
函数说明:const u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h)
函数功能:捕获数据包,返回一个无符号指针指向抓取到的数据

示例

运行命令

gcc test.c -o test -lpcap
#include <stdio.h>
#include <pcap.h>

char errbuf[512] = "";
typedef unsigned char	u_char;
int main()
{
    int i = 0;
    struct pcap_pkthdr pkthdr;
    pcap_t *pcap_str = pcap_open_offline("./test.pcapng", errbuf);
    if(!pcap_str)
    {
        printf("error file format\n");
    }

    while(1)
    {
        const u_char *pkt_buff = pcap_next(pcap_str, &pkthdr);
        if(!pkt_buff)
        {
            printf("file read over\n");
            return 0;
        }
        for(i = 0; i < pkthdr.caplen; i++)
        {
            printf("%d ", pkt_buff[i]);
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值