电脑学习 |
||
基于BPF和LIBPCAP库的包捕获应用系统的设计 钱丽萍 李亚萍 高光来 摘 要 包捕获和包分析是网络管理中使用的基本技术。它可用于网络测试、重构端到端的会话及监测网络运行状况等。本文分析了多种包捕获机制,着重探讨了BPF技术,介绍了一个用于用户层包捕获的系统独立的API接口Libpcap库,给出了利用BPF和Libpcap设计基于包捕获的应用程序的应用框架。 The Implementation of Packet Capture Application Systems based on BPF and libpcap Qian Liping Li Yaping Gao Guanglai Abstract: Packet capture and
packet analysis is one of the basic technologies used in network management. It is
utilized in network testing, reconstructing end-to-end sessions and monitoring the status
of network. This paper analyzed some packet capture mechanisms with emphasis on BPF
technique. It then introduced libpcap library-a system-independent interface for user-level packet
capture and described the general model of packet capture applications based on BPF and
libpcap. 表1 常用的包捕获机制 |
| 包捕获机制 | 系 统 平 台 | 备 注 |
| BPF | BSD系列 | Berkeley Packet Filter |
| DLPI | Solaris, HP-UX SCO Openserver | Data Link Provider Interface |
| NIT | SunOS 3 | Network Interface Tap |
| SNOOP | IRIX | |
| SNIT | SunOS 4 | Streams Network Interface Tap |
| SOCK-PACKET | Linux | |
| LSF | >=Linux 2.1.75 | Linux Socket Filter |
| Drain | IRIX | 用于窃听系统丢弃的包 |
| 2 BPF技术 BPF是BSD Packet Filter的简称,目前UNIX平台上多数嗅包工具(如tcpdump、sniffit、NFR等)都是基于BPF开发的。通常网卡驱动程序接收到一个数据包后,将其提交给系统的协议栈。如果有进程用BPF进行网络侦听,网卡驱动程序会先调用BPF,复制一份数据给BPF的过滤器,过滤器则根据用户定义的规则决定是否接收此数据包。再判断这个数据包是否是发给本机的,如果不是发给本机的,则网卡驱动程序从中断返回,继续接收数据;如果这个数据包是发给本机的,驱动程序会再把它提交给系统的协议栈,然后返回。BPF的工作机制如图1所示。
图1 BPF结构原理 UNIX系统严格区分核心地址空间和用户地址空间,用户的应用进程不能访问核心地址空间。由于网络监测器作为用户层进程运行,而网卡驱动程序工作在核心地址空间中,所以要提供用户层的接口就要把数据从核心地址空间复制到用户地址空间,这样做系统负担很大,当网络太忙或机器速度太慢时会发生丢包。为改进性能出现了包缓冲和包过滤机制。
图2 基于libpcap的包捕获系统框架 在初始化完毕后,应用程序利用libpcap的pcap-dispatch()或pcap-loop()捕获数据链路层的数据包。这两个函数作用类似,仅以pcap-dispatch()为例介绍其工作原理。其函数原形为:pcap-dispatch(pcap-t
*p, int cnt, pcap-handler callback, u-char *user);此函数返回读取的包数,当读到文件的EOF时返回0;返回-1表出错,此时可用pcap-perror或pcap-geterr函数来显示出错文本。 作者简介:钱丽萍,高光来 内蒙古大学计算机系讲师(呼和浩特
010021) 参考文献 1 McCanne, V.Jacobson. The BSD Packet
Filter: A New Architecture for User-level Packet Capture. Proc. 1993 Winter USENIX
Conference, San Diego. CA. Available at:ftp://ftp.ee.lbl.gov/papers/bpf-usenix93.ps.Z 收稿日期:1999-07-08 |