免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1642 | 回复: 0
打印 上一主题 下一主题

libpcap(Packet Capture Library) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-01 09:51 |只看该作者 |倒序浏览
因为要在基本的LFS系统上安装rp-pppoe(
            The Roaring Penguin PPPoE),它的依赖关系如下:
RP-PPPoE Dependencies
         
         
            Required
         
         
            
PPP-2.4.4
and
Net-tools-1.60
(you may omit
            Net-tools by using the following
            patch to utilize IPRoute2
            instead:
            http://www.linuxfromscratch.org/patches/blfs/6.2.0/rp-pppoe-3.8-iproute2-1.patch)
         
         
            User Notes:
            http://wiki.linuxfromscratch.org/blfs/wiki/RP-PPPoE
PPP Dependencies
         
         
            Optional
         
         
            
libpcap-0.9.4
(needed to
            do PPP filtering) and Linux
            ATM (to build the pppoatm.so plugin)
         
         
            User Notes:
http://wiki.linuxfromscratch.org/blfs/wiki/PPP
         
         
查找了libpcap的相关信息,如下:
[color="#000000"] libpcap(Packet Capture Library),即数据包捕获函数库,是Unix/Linux平台下的网络数据包捕获函数库。它是一个独立于系统的用户层包捕获的API接口,为底层网络监测提供了一个可移植的框架。
[color="#000000"]一、        libpcap工作原理
[color="#000000"]libpcap主要由两部份组成:网络分接头(Network Tap)和数据过滤器(Packet Filter)。网络分接头从网络设备驱动程序中收集数据拷贝,过滤器决定是否接收该数据包。Libpcap利用BSD Packet Filter(BPF)算法对网卡接收到的链路层数据包进行过滤。BPF算法的基本思想是在有BPF监听的网络中,网卡驱动将接收到的数据包复制一份交给BPF过滤器,过滤器根据用户定义的规则决定是否接收此数据包以及需要拷贝该数据包的那些内容,然后将过滤后的数据给与过滤器相关联的上层应用程序。
[color="#000000"]libpcap的包捕获机制就是在数据链路层加一个旁路处理。当一个数据包到达网络接口时,libpcap首先利用已经创建的Socket从链路层驱动程序中获得该数据包的拷贝,再通过Tap函数将数据包发给BPF过滤器。BPF过滤器根据用户已经定义好的过滤规则对数据包进行逐一匹配,匹配成功则放入内核缓冲区,并传递给用户缓冲区,匹配失败则直接丢弃。如果没有设置过滤规则,所有数据包都将放入内核缓冲区,并传递给用户层缓冲区。
[color="#000000"]二、        libpcap的抓包框架
[color="#000000"]pcap_lookupdev()函数用于查找网络设备,返回可被pcap_open_live()函数调用的网络设备名指针。
[color="#000000"]pcap_open_live()函数用于打开网络设备,并且返回用于捕获网络数据包的数据包捕获描述字。对于此网络设备的操作都要基于此网络设备描述字。
[color="#000000"]pcap_lookupnet()函数获得指定网络设备的网络号和掩码。
[color="#000000"]pcap_compile()函数用于将用户制定的过滤策略编译到过滤程序中。
[color="#000000"]pcap_setfilter()函数用于设置过滤器。
[color="#000000"]pcap_loop()函数pcap_dispatch()函数用于捕获数据包,捕获后还可以进行处理,此外pcap_next()和pcap_next_ex()两个函数也可以用来捕获数据包。
[color="#000000"]pcap_close()函数用于关闭网络设备,释放资源。
[color="#000000"]三、        libpcap-mmap
[color="#000000"]libpcap-mmap是libpcap的一个改进版本,它们捕获数据包的结构相同。不同的地方主要有以下两点:
[color="#000000"]1.    libpcap使用固定大小的存储缓冲器和保持缓冲器来完成数据包从内核到用户层的传递,而libpcap-mmap设计了一个大小可以配置的循环缓冲器,允许用户程序和内核程序同时对该循环缓冲器的不同数据区域进行直接的读取。
[color="#000000"]2.    在libpcap中,当网卡接收到一个数据包之后,网卡驱动程序通过DMA方式调用系统函数netif_rx()将数据包从网卡拷贝到核心态内存,应用程序想访问位于核心态内存的数据时就必须将数据包从核心态内存中拷贝到用户态内存中,这样就占用了很多系统资源,降低数据包捕获的性能以及对数据包的处理能力。而libpcap-mmap采用MMAP技术,建立核心态内存和用户态内存的映射,将系统分配给网卡设备文件的核心态内存映射到一块用户态内存,这样应用程序可以通过调用系统函数recvfrom()函数把数据包从网卡上直接传送到用户态内存中,减少了一次数据拷贝,降低了系统资源的消耗,提高数据包捕获效率。
参考文献:
Beyond Linux®
              From Scratch
            
         
         
            
              Version 6.2.0
            
         
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/5237/showart_513462.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP