公司业务需要,需要做一个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 初始化一个采集端口
// 参数 |