pfring
ygmdream
为人处世!
展开
-
libpcap+PF_RING源码分析---前言(一)
http://blog.csdn.net/smilestone_322/article/details/8451604Libpcap是Linux下用来捕获数据包的抓包库,它主要是基于socket的,和winpcap的本质的不同是,winpcap是和tcp/ip协议同层的,而libpcap是应用层的库,在tcp/ip层上对socket的又一次封装,所以从网卡得到的数据包需要经过多次拷贝才能达转载 2017-03-20 20:46:05 · 1725 阅读 · 0 评论 -
PF_RING开发指南
1. 概述PF_RING是Luca Deri发明的提高内核处理数据包效率,并兼顾应用程序的补丁,如Libpcap和TCPDUMP等,以及一些辅助性程序(如ntop查看并分析网络流量等)。PF_RING是一种新型的网络socket,它可以极大的改进包捕获的速度。并且有如下特征:1) 可以用于Linux 2.6.18以上的内核;2) 4.x版本的PF_RING可以直接应用于内核转载 2017-03-20 20:15:41 · 2181 阅读 · 0 评论 -
libpcap和pfring应用程序--Pcap_open_live(二)
首先以libpcap为主线,先通过pcap_open_live函数,做一些初始化的操作,比如打开网卡,设置好读取数据包的回调函数等等,然后就可以通过pcap_next,pcap_next_ex,pcap_dispatch,pcap_loop来捕获数据包了。本文的主要宗旨是分析源码,从应用层的libpcap,pfring一直分析到内核的PF_RING,通过对源码的讲解,使得我们深入的理解PF_RIN转载 2017-03-20 20:50:02 · 3605 阅读 · 0 评论 -
libpcap接收数据包(三)
本文以应用程序的api调用为主线,分析libpcap和pfring源码,当然还有内核PF_RING的源码在以后也会分析,以后可能我会分析从网卡驱动一直分析到应用层,争取把这些都讲清楚。Linux开源就是好,呵呵,闲话少说,继续分析,首先分析pcap_next函数吧,搞过winpcap的都知道这个是数据包的函数,一次只读一个数据包。constu_char * pcap_next(pcap_t *转载 2017-03-20 21:01:28 · 1367 阅读 · 0 评论 -
PF_RING模块初始化(五)
Linux2.6的内核后对模块机制更加重视了,因为模块可以很方便的添加到内核,也可以很方便的从内核移除,对于驱动程序来说是一个很方便的事情,当需要该模块的时候采用insmod插入到内核,不需要时可以采用rmmod从内核很方便的删除,这样可以避免内核由于外设驱动程序的增多还不断庞大,Linux和windows的一个区别就是linux的内核和应用程序是可以定制的,这样用户可以根据自己的需要进行配置,减转载 2017-03-20 21:02:43 · 623 阅读 · 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))转载 2017-03-20 21:03:26 · 504 阅读 · 0 评论 -
绑定和分配mmap内核空间(bind_ring)--(七)
用户态在创建了套接字后,接下来就调用bind函数,绑定套接字,而PF_RING实际做的就是为RING分配相应的空间。也就是说,一个套接字,都有一个与之对应的RING。在前面我们已经提到 sock->ops = &ring_ops;这样当应用空间调用bind函数中,内核调用ring_bind函数;即当系统调用bind触发时,内核ring_bind函数就触发了。下面讲解ring_bind函数;/转载 2017-03-20 21:03:58 · 486 阅读 · 0 评论 -
mmap内存映射---(八)
在应用空间采用mmap进行内存映射时,内核调用的是ring_mmap函数;例如:我们在前面讲解时,讲解了pfring_open_consumer函数,这个函数里面调用mmap如下: ring->buffer = (char *)mmap(NULL,memSlotsLen,PROT_READ|PROT_WRITE, MAP_转载 2017-03-20 21:04:33 · 527 阅读 · 0 评论 -
数据包的读写---(九)
数据包的读写包括从网卡中读取数据包到内核及从内核将数据包传递到用户空间,越分析到下面,就越底层了,上面已经分析了PF_RING内核补丁的大部分内容了,做完上面的工作之后,就可以读取数据包了。有时间我会以intel e1000e-1.2.17的驱动为例进行讲解,网卡驱动是怎样将数据包导入到内核的。因为在PF_RING的初始化中,注册了prot_hook。其func指针指向packet_rcv函数转载 2017-03-20 21:05:22 · 980 阅读 · 0 评论