libpcap体现的不是捕捉技术上的难点,而是对细节的控制上,对跨平台代码的编写上,对过滤机制的优化上。
因为做毕业设计缘故初次拿到了这个包,作为一个入门者来说突然变得不知所措。而且国内中文资料不多,又要面对着大堆的英文。一开始也是盲目的本着英文而去,通篇看了一个早上也没什么重点的结果。晚上看了个影片,讲到大象的命门是在脚筋,也就是支撑的地方。 很显然,我得先对接口的流动和他的数据结构有个了解。而且在这套库里面看到了好多人的代码和自己的功能说明,感觉着一种合作开放的精神。
剪枝删节,将其中linux部分提了出来,涉及到的文件大概有:
inet.c fad-getad.c pcap-linux.c pcap-int.h pcap.c
整个的大概结构是,查找设备,确定设备,过滤条件的嵌入,套接字的创建,网卡的设置,包的捕获。
查找设备:用到的函数有pcap_lookupdev()-pcap_findalldevs()-getifaddrs()-add_addr_to_iflist()//inet.c fad_getad.c
该函数是将所找到的设备信息用连表连接起来,设备号小的在前,因此通常是eth0.
数据结构为struct pcap_if{},//pcap.h
打开网络设备:2。0以后的linux内核版本用新的协议簇PF_PACKET来实现。早期是(SOCK_PACKET)他的形式可以是SOCK_RAW和SOCK_DGRAM。RAW是原始数据,DGRAM是对数据包进行加工,把数据包的链路层头部去掉,使用sockaddr_ll来保存。在两种情况下RAW不可用:某些类型设备数据链路层头部不可用,当捕捉为any时,为了是包过滤机制在所有类型数据包上正常工作,要求所有数据使用相同数据链路头部。
pcap-linux.c
pcap_open_live();用到的数据结构是pcap_t,//pcap-int.h,这是一个比较重要的参数,主要包括对socket的描述,和一些底层上的设置。比如缓冲区大小,设备类型,边界对齐等,对应的函数指针,可更改的链路数,BPF过滤代码是否能使用等。
pcap_stat stat;//pcap.h,捕捉状态结构,包括是否过滤,接受包的数目,丢弃的数目等。
在函数内部有new和old两种版本,分别对2.0前后的版本创建socket.而在其内部的选择上,又涉及到对是否支持链路层头部结构的判断,最后将网卡设为混杂模式,创建socket
在这一层中,libpcap提供的用户程序接口是pcap_next()//pcap.c,通过跟踪可发现,它最后是调用pcap_read_packet//pcap-linux.c接收。接收完后做的工作如下:偏移量设置,为了给伪数据链路层留出空间,接着要修正长度,判断是否有用内核级的包过滤,最后填充捕获时间/长度/时间,对包数据累加。
完成以上两个步骤,发现最关键两个步骤就是找设备的函数,和socket的创建。但是通过查看源代码可知,作者在跨平台,细节处理,包通用的完善性上做了很多很多的工作,这无一不给我们提供了一个很好的学习尺度。
接下来是对过滤机制的描述:
这个我想是最有难点的地方了,一些算法不做描述,查看pcap-bpf.h,gencode.c,optimize.c,grammar,c,scanner.c
用到的特性有这么几个:因为在捕捉时,是先经过捕捉,然后把控制权再给数据链路,这样就直接在内核缓冲内进行过滤。而在算法是上使用BPF包过滤机制,算法上很复杂,使用伪机器码的方式,类似于汇编语言。如果是以后做到类似多重判断跳转之类的可以参考里面的无环控制流图CFG的实现.
个人认为该库很大一部分研究价值除了跨平台编写,还有就是对linux底层过滤器的调用使用。
分享到:
相关推荐
### Ubuntu下libpcap的安装与测试 #### 一、libpcap简介 libpcap 是一种用于捕获网络数据包的跨平台库,广泛应用于网络监控、安全审计及数据分析等领域。它支持多种操作系统,包括但不限于 Linux、FreeBSD、NetBSD...
Ubuntu 下安装 libpcap 库详解 在 Ubuntu 操作系统中,安装 libpcap 库是一件非常重要的事情,因為 libpcap 库是许多网络抓包工具的基础组件,如 tcpdump、Wireshark 等。然而,网上关于安装 libpcap 库的步骤却...
libpcap-1.4.0-4.20130826git2dbcaa1.el6.x86_64.rpm libpcap-devel-1.4.0-4.20130826git2dbcaa1.el6.x86_64.rpm
libpcap(Packet Capture Library)即数据包捕获函数库,是Unix/Linux平台下的网络数据包捕获函数库; libpcap可以实现以下功能: - 数据包捕获:捕获流经网卡的原始数据包 - 自定义数据包发送:任何构造格式的原始...
libpcap是计算机网络领域中一个重要的开源库,专门用于数据包捕获和分析。这个库的版本为0.9.4,虽然较早,但它在网络安全、网络监控以及网络协议分析等方面有着广泛的应用。libpcap提供了一个跨平台的API,允许...
**libpcap详解** libpcap是一个开源的网络数据包捕获库,广泛应用于各种操作系统,包括Unix/Linux、Windows等。它的主要功能是允许开发者在应用程序中捕获网络流量,以便进行网络分析、性能监控、安全检测等多种...
如果你正在无网络环境下工作,并且需要在Ubuntu 20.04上安装libpcap-dev,下面是一份详尽的指南。 首先,你需要理解libpcap-dev的作用。它包含了头文件和库文件,这些文件是开发者在编写需要利用libpcap功能的程序...
libpcap交叉编译 libpcap是一种流行的网络嗅探器库,它提供了一个跨平台的接口来捕获和分析网络流量。下面是关于libpcap交叉编译的知识点: 交叉编译环境配置 在开始编译libpcap之前,需要首先配置交叉编译环境。...
标题提到的“linux下的libpcap抓包分析程序”就是基于这个库实现的一个应用,它能捕获网络数据包并提供详细的分析信息。 首先,让我们深入理解libpcap库的核心功能。libpcap提供了一个跨平台的API,允许程序员以...
在Linux环境下,libpcap利用内核级别的数据包捕获机制,如PF_PACKET套接字,直接与网络驱动交互。这种低级别的接口使得libpcap能够在数据包到达用户空间之前就对其进行处理,从而实现高速的数据获取。此外,libpcap...
**libpcap 源码安装详解** libpcap 是一个强大的开源库,主要用于网络数据包捕获。在Linux系统中,它为开发者提供了一种高效、方便的方式来访问底层网络接口,实现对网络流量的实时监控和分析。libpcap是许多网络...
标题"libpcap的使用示例"指出我们将探讨的是一个关于libpcap库的实际应用。libpcap是一个广泛使用的开源库,主要用于在各种操作系统上捕获网络数据包,包括Linux。它提供了低级别的接口,使得开发者能够高效地分析...
标题和描述中提到的“Linux下采用Libpcap实现IDS的网络数据包监测”涉及到的主要知识点是使用Linux操作系统和Libpcap库来构建一个入侵检测系统(IDS)。Libpcap是一个开源库,广泛用于捕获和分析网络数据包,它是...
《libpcap-1.1.1.tar:Linux下的数据包捕获库详解》 libpcap是一个在各种操作系统上广泛使用的开源库,主要用于网络数据包的捕获和分析。这个"libpcap-1.1.1.tar"文件正是libpcap库的一个版本,版本号为1.1.1,采用...
- 在安装过程中,默认情况下libpcap的动态链接库会被安装到`/usr/local/lib`目录下。为了方便调用,建议创建一个符号链接指向`/usr/lib`目录,例如`ln -s /usr/local/lib/libpcap.so.1 /usr/lib/libpcap.so.1`。 ##...
《深入理解libpcap在Linux环境下的应用与实践》 libpcap,作为一款强大的网络数据包捕获库,广泛应用于网络安全分析、网络监控、性能测试等领域。在Linux操作系统中,libpcap提供了丰富的API接口,使得开发者可以...
3. **实现C/C++代码**:在jni目录下,创建一个C/C++源文件,如`packet_capture.c`,并实现头文件中声明的函数。这里你需要链接libpcap库,包含必要的头文件,并编写捕获数据包的代码。 4. **配置构建过程**:在`...
### libpcap 教程详解 #### 一、引言 **libpcap** 是一个广泛使用的开源库,用于在多种操作系统上捕获网络数据包。它为开发人员提供了访问低级别网络数据的能力,这对于网络分析、故障排除以及网络安全等方面至关...
- **实时数据包捕获**:Libpcap允许程序在不中断网络通信的情况下捕获数据包。 - **过滤机制**:可以按照用户的指定条件(例如特定IP地址、特定端口号等)过滤捕获的数据包。 - **跨平台兼容性**:Libpcap支持多种...
《libpcap.so.0.6.2:Linux网络数据包捕获库的深度解析》 在信息技术领域,网络数据包捕获是一项至关重要的技术,它允许开发者监控、分析网络流量,查找潜在的问题或者进行安全审计。libpcap是这样一个强大的开源库...