以太网(Ethernet)具有共享介质的特征,信息是以明文的形式在网络上传输, IEEE802.3 标准的以太网采用的是持续 CSMA 的方式,正是由于以太网采用这种广播信道争用的方式,使得各个站点可以获得其他站点发送的数据。运用这一原理使信息捕获系统能够拦截的我们所要的信息,这是捕获数据包的物理基础。以太网是一种总线型的网络,从逻辑上来看是由一条总线和多个连接在总线上的站点所组成各个站点采用上面提到的 CSMA/CD 协议进行信道的争用和共享。每个站点(这里特指计算机通过的接口卡)网卡来实现这种功能。网卡主要的工作是完成对于总线当前状态的探测,确定是否进行数据的传送,判断每个物理数据帧目的地是否为本站地址,如果不匹配,则说明不是发送到本站的而将它丢弃。如果是的话,接收该数据帧,进行物理数据帧的 CRC 校验,然后将数据帧提交给LLC 子层。
对于每个网络接口,都有其唯一的硬件地址。网卡有如下四种工作模式,分别为广播模式、多播模式、直接模式和混杂模式[3]。
(1) 广播模式(Broad Cast Model):它的物理地址(MAC)地址是 0Xffffff 的帧为广播帧,工作在广播模式的网卡接收广播帧。
(2)多播传送(MultiCast Model):多播传送地址作为目的物理地址的帧可以被组内的其它主机同时接收,而组外主机却接收不到。但是,如果将网卡设置为多播传送模式,它可以接收所有的多播传送帧,而不论它是不是组内成员。
(3)直接模式(Direct Model):工作在直接模式下的网卡只接收目地址是自己 Mac地址的帧。
(4)混杂模式(Promiscuous Model):工作在混杂模式下的网卡接收所有的流过网卡的帧,信包捕获程序就是在这种模式下运行的。
通常情况下,网络上的所有用户都可以收到通过的流量,但对于目的地址非广播或自身地址的数据包则不予响应,因为网卡的缺省工作模式为广播或直播模式,而当网卡调制混杂模式时,即可捕获网络上所有的数据包。用该方法进行数据捕获的方法被广泛用于入侵检测和流量分析中。
Wndows下捕获数据包的结构如图1:
NDIS(Network Driver Interface Specification) 是 Microsoft 和 3Com 公司联合制定的网络驱动规范,并提供了大量的操作函数。它为上层的协议驱动提供服务,屏蔽了下层各种网卡的差别。NDIS 向上支持多种网络协议,比如 TCP/IP、NWLink IPX/SPX、NETBEUI 等,向下支持不同厂家生产的多种网卡。NDIS 还支持多种工作模式,支持多处理器,提供一个完备的 NDIS 库(Library)。 但库中所提供的各个函数都是工作在核心模式下的,用户不宜直接操作,这就需要寻找另外的接口。NDIS驱动程序的结构如图2。
2.2 网络数据包捕获工具[4]
2.2.1 原始套接字
套接字是网络应用编程接口。应用程序可以使用它进行网络通信而不需要知道底层发生的细节。有时需要自己生成一些定制的数据包或者功能并希望绕开Socket 提供的功能,原始套接字( RawSocket) 满足了这样的要求。原始套接字能够生成自己的数据报文,包括报头和数据报本身的内容。通过原始套接字, 可以更加自如地控制Windows 下的多种协议, 而且能够对网络底层的传输机制进行控制。可以用原始套接字来发送和接收IP层以上的原始数据包, 如ICMP,TCP,UDP, 而且能够对网络底层的传输机制进行控制。RawSocket 的作用主要有三个方面:
(1) 接收发向本机的ICMP,IGMP协议包, 或者发送这些协议包;
(2) 接收发向本机的IP包;
(3) 发送自定义的IP包。
2.2.2 LibPcap
LibPcap是一个广泛应用的系统抓包库。LibPcap是一种与系统无关, 采用分组捕获机制的分组捕获函数库, 用于访问数据链路层, 它在不同的平台上采用统一的编程接口, 使用LibPcap编写的程序可自由的跨平台使用。同时LibPcap是一个独立于系统接口的用户级的抓包库,它为底层网络监听提供了可移植框架。它的应用包括网络统计集合、安全监听、网络调试等。 利用WinPcap技术实现数据包的捕获和分析(3):http://www.youerw.com/jisuanji/lunwen_6750.html