关键词:数据包;捕获;以太网
1 数据包捕获概述
计算机网络在传输数据时,为了保证所有共享网络资源的计算机都能公平、迅速地使用网络,通常把数据分割成若干小块作为传输单位进行发送,这样的传输单位我们通常称之为包,也叫“数据包”。目前有两种方法可以从网络中捕获数据包,一种是采用专用硬件,另一种是利用普通计算机与网络连接的通用硬件网络适配器,即网卡,由软件来完成数据包的捕获。虽然由软件来捕获数据包的方法在性能上比不上专用硬件,但其实现成本相对更低,且易于修改和更新。基于以上原因,采用软件的捕获方法得到了广泛的使用和认同。
从网络捕获数据包是所有网络安全产品实现中非常重要的一环,它是安全产品其它功能的基础,而实现网络捕包的一个最重要的条件就是要能够接收网络上所有的数据包。要满足此条件就必须了解数据包在网络上的传输方式。计算机网络从传输方式的角度分为两类:采用点到点连接的网络和采用广播方式的网络。广域网中一般采用点到点连接方式,而几乎所有的局域网都以广播方式作为通信的基础,网上的站点共享信道,一个站点发出的数据包,其他站点均能收到,也就是说,任一台计算机都可以接收到网络中同一个共享域的所有的数据通讯。
2 以太网捕获数据包的实现原理
在以太网上通讯的每张网卡上都拥有一个全球唯一的物理地址,也叫mac地址。该地址是一个48比特的二进制数。在以太网卡中内建有一个数据包过滤器。该数据包过滤器的作用是保留以本身网卡的mac地址为通讯目的的数据包和广播数据包,丢弃所有其它无关的数据包,以免cpu对无关的数据报作无谓的处理。这是以太网卡在一般情况下的工作方式。因此在正常情况下,一个合法的网络接口应该只响应这样的两种数据包(帧):
(1)帧的目标地址具有和本地网络接口相匹配的硬件地址。
(2)帧的目标地址是“广播地址”(代表所有的接口地址),格式为“ffffffffffff”。
在接收到上面两种情况的数据帧时,网卡通过cpu产生中断,操作系统进行中断处理后将帧中包含的数据传送给上层系统进行进一步处理。在其他情况下数据帧将被丢弃而不作处理。
要想捕获到流经网卡的不属于本主机的数据,必须绕过系统正常工作的处理机制,直接访问网络底层。我们可以把网卡的状态设为“混杂”(promiscuous)模式,当网卡工作在这种“混杂”模式时,该网卡就具备了“广播地址”,它对所接收到的每一个帧都产生一个硬件中断以提醒操作系统处理流经该网卡上的每一个报文包。操作系统通过直接访问链路层,截获相关数据,由应用程序而非上层协议(如ip层、tcp层)对数据过滤处理,这样就可以捕获到流经网卡的所有数据。
3 共享和交换以太网下的捕包
首先从tcp/ip模型的角度来看数据包在局域网内发送的过程:当数据由应用层自上而下地传递时,在网络层形成ip数据报,再向下到达数据链路层,由数据链路层将ip数据报分割为数据帧,增加以太网包头,再向下一层发送。需要说明的是,以太网的包头中包含着本机和目标设备的mac地址,也就是说,数据链路层的数据帧发送时,是依靠48bits的以太网地址而非ip地址来确认的,以太网的网卡设备驱动程序不会关心ip数据报中的目的ip地址,它所需要的仅仅是mac地址。
3.1 在共享以太网中捕包
共享式以太网的典型代表是使用10base5的总线型网络和以集线器(hub)为核心的星型网络。集线器工作在物理层。在使用集线器的以太网中,集线器将很多以太网设备集中到一台中心设备上,这些设备都连接到集线器中的同一物理总线结构中。从本质上讲,以集线器为核心的以太网同原先的总线型以太网无根本区别,集线器并不处理或检查其上的通信量,仅通过将一个端口接收的信号重复分发给其他端口来扩展物理介质。所有连接到集线器的设备共享同一介质,其结果是它们也共享同一冲突域、广播和带宽。因此集线器和它所连接的设备组成了一个单一的冲突域。如果一个节点发出一个广播信息,集线器会将这个广播传播给所有同它相连的所有节点,因此它也是一个单一的广播域。
当局域网内的主机通过hub连接时,hub的作用就是局域网上面的一个共享的广播媒体,所有通过局域网发送的数据首先被送到hub,然后hub将接收到的所有数据向它的每个端口转发。因此我们只要将某台主机的网卡设置为混杂模式,就可以接收到局域网内所有主机间的数据流量。
3.2 在交换以太网中捕包
在交换式以太网中,交换机根据收到数据帧中的源mac地址建立该地址同交换机端口的映射,并将其写入mac地址表中。当有数据包发送到交换机时,交换机会将数据包中的目的mac地址与自己维护的mac地址端口映射表中的数据进行对照,然后将数据包发送到对应的端口上。对交换机而言,仅有两种情况会发送广播,一是数据包的目的mac地址不在交换机维护的数据库中,此时数据包向所有端口转发,这一过程称之为泛洪(flood);二是数据包本身就是广播包。
不同于工作在物理层的集线器,交换机是工作在数据链路层的。由于端口间的传递的数据帧彼此屏蔽,因此节点就不担心自己发送的帧在通过交换机时是否会与其他节点发送的帧产生冲突。交换机将冲突隔绝在每一个端口(每个端口都是一个冲突域),避免了冲突的扩散。因此,基于交换机以太网建立的局域网并不是真正的广播媒体,交换机限制了被动监听工具所能截获的数据。因此,要捕获数据包就必须将捕包系统运行在网关或路由器上,如果想在网段的任意一台主机上实现捕包功能,就需要采取其它的方法:
(1) 端口镜像。当路由器或交换机具备端口镜像功能时,我们可以通过镜像端口完成抓包工作。路由器或交换机的端口镜像功能,是指可以将一个端口的流量自动复制到另一端口,供网络管理员在判断网络问题时对端口流量和内容进行实时分析。通过交换机的镜像端口,这些流量就可以被一个特殊的设备监控,对发现和排除故障有很大的帮助。
(2) mac洪泛法。通过在局域网上发送大量随机的mac地址,以造成交换机的内存耗尽,当内存耗尽时,一些交换机便开始向所有连在它上面的链路发送数据。不过这种方法对网络会造成很大的堵塞,造成网络性能下降。
(3) arp欺骗。arp协议的作用是将ip地址映射到mac地址,攻击者通过向目标主机发送伪造的arp应答包,骗取目标系统更新自身的arp缓存表,将目标系统的网关的mac地址修改为监听者的主机mac地址,使数据包都经由监听者的主机,同时监听者向网关发送伪造的arp应答包,欺骗网关更新自己的arp缓存表,是网关发给目标主机的数据也都流经监听者的主机,这样就实现了交换环境下的网络监听。值得一提的是,黑客经常会以此方法进行攻击和窃取数据。
4 总结
不同的操作系统实现的底层包捕获机制可能是不一样的,但从形式上看大同小异。数据包常规的传输路径依次为网卡、设备驱动层、数据链路层、网络层、传输层、最后到达应用程序。而包捕获机制是在数据链路层增加一个旁路处理,对发送和接收到的数据包做过滤、缓冲等相关处理,最后直接传递到应用程序。值得注意的是,包捕获机制并不影响操作系统对数据包的网络栈处理。对用户程序而言,包捕获机制提供了一个统一的接口,使用户程序只需要简单的调用若干函数就能获得所期望的数据包。这样一来,针对特定操作系统的捕获机制对用户透明,使用户程序有比较好的可移植性。包过滤机制是对所捕获到的数据包根据用户的要求进行筛选,最终只把满足过滤条件的数据包传递给用户程序。
参考文献
[1]王电.包捕获型网络计费系统[j].杭州电子科技大学学报,2005,(06):6064.
[2]赵树升,范刚龙,张焕剑.一种windows网络嗅探器的检测原理与实现[j].郑州大学学报(理学版),2005,(03).
[3]申志,赵跃龙,申强.一种分布式网络管理监控系统的研究与开发[j].计算技术与自动化,2006,(01).
中国论文网(www.lunwen.net.cn)免费学术期刊论文发表,目录,论文查重入口,本科毕业论文怎么写,职称论文范文,论文摘要,论文文献资料,毕业论文格式,论文检测降重服务。