协议分析监视软件的设计与实现__墨水学术,论文发表,发表论文,职

所属栏目:推荐论文发布时间:2011-02-25浏览量:119

副标题#e#摘要:随着计算机和网络技术的发展,网络化、信息化的普及,网络安全已经成为各单位必须要解决的问题。如何探明网络状况、分析网络中存在的问题、寻找解决问题方案成为很多单位网络管理工作中的核心任务。本文在分析研究当前数据包捕获与分析的主要技术基础之上,设计并实现了一个网络分析软件。该软件可以捕获局域网呢正在传输的数据单元,并提供实时分析,为网络管理人员提供了有效的技术支撑。
  
  
  
  1.    引言
  随着计算机网络的飞速发展,无论是个人娱乐还是单位办公对网络的依赖越来越大,单位局域网中传输着单位内部包括人、财、物等重要信息,因此,网络安全问题直接关系到公司的核心利益。许多单位在建立了自己的局域网后,其日常管理和维护变得至关重要。排查网络故障,提高网络性能,增强网络安全性,需要企业网络随时能够进行网络状况分析。网络分析可以让单位网络管理人员实时地掌握网络状况,并根据现状和发展趋势,确定应对方案,也只有这样才能使网络管理人员预先发现问题、防范网络安全问题[1]。
  网络协议分析是指通过程序分析网络数据包的协议头,从而了解信息和相关的数据包在产生和传输过程中的行为。包含该程序的软件和设备就是协议分析器。由于设备价格贵、使用不够方便和隐秘,因此,很多单位采用协议分析器软件作为网络安全管理的手段。
  2.    相关理论
  一个分组嗅探器俘获(嗅探)计算机发送和接收的报文。一般情况下,分组嗅探器将存储和显示出被俘获报文的各协议头部字段的内容。图1为一个分组嗅探器的结构。图1右边是计算机上正常运行的协议(在这里是因特网协议)和应用程序(如:web浏览器和ftp客户端)。分组嗅探器(虚线框中的部分)是附加计算机普通软件上的,主要有两部分组成。分组俘获库(packetcapturelibrary)接收计算机发送和接收的每一个链路层帧的拷贝。高层协议(如:HTTP、FTP、TCP、UDP、DNS、IP等)交换的报文都被封装在链路层帧中,并沿着物理媒体(如以太网的电缆)传输。图1假设所使用的物理媒体是以太网,上层协议的报文最终封装在以太网帧中[2]。
  图1.分组嗅探器结构
  分组嗅探器的第二个组成部分是分析器。分析器用来显示协议报文所有字段的内容。为此,分析器必须能够理解协议所交换的所有报文的结构。例如:我们要显示图1中HTTP协议所交换的报文的各个字段。分组分析器理解以太网帧格式,能够识别包含在帧中的IP数据报。分组分析器也要理解IP数据报的格式,并能从IP数据报中提取出TCP报文段。然后,它需要理解TCP报文段,并能够从中提取出HTTP消息。最后,它需要理解HTTP消息。
  在局域网中,由于以太网的共享式特性决定了嗅探能够成功。因为以太网是基于广播方式传送数据的,所有的物理信号都会被传送到每一个主机节点,此外网卡可以被设置成混杂接收模式(Promiscuous),这种模式下,无论监听到的数据帧目的地址如何,网卡都能予以接收.而TCP/IP协议栈中的应用协议大多数明文在网络上传输,这些明文数据中,往往包含一些敏感信息(如密码,账号等),因此使用Sniffer可以悄无声息地监听到所有局域网内的数据通信,得到这些敏感信息。同时Sniffer的隐蔽性好,它只是“被动”接收数据,而不向外发送数据,所以在传输数据的过程中,根本无法觉察到有人监听。当然,Sniffer的局限性是只能在局域网的冲突域中进行,或者是在点到点连接的中间节点上进行监听。
  3.系统设计与实现
  3.1系统总体设计
  当前绝大多数单位网络均为以太网,以太网采用的是持续CSMA/CD工作方式,逻辑上呈总线结构。其网卡工作模式分为四种:广播模式、多播模式、直接模式、混杂模式。为实现监督网络中所传输的#p#副标题#e#数据单元,需要工作在混杂工作模式下。
  网络协议分析软件,作为一种网络通讯程序,可以通过对网卡的编程来实现网络通讯的,对网卡的编程是使用通常的套接字(socket)方式来进行。具体到编程实现上,这种对网卡混杂模式的设置是通过原始套接字(rawsocket)来实现的,这也有别于通常经常使用的数据流套接字和数据报套接字。在创建了原始套接字后,需要通过setsockopt()函数来设置IP头操作选项,然后再通过bind()函数将原始套接字绑定到本地网卡。为了让原始套接字能接受所有的数据,还需要通过ioctlsocket()来进行设置,而且还可以指定是否亲自处理IP头。至此,实际就可以开始对网络数据包进行捕获了,对数据包的获取仍象流式套接字或数据报套接字那样通过recv()函数来完成[3]。
  
  
  
  
  
  
  
  
  
  
  
  
  
  图2.系统流程图
  Winpcap是由伯克利分组捕获库派生而来的分组捕获库,它是在Windows操作平台上来实现对底层包的截取过滤。Winpcap为用户级的数据包提供了Windows下的一个平台。Winpcap包括三个部分:第一个模块NPF(NetgroupPacketFilter),是一个虚拟设备驱动程序文件。它的功能是过滤数据包,并把这些数据包原封不动地传给用户态模块,这个过程中包括了一些操作系统特有的代码。第二个模块packet.dll为win32平台提供了一个公共的接口。不同版本的Windows系统都有自己的内核模块和用户层模块。Packet.dll用于解决这些不同。调用Packet.dll的程序可以运行在不同版本的Windows平台上,而无需重新编译。第三个模块Wpcap.dll是不依赖于操作系统的。它提供了更加高层、抽象的函数。本文采用Winpcap作为网络监视软件开发的API函数包。
  3.2数据包捕获模块设计
  1)枚举本机网卡的信息
  PCAP提供了pcap_findalldevs()这个函数来实现获得全面的网卡信息功能,尤其是字段名字和含有名字的描述以及有关驱动器的易读信息。
  2)打开相应网卡并设置为混杂模式:
  主要是要用到pcap_open_live函数,不过这个函数winpcap的开发小组已经建议用pcap_open函数来代替,我的代码里面用的就是pcap_open_live,不过pcap_open_live使用起来也是没有任何问题的
  3)截获数据包并保存为文件:
  当然,不把数据包保存为文件也可以,不过如果不保存的话,只能在截获到数据包的那一瞬间进行分析,转眼就没了,所以为了便于日后分析,所以我把数据包保存下来。但是注意网络流量,在流量非常大的时候注意硬盘空间。
  4)捕获数据包函数
  捕获数据包函数放到一个线程中,这样可以不断去捕获网络中的数据包,CPU占用率会小于1%。线程(Thread)是与进程(Process)相对应的概念。Windows9x和WindowsNT是多任务操作系统,它们的实现是基于线程方式的,支持多线程应用。在Windows的一个进程中,包含一个或多个线程。而一个线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享所有的进程资源。包括打开的文件、信号标识及动态分配的内存等。一个进程内的所有线程使用同一个32位地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行以及什么时候执行线程。线程具有优先级别,优先权较低的线程必须等到优先级较高的线程执行完任务后再执行。采用多线程结构的优点是:其一,可以同时处理多个不同的事务,且各个事务的处理模块相互独立;其二,良好的扩展性,可以方便的在有新的需求时添加对应的处理模块[4]。
  创建线程:m_ThreadHandle=CreateThread(NULL,0,CaptureThread,(void*)this,0,NULL)
  结束线程:
  TerminateThread(m_ThreadHandle,EXIT_FAILURE);
  CloseHandle(m_ThreadHandle);
  以上完成了对数据包的捕获#p#副标题#e#,下面介绍对捕获的数据包进行分析模块的设计与实现。
  3.3数据包分析模块设计与实现
  捕获到的数据包并不仅仅是单纯的数据信息,而是包含有IP头、TCP头等信息
  图2.协议数据单元封装示意图
  头的最原始的数据信息,这些信息保留了它在网络传输时的原貌。由于这些数据经过了网络层和传输层的打包,因此需要根据其附加的帧头对数据包进行分析。
  结束语
  本文根据单位网络管理的实际需要,针对以太网网络特点,基于Winpcap开发了一个实时的网络协议分析与网络监视软件。该软件可以实现网络管理与监护的主要工作,经过一段试运行,软件运行稳定,对中小型单位有一定实用价值。今后,我们将在此基础之上进一步完善功能、提高效率。
  参考文献
  [1].V.Paxson.Bro:ASystemforDetectingNetworkIntrudersinReal-Time[C].InUsenixSecuritySymposium,1998.
  [2].Ethereal.EtherealDeveloper’sGuide[EB/OL].www.ethereal.com
  [3].黄超.Windows网络编程[M].北京:人民邮电出版社,2003.
  [4].W.Cui,J.Kannan,andH.Wang.Discoverer:AutomaticProtocolReverseEngineeringfromNetworkTraces[C].In16thUsenixSecuritySymposium,2007.
期刊 论文 出书
国内外/中英文/全学科 学术服务
相关阅读