图4 网络数据截获原理图 套接口有三种类型:流式套接口、数据报套接口和原始套接口。前两种套接字只能访问到传输层。也就是说只能接收自己硬件地址相匹配的或是以广播形式发出的数据帧,对于其他形式的数据帧比如已到达网络接口但却不是发给此地址的数据帧,网络接口在验证投递地址并非自身地址之后将引起响应。而原始套接口允许对网络层协议如(IP或ICMP)进行直接访问,对于流经网卡的所有数据都可以接收到。原始套接字截获到的数据包并不仅仅是单纯的数据信息,而是包含有IP头、TCP头等信息头的最原始的数据信息,通过对这些在低层传输的原始信息的分析可以得到有关网络的一些信息。 3数据包截获机制的研究 3.1 概述 纵观国内外在数据包截获技术中所使用的包截获机制的方法,大致可归纳为两类:一类是由操作系统内核提供的截获机制;另一类是由应用软件或系统开发包通过安装包截获驱动程序提供的截获机制,该机制主要用于Win32平台下的开发。操作系统提供的截获机制主要有四种:BPF(Berkeley packet Filter),DLPI (Data Link Provider Interface),NIT(Network Interface Tap), Sock Packet类型套接口。BPF由基于BSD的Unix系统内核所实现。DLPI是Solaris(和其它System V Unix)系统的内嵌子系统。从性能上看, Sock Packet最弱。Windows操作系统没有提供内置的包截获机制。它只提供了数量很少并且功能有限的API调用。WinPcap(Windows Packet Capture)是Win32上的第一个用来截获数据包的开放系统软件包,它是一种新提出的强有力并且可扩展的框架结构。WinPcap包含了一系列以前系统所没有的创新特性。本文将对目前比较流行的WinPcap软件包提供的截获机制进行简单介绍。 3.2 WinPcap数据包截获机制 WinPcap的体系结构如图5所示:
图5 Winpcap的体系结构 由WinPcap体系结构图可以看出它采用的是分层化的驱动程序模型,并包含有三个组件: 1.内核级的数据包截获驱动程序 2.低级的动态连接库(Packet.dll) 3.高级系统无关库(Wpcap.dll) WinPcap(Windows Packet Capture)是由微软资助的一个项目,其核心仍是基于NDIS的,但它对NDIS进行封装,它是Windows平台下一个免费、公共的网络访问系统,它为win32应用程序提供访问网络底层的能力.它提供了以下的各项功能: 1.截获原始数据报,包括在共享网络上各主机发送/接收以及相互之间交换的数据报; 2.在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉; 3.在网络上发送原始的数据报; 4.收集网络通信过程中的统计信息。 在Windows NT下WinPcap包截获驱动和网卡设备驱动的交互是通过NDIS(Network Device Interface Specification)来实现的。而且包截获驱动既与网络驱动通信又与用户应用程序通信,所以它在NDIS结构中如同一个协议驱动,对WindowsNT操作系统中的NDIS结构中的高端驱动进行编程,这样编制的程序与上层应用程序更容易连接,应用程序对驱动设置的工作也更方便。如图6所示:
图6 数据包截获驱动在NDIS中所处位置 3.3 套接字数据包截获机制 上世纪80年代初,加利福尼亚大学Berkeley分校在UNIX操作系统下实现了TCP/IP协议,它们为TCP/IP网络通信开发了一个应用程序接口(API),这个API称为socket(套接字)接口。Socket给程序员提供了一个高层接口,它的出现使得程序员在编写网络应用程序时只需要调用函数,对网络的底层细节并不需要精通,因此十分方便。 socket实质上是提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。正如打电话之前,双方必须拥有各自的电话机一样。 &nb
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 3/9/9