在捕获IP层分组时常使用RAW SOCKET编程实现,Socket定义了一组标准例行函数,应用程序通过调用这些函数可以和不同网络应用程序进行通讯而不必考虑不同的网络协议。原始套接字(SOCKET_RAW)允许对较底层的协议,如IP,ICMP直接访问,由此来实现网络监听。
数据链路层是网络中基本数据分组――数据帧的传输层,对以太网数据帧的捕获,为入侵分析提供了更为详实的数据源。在某些情况下可以直观的检测到IP欺骗,MAC flooding等常见网络攻击。因此,捕获数据帧的监听比捕获IP数据包的监听,通常要有效得多。
操作系统所提供的分组捕获机制主要有三种:
- BPF(Berkeley Packet Filiter)
- DLPI(Data Link Provide Interface)
- SOCK_PACKET(Linux)
从性能上看BPF比DLPI更好,而SCOCK_PACKET最弱。SCO OpenServer 虽然本身没有内置BPF模块,但有作为可压入内核的STREAMS模块BPF。
WIN32平台不提供直接的网络底层访问接口,必须通过虚拟设备驱动程序(VxD,Virtual Device Driver)实现网络监听的功能,VxD驱动程序提供外部程序和网卡NIC之间的接口。
Libpcap(其Windows版本为Winpcap)是一种与系统无关,采用分组捕获机制的分组捕获函数库,用于访问数据链路层。Libcap在不同的平台上采用统一的编程接口,使用libcap编写的程序可自由的跨平台使用。
Windows并未提供内置的分组捕获机制,这一功能由应用系统提供,Winpcap使用BPF虚拟机(NPF)补充了这一机制。NPF在Windows 95/98/ME中以VXD文件的方式实现,在windows2000中以SYS文件的方式实现。