基于libpcap多网卡抓包编程心得

公司业务需要,需要做一个libpcap项目抓包流量分析服务,网上关于此类项目不多,因此自己实现了一个

关于libpcap的一些基础部分这里不再陈诉了

注 : 本文因为频繁使用malloc的操作,为了防止内存碎片,均采用的jemmloc库 

前提数据结构[ 注 : 下面的抄袭的nginx的ngx_string , 其实说实话,关于此类数据结构,实用性上,redis的sds实现的较为全面,数据接口多,不用你再重复造轮子,我只是个人喜欢nginx的小巧和自定义的灵活,因此拿来使用了,如果各位自己实现,建议使用redis的sds世界使用]

typedef mini_str_s {  int len; u_char* data; }mini_str_t;

#define mini_string(str)     { sizeof(str) - 1, (u_char *) str }

#define ngx_str_set(str, text)  (str)->len = sizeof(text) - 1; (str)->data = (u_char *) text

1 : 基本数据结构定义

    定义每个采集网卡数据结构

    typedef struct cap_ctx_s{
        pcap_t* handle;   // pcap_t结构指针
        mini_str_t device;       //网卡名称 : “eth0”“vlan0”
        char* errbuf;        //错误消息
        mini_str_t filter;          //过滤表达式          

    }cap_ctx_t ;   //采集数据结构

   typedef struct cap_array_s{
        zlist_t* context;    //存放cap_ctx_t的list
        int capnums;       // cap_ctx_t采集器的数量

   }cap_array_t;

   2 : 数据操作

   2.1 初始化一个采集端口

// 参数

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值