libpcap+PF_RING源码分析
smilestone322
通过软考: 系统架构设计师和信息系统项目管理师考试
工业相机和DVR开发,熟悉windows驱动开发,camera sdk开发,3D摄像头sdk开发。
联系方式:smilestone322@sina.com
展开
-
libpcap和pfring应用程序--Pcap_open_live(二)
首先以libpcap为主线,先通过pcap_open_live函数,做一些初始化的操作,比如打开网卡,设置好读取数据包的回调函数等等,然后就可以通过pcap_next,pcap_next_ex,pcap_dispatch,pcap_loop来捕获数据包了。本文的主要宗旨是分析源码,从应用层的libpcap,pfring一直分析到内核的PF_RING,通过对源码的讲解,使得我们深入的理解PF_RIN原创 2012-12-29 21:22:08 · 18523 阅读 · 1 评论 -
PF_RING模块初始化(五)
Linux2.6的内核后对模块机制更加重视了,因为模块可以很方便的添加到内核,也可以很方便的从内核移除,对于驱动程序来说是一个很方便的事情,当需要该模块的时候采用insmod插入到内核,不需要时可以采用rmmod从内核很方便的删除,这样可以避免内核由于外设驱动程序的增多还不断庞大,linux和windows的一个区别就是linux的内核和应用程序是可以定制的,这样用户可以根据自己的需要进行配置,减原创 2012-12-29 21:28:40 · 2637 阅读 · 0 评论 -
socket的创建(六)
Socket的创建函数,在PF_RING,创建sokcet的函数为ring_create,当pfring.c中通过sokcet函数建立socket时,内核调用的ring_create函数,ring_create源码如下:staticint ring_create(#if(LINUX_VERSION_CODE>= KERNEL_VERSION(2,6,24))原创 2012-12-29 21:30:19 · 1968 阅读 · 1 评论 -
mmap内存映射---(八)
在应用空间采用mmap进行内存映射时,内核调用的是ring_mmap函数;例如:我们在前面讲解时,讲解了pfring_open_consumer函数,这个函数里面调用mmap如下: ring->buffer = (char *)mmap(NULL,memSlotsLen,PROT_READ|PROT_WRITE, MAP_原创 2012-12-29 21:36:41 · 1982 阅读 · 0 评论 -
数据包的读写---(九)
数据包的读写包括从网卡中读取数据包到内核及从内核将数据包传递到用户空间,越分析到下面,就越底层了,上面已经分析了PF_RING内核补丁的大部分内容了,做完上面的工作之后,就可以读取数据包了。有时间我会以intel e1000e-1.2.17的驱动为例进行讲解,网卡驱动是怎样将数据包导入到内核的。因为在PF_RING的初始化中,注册了prot_hook。其func指针指向packet_rcv函数原创 2012-12-29 21:37:56 · 2406 阅读 · 1 评论 -
libpcap接收数据包(三)
本文以应用程序的api调用为主线,分析libpcap和pfring源码,当然还有内核PF_RING的源码在以后也会分析,以后可能我会分析从网卡驱动一直分析到应用层,争取把这些都讲清楚。Linux开源就是好,呵呵,闲话少说,继续分析,首先分析pcap_next函数吧,搞过winpcap的都知道这个是数据包的函数,一次只读一个数据包。constu_char * pcap_next(pcap_t *原创 2012-12-29 21:25:49 · 3167 阅读 · 0 评论 -
绑定和分配mmap内核空间(bind_ring)--(七)
用户态在创建了套接字后,接下来就调用bind函数,绑定套接字,而PF_RING实际做的就是为RING分配相应的空间。也就是说,一个套接字,都有一个与之对应的RING。在前面我们已经提到 sock->ops = &ring_ops;这样当应用空间调用bind函数中,内核调用ring_bind函数;即当系统调用bind触发时,内核ring_bind函数就触发了。下面讲解ring_bind函数;/原创 2012-12-29 21:35:56 · 1746 阅读 · 0 评论 -
libpcap+PF_RING源码分析---前言(一)
Libpcap是linux下用来捕获数据包的抓包库,它主要是基于socket的,和winpcap的本质的不同是,winpcap是和tcp/ip协议同层的,而libpcap是应用层的库,在tcp/ip层上对socket的又一次封装,所以从网卡得到的数据包需要经过多次拷贝才能达到应用程序,在千兆网的条件下,捕获包的性能较差,为了提高libpcap的包捕获性能,采用PF_RING对libpcap进行改进原创 2012-12-29 21:17:17 · 4744 阅读 · 2 评论 -
PF_RING 内核源码(四)
终于开始讲解内核了,唉,长舒一口气,libpcap+pfring都讲解了40页,PF_RING就更难了。原创 2012-12-29 21:26:51 · 2578 阅读 · 0 评论