为了更换掌握用户的上网行为,局域网监控软件提供对网络数据包进行抓包分析技术。
1. Unix平台中的网络数据包采集
Unix系统提供了标准的AP1支持 :Packetsocket和BPF(BSDPacketFilter,简称 BPF)。
(1)BSD (BerkeleySoftwareDistribution)抓包法
BSD包过滤器位于BSDUnix的内核中,它独立于TCP/IP协议栈 ,为应用程序访问数据链路层提供了一个原始接口,被广泛地运用在网络监控及其它软件中。
BPF使用了3种技术以降低系统开销:
① BPF的过滤器存在于内核中,以减小开销
② 由于从内核复制所有数据包到达应用层的开销太大,可以考虑只复制部分数据 (capturelen~h),一般的应用程序主要使用的是数据包头,如Tcpdump就定义了只获取前 68个字节。
③ BPF在内核中设置了缓存,当a缓存满或b缓存readtimeout过期 ,则发送数据到应用程序。这样做是为了减少从核心态到用户态的系统开销。在实际的操作中,使用double buffering技术,一个用于发送数据到应用程序;另一个用于缓存BPF获得的数据。
(2)Libpcap抓包工具库
Libpcap库是基于 BPF系统 的。BPF是BSD系统在的TCPBP软件在实现的时候所提供的一个接 口,通过这个接口,外部程序可以得到到达本机的数据链路层网络数据,同时也可以设置过滤器,嵌入到网络软件中,获得过滤后的数据包。
Libpcap是一个与实现无关的访问操作系统所提供的分组捕获机制的分组捕获函数库;
Libpcap提供了系统独立的用户级别 网络数据包捕获接口,其充分考虑到应用程序的可移植性;
Libpcap可以在绝大多数类Unix平台下工作;
Unix系统中,可通过 Libpcap库调用用户状态上的缓冲区,直接与内核交互,实现网络数据包的截取。
2. Windows平台上通过驱动程序来获取数据包
Windows2000下的网络驱动程序实现网络体系结构中由下而上的4个协议层:
windows系统的网络体系结构
OSI定义的这层又被IEEE分为两层:LLC和MAC。LLC层提供将数据帧从一个节点无错误传输到另一个节点。LLC层建立并终止逻辑链路,控制帧传输,帧排序,确认帧和再次传输非确认帧。LLC层利用帧确认和再次传输来通过链向上一层提供最终的无错误的传输。MAC层管理存取网络媒介 ,检查帧错误,并管理接收帧地址确认。在Windows2000网络体系结构中,LLC子层是由传输驱动程序实现的,而MAC子层是由网络接口卡 (NIC)来实现。