1、本科毕业设计(论文)局域网监听系统的设计学 院 计算机学院 专 业 网络工程 (网络系统开发与管理方向) 年级班别 学 号 学生姓名 指导教师 摘 要随着计算机网络技术的迅速发展,网络的安全问题也显得尤其重要。随之而诞生的一项主要的技术网络监听技术,它已成为网络安全领域内的一个热点话题,在实际应用中有很强的背景。网络监听是网络管理员对网络进行监控、负载分析等管理活动的常用方法,同时也是被黑客利用来窃取非法信息的手段。网络监听工具利用网络传输介质的共享特性来捕获数据包,从而帮助网络管理员了解当前网络的使用情况,对网络中的信息进行实时的监测、分析;但同时也会被黑客利用来截获本网段的一些重要信息,威
2、胁网络安全。数据包捕获技术是设计网络监听软件的底层技术,而WinPcap则是Windows系统中完成的一个优秀的包捕获架构。本文联系该软件包的结构与功能对包捕捉理论进行了具体的分析,并实现了其在网络安全监控系统中的运用。该系统的基本理论是通过调用WinPcap库捕获本地网络上的一切数据包,然后对数据包进行协议分析,然后可以实时地监控网络。关键词:网络监听,WinPcap,包捕获,协议分析AbstractWith the rapid development of computer network technology, the security problem of network become
3、s more important. Network sniffer is an important issue and technique in the domain of system security, so it has strong realism application background. Network sniffer is a way which is used in network monitor, load analysis; at the same time it is also a way which is used by hacker to get the info
4、rmation illegally. Network sniffer tools snap packets to get the networks current status by the shared characteristic of the network transmission medium. It help network administrator inspect and analyze the information of network; simultaneously hackers also get some important information, so threa
5、ten system security.Packet capturing technology is the basis technology of analyzing software. WinPcap is one of the excellent packet capturing architectures under Windows. This paper analyzes packet capturing principle in detail combined with the structure and functions of the software and introduc
6、es its application in designing a network security and watch system. The fundamental principle of this system is to capture all packets of the local network using WinPcap library, and perform protocol analyzing and decoding on these packets, so can monitor the network on real-time.Key words: Network
7、 Sniffer, WinPcap, Packet capture, Protocol Analysis目 录1绪论11.1课题背景11.2研究现状12网络监听技术综述32.1网络监听概念32.2以太网监听的原理32.3WinPcap的原理52.4综述73相关网络协议的分析93.1网络的原理体系结构93.2网络协议的分析与实现103.2.1网络接口层103.2.2网络层113.2.3传输层153.3小结194局域网监听系统的设计及实现204.1局域网监听系统的设计204.1.1功能设计204.1.2模块设计214.2局域网监听系统程序的实现224.2.1数据包的捕获234.2.2数据包的分析2
8、44.2.3网络数据包流量的统计284.2.4实现过程中的难点和解决284.3系统程序运行29结 论32参 考 文 献33致 谢341 绪论1.1 课题背景随着Internet的日益普及,Internet已经普遍使用于各行各业,为资源共享、信息交流和分布处理提供了良好的环境。计算机网络具有分布广泛性、系统结构开放性、资源共享性和信道复用性的特点,从而提高了网络的通用性,也无可避免地带来系统的脆弱性,使其面临严重的安全问题。目前人们对计算机信息安全的要求越来越高,随着计算机网络的资源共享的需求进一步提高,随之而来的网络安全问题使得计算机网络安全维护将会变得越来越重要。网络监听是信息安全领域内一项
9、十分重要和常用的技术,它的诞生源于网络管理员为了诊断网络问题的需要,而监听网络中传输的数据信息。在网络管理和维护中,网络管理和维护人员经常使用网络监听技术监测网络的实时状况、统计流量、分析网络访问等等。更重要的是,网络监听技术可以帮助网络管理员发现当前网络的漏洞和隐患,为增强网络系统的安全性提供了依据。任何事物都有两面性,网络监听技术也经常成为黑客窃取网络用户的私隐资料的有利工具。被网络监听往往意味着用户个人私隐资料的泄露,甚至会给公司企业机构带来难以弥补的金钱和声誉损失。在网络攻击防护方面,通过数据截获及分析可以捕获到穿过防火墙而进入网络的不合法数据,监控记录黑客的入侵进程,保证网络的安全。
10、而且,数据截获和协议分析是入侵检测系统的主要部分,是入侵检测系统的最底层的环节。因而网络监听无论是在网络攻击还是安全防护方面都扮演着重要的角色。1.2 研究现状在信息技术迅猛发展的今天,信息安全已经成为当前计算机研究一个主要领域。网络安全由内部网络安全和外部网络安全构成,保证外部网络的安全性一般都采用在防火墙或者其他网络设备上设置参数隔离的方法,对来自外部网络的访问的恶意攻击进行监控,检测和阻止;保证内部网络安全主要是跟踪监控网络活动,过滤网络信息。目前主要采用网络监听技术对内部网络进行监控,随着这一技术的诞生,许多可工作在各种平台上的相关软硬件工具也产生了,管理员使用这些网络监听工具,可以获
11、知当前网络的负载状况,网络访问的情况以及网络上传输的信息,起到防止外部攻击或弥补内部网络缺陷的作用。在网络上,网络监听效果最好的地方是在防火墙、网关、路由器一类的设备处,通常由网络管理员来实施操作。使用最方便的是在一个以太网中的任何一台接入网络的主机上,它可以在不同的操作平台上进行监听。目前有很多优秀的网络监听软件:1、Sniffit: 由Lawrence Berkeley Laboratory开发的,在Solaris、Linux、SGI等多种平台上均可运行的网络监听软件。可以选择要监听的源、目标地址,还可选择TCP或UDP端口,协议和网络接口等。2、NetXRay: 由Cinco Netwo
12、rks公司开发的,可以在Windows9X和WindowsNT上运行,NetXRay是功能非常强大,使用也比较方便的协议分析和网络监控工具。它能实行多个网段监控,可以同时存在多个监控实例。使用NetXRay还可以设置许多过滤条件,而且有着友好的图形化界面。3、Tcpdump: Tcpdump是Linux中强大的网络数据采集分析工具。它从应用程序中读入网络上有关的大量分组信息,与指定准则进行匹配来过滤这些分组信息。但其操作界面不太友好,操作性不强。4、WinPcap: WinPcap是由Berkeley包捕获库派生而来的包捕获库,在Windows操作平台上实现对底层包的截获过滤。目前使用最多的监
13、听软件是WinPcap、Sniffit,由于在Unix和Linux系统中,要拥有超级用户的权限才能执行这些命令,因此限制了UNIX系统的普通用户运行网络监听软件,只有超级用户才能对网络实施监听;而在Windows操作系统中,所有用户都能运行这类监听软件进行监听,没有UNIX系统的限制;目前许多数据包捕获器都是基于过滤器技术来实现的,大多数的过滤程序都是建立在Lawrence Berkeley Laboratory的Libpcap基础之上的。因此本文涉及的是在以太网的网络环境下,在Windows操作系统中使用包捕获器WinPcap实现对底层数据包进行捕获分析。由监听技术发展的现状来看,目前主流的
14、网络监听工具软件几乎都是国外生产的软件。随着中国信息技术的发展,监听系统必将大有用武之地,因此监听技术的研究势在必行。2 网络监听技术综述2.1 网络监听概念监听器俗称嗅探器(Sniffer),它是一种与网络安全密切相关的常用工具。它的完整解释是:应用计算机的网络接口截获目的地为其它计算机的数据报文的一种工具。在使用中,网络管理员可以运用网络监听器获取网络的实时流量情况;程序员可以应用监听器来管理网络程序的运行状态;对于黑客而言,网络监听工具也是常用的工具。当网络上的数据以明文的方式传输时,便可以使用网络监听的方法进行窃听。将网络接口卡设置为混杂模式,就可以源源不断地截获网络上传输的信息。网络
15、上的任何一个位置都可以实施网络监听,如局域网中的一台主机、路由器、网关、防火墙或长途网的调制解调器之间等。截获用户的口令是黑客们用得最多的攻击手段。当黑客成功地入侵互联网上的一台主机,并获得了超级用户权限后,一般还会继续扩展战果,入侵网络中其他主机或者获取其他主机的控制权。而网络监听则是一种既简单又有效的办法,能方便地取得用其他手段很难取得的信息。在网络上,监听效果最好的是在本地网关、路由器、防火墙一类的设备处,由网络管理员来操作。使用最方便的是在一个以太网中的任何一台上线的主机上,这也是大多数黑客的做法。2.2 以太网监听的原理以太网(Ethernet)具有介质共享的特性,数据是以明文的形式
16、在网络上传输,当网络适配器设置为混杂模式(Promiscuous)时,由于以太网采用广播信道争用和共享传输介质的方式,使得监听系统能够连接正常通信的网络,并可以捕获在同一冲突域上传输的任何一个数据包。IEEE802.3标准的以太网是采用CSMA/CD的方式发送数据的,正是由于以太网采用这种广播信道争用的机制,给连接在以太网上的主机捕获其他主机发送的数据包带来了可能,数据包捕获系统就能够拦截我们所要的信息,这是捕获数据包的物理基础。以太网从逻辑上来看是一种总线型的网络,是由一条总线和多个连接在总线上的站点所组成的,各个站点采用CSMA/CD方式争夺共享信道,由每个站点的网络适配器来实现这种功能。
17、网络适配器主要的工作是监听总线当前状态是否空闲,是否可以进行数据的传送,判断每个数据帧的MAC目的地址是否为本机的MAC地址,如果不匹配则将它丢弃。如果是为本地地址,说明该数据帧是发往本机的,接收该数据帧,进行数据帧的CRC校验,然后上交数据帧到LLC子层。正常的数据包过滤机制如图2.1所示:图2.1 正常的数据包过滤机制网络适配器具有如下的几种工作模式:广播模式:物理地址(MAC地址)是0Xffffffffffff的帧是广播帧,工作在广播模式的网络适配器接收广播帧。多播模式:多播地址为目的MAC地址的帧可以被多播组内的主机接收,而多播组外的其它主机却接收不到。但是,如果将网络适配器设置为多播
18、模式,即使不是组内成员也可以接收所有的多播数据帧。直接模式:工作在直接模式下的网络适配器只能接收目的地址是自己的数据帧。混杂模式:工作在混杂模式下的网络适配器接收所有到达网络适配器的帧,网络监听程序就是在此模式下运行的。网络适配器的缺省工作模式包含广播模式和直接模式,即它只接收广播帧和发给自己的帧。如果把网络适配器设置为混杂模式,一个站点的网络适配器将可以接收同一个网络内所有站点所发送的数据包,这样便可以达到对网络实施监听的目的。2.3 WinPcap的原理各种网络安全应用系统均是基于相应的网络数据包截获函数开发而成的。虽然Unix平台上的基于BSD系统的数据包过滤器(BPF,Berkeley
19、 Packet Filter,伯克利数据包过滤器)提供了一组供应用程序直接调用的网络数据包截获函数,允许应用程序直接与网卡进行交互,但在Win32平台上,目前主要使用WinPcap包捕获驱动架构。WinPcap是LibPcap的Windows版本,它是基于Win32平台的网络数据包捕获和分析的系统,它具有丰富的网络数据包处理函数,其功能比BSD数据包捕获系统更强大。WinPcap采用的是分层化的驱动程序模型,它包含三个组件:内核级的包过滤器(NPF),底层的动态链接库(packet.dll)以及高层并且与系统无关的库(wpcap.dll)。WinPcap是集成于Windows操作系统的设备驱动
20、程序,它可以捕获网卡收到的原始数据包,或者往网卡发送原始数据包,同时能够过滤并且存储数据包。开发WinPcap这个项目的目的在于为Win32应用程序提供访问网络底层的能力。它提供了以下四项功能:1、捕获原始数据包,可捕获共享网络上各主机发送的以及相互之间交换的数据包;2、在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;3、把原始的数据包发送到网络上;4、采集网络通信过程中的统计数据。图2.2 WinPcap结构图WinPcap的基本结构沿用了BPF( Berkeley Packet Filter,伯克利数据包过滤器)几个最重要的模块:过滤器,内核级缓存和用户级缓存,用户级上
21、的两种库。WinPcap的结构如图2.2所示,主要包括三部分:1、内核级的包过滤器(NPF)在内核级的NPF是一个经过优化的内核模式驱动器,并将过滤后的数据包原封不动地传给用户级模块。2、数据包低级动态链接库(packet.dll)数据包低级动态链接库是与Libpcap相兼容的一组用户级的函数库。它为Win32平台提供了一个公共的接口,可直接访问NPF驱动程序。不同的Windows系统都有自己的内核模块和用户层模块,而packet.dll可以解决这些不同,提供一个与系统无关的API。基于packet.dll开发的数据包截获程序可以运行于不同的Win32平台而不必重新进行编译。packet.dl
22、l还有几个附加功能,它可用来获取网络适配器名称、加载动态驱动器、获取主机掩码以及以太网冲突次数等。packet.dll和NPF均是与操作系统有关的。3、数据包高级系统无关库(wpcap.dll)wpcap.dll是更高层的与操作系统无关的,它含有产生过滤器、用户级缓冲以及包注入等高级功能。所以,程序员既可以直接进入内核级调用packet.dll中的低级函数,也可以调用由wpcap.dll提供的高级函数,wpcap.dll功能更强大,程序员使用起来也更方便。wpcap.dll的高级函数调用会自动调用packet.dll中的低级函数,并可能被转换成若干个NPF系统调用。Wpcap.dll模块与Un
23、ix系统下的BSD捕获架构提供的Libpcap库完全兼容,在功能上还有所增强,增加了数据包发送功能以及统计功能,数据包发送功能使得应用程序可以实现主动向网络发送数据包。统计功能可以实现对网络数据的快速统计,如某时间段经过网卡的数据包数目,数据字节数等。通常我们用Wpcap.dll模块来设计网络监听程序,这样在Unix系统下使用Libpcap编制的程序,经过重新编译后,就可以在Win32平台上直接运行,可移植性强。WinPcap的API函数直接从数据链路层获取数据帧,即MAC帧。根据网络协议的规定,对MAC帧层层分析,可以获得网络上所传输的数据内容。整个包捕获架构的基础是网络驱动接口规范(Net
24、work Driver Interface Specification,简称NDIS),它是Windows中最底层的与连网有关的软件,定义网络适配器与协议驱动(如TCP/IP)之间通信的规范。WinPcap的优点在于:1、独立于主机协议来发送和接收原始数据包,并且提供了一套标准的与Lipcap兼容抓包接口,使得可以快速移植许多Unix平台下的网络分析工具,便于各种网络分析工具的开发。2、充分考虑了性能优化与效率优化,包括对NPF内核层次上的过滤器支持。3、提供了数据包发送功能,支持内核级的统计模式,。WinPcap的缺点在于:不能过滤、阻塞或控制其他应用程序收发数据包,它仅仅是监听共享网络上传
25、送的数据。因此,它不能用于个人防火墙或QOS调度程序。2.4 综述以上内容详细介绍了网络监听的原理。监听软件可以监听局域网中传输的数据包是因为以太网是总线型网,而且在以太网中主机进行数据传输时采用广播的方式。任何一台主机发送的数据包,都会在网络中进行广播。正常情况下,主机只接收属于自己的数据包,不与其它主机发生混乱,这是计算机中的网卡工作的结果。将网卡的接收模式进行适当改变就可以改变网卡的过滤策略,使网卡能够接收经过本网段的所有数据包,无论这些数据包的目的地址是否是该主机。可通过调用WinPcap的API函数来改变网卡的工作模式进而截获数据包。以上这些为后期的开发奠定了理论基础,为编程实现提供
26、了指导。3 相关网络协议的分析3.1 网络的原理体系结构网络协议通常分不同层次进行开发,每一层负责不同的通信功能。本局域网监听系统主要基于TCP/IP协议进行网络数据包的监听与分析的。TCP/IP通常被认为是一个四层的体系结构,它包含应用层、传输层、网络层和网络接口层。结构如图3.1所示:图3.1 TCP/IP协议的四层结构TCP/IP协议的四层结构中每一层负责不同的功能:1、网络接口层网络接口层,有时也称作链路层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们为网络层提供数据传输服务,负责处理所有的硬件细节。在发送数据的时,网络接口层的任务是将在网络层传下来的IP数据报封装
27、成帧,在两个相邻节点间的链路上传送以帧为单位的数据。2、网络层网络层,有时也称作网际层,负责为经过网络的分组进行路由选择。在TCP/IP协议族中,网络层协议包括网际协议(Internet Protocol, IP协议),因特网控制报文协议(Internet Control Message Protocol, ICMP协议),以及因特网组管理协议(Internet Group Management Protocol, IGMP协议)。其中IP是TCP/IP协议中最为核心的协议,所有的TCP、UDP、ICMP及IGMP数据都以IP数据包格式传输。3、传输层传输层,主要是为两台主机上的应用程序提供端
28、到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:传输控制协议(Transmission Control Protocol, TCP)和用户数据报协议(User Datagram Protocol, UDP)。TCP在IP网络基础上通过面向连接的数据传输方式提供可靠的数据传输。它所做的工作包括把应用程序交给它的数据分成合适大小的数据段交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于传输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方面,UDP则为应用层提供一种非常简单的服务。它是不保证可靠性的无连接协议,它没有确认机制或传输保证,只
29、是把数据报文从一台主机发送到另一台主机,错误处理和重传机制必须由上层协议来完成。4、应用层应用层是体系结构中的最高层,它直接为用户应用进程提供服务。应用层确定进程之间通信的性质以满足用户的需要。这里的进程就是指正在运行的程序。应用层直接为用户的应用进程提供服务。在因特网中的应用层协议很多,如提供万维网服务的HTTP协议,支持电子邮件的SMTP协议,支持文件传送的FTP协议等等。3.2 网络协议的分析与实现3.2.1 网络接口层在数据链路层中分离出来的数据帧,并从帧头中得到源MAC地址、目标MAC地址以及数据内容所用的协议。图3.2 以太网的封装格式在TCP/IP世界中,以太网IP数据报的封装(
30、如图3.2所示)是在RFC894Hornig 1984中定义的。以太网帧由一个包含三个字段的帧头开始,前两个字段包含了物理地址,各六个字节,头部的第三个字段包含了16位的以太帧类型,帧后面是数据区。根据帧类型字段可以判断是哪种数据报,比如,如果是IP数据报,这个字段就被置为0x0800;如果是ARP请求及应答,这个字段就被置为0x0806;如果是RARP请求及应答,这个字段就被置为0x8035。实现过程中MAC头的定义如下:typedef struct tag_mac_headeru_char dadd6;/6个字节 目标地址u_char sadd6;/6个字节 源地址u_short mac_
31、type;/2个字节 类型mac_header;3.2.2 网络层IP协议是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP数据都以IP数据报格式传输,TCP/IP协议中传输数据的基本单位为IP数据报,其结构描述如图3.3所示。1、版本号:4位,表示目前的IP协议的版本号。2、首部长度:4位,确定IP数据包首部字段的长度,基本单位为4字节,IP首部长度是20 个字节。3、服务类型(Type of Service, TOS):8位,选择哪一种网络服务。目前,大多数已不再使用该选项。4、总长度:16位,指整个IP数据包的长度,是IP首部中必要的内容,它的基本单位为字节。由于该字段
32、长16比特,所以IP数据报最长可达65535字节。5、标识字段:16位,IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。标识字段通常与标记字段和片偏移字段一起用于数据包的分段。如果数据包原始长度超过数据包所要经过的数据链路的最大传输单元(MTU),那么必须将数据包分段为更小的数据包。相同的标识字段的值使分段后的各数据包片最后能正确地重装成原来的数据报。图3.3 IP数据报格式及首部中的各字段格式6、标志域:3位,第一位没有使用。第二位是不分段(DF)位。当DF位被设置为1时,表示能对数据包进行分段处理。如果数据包由于不能被分段而未能被转发,那么将丢弃该数
33、据包并向源点发送错误消息。第三位表示还有更多分段(MF)位,当对数据包进行分段时,除了最后一个分段的MF位设置为0外,其他所有分段的MF位均设置为1,以便接收者直到收到MF位为0的分段为止。7、片偏移:13位,以8个字节为单位。用于指明分段起始点相对于报头起始点的偏移量。由于分段到达时可能错序,所以片偏移字段可以使接收者按照正确的顺序重组数据包。8、生存时间(Time To Live, TTL)字段:8位,在最初创建数据包时TTL即被设置为某个特定值。当数据包逐个沿路由器被传输时,每台路由器都会将TTL的值减1。当TTL值减为0时,路由器将会丢弃该数据包并向源点发送ICMP 报文通知源主机。9
34、、协议类型:8位,表示IP数据包的数据部分属于什么协议。取值:1 表示为ICMP协议2 表示为IGMP协议6 表示为TCP协议17 表示为UDP协议10、首部检验和:16位,是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。11、可选项:是数据报中的一个可变长的可选信息。通过以上的网络层分析在协议标识的第10个字节为6时,表示IP包的内容是一个TCP segment,从而获得网络层TCP 的数据包。实现过程中32bit的IP地址的定义:typedef struct tag_ip_addressu_char byte1;/sizeof(u_char)=1 u_char占1Byte(8b
35、it)u_char byte2;u_char byte3;u_char byte4;ip_address;实现过程中IP数据报报头的数据结构如下:/定义IP头 IP数据=IP头TCP数据段(或UDP数据段)typedef struct tag_ip_headeru_char ver_ihl;/ u_char 8比特 4比特版本号 4比特头部长度u_char tos;/服务类型 TOSu_short tlen;/总长度 u_short占2Byte u_short identification;/标识u_short flags_fo;/3比特标识符+ 13比特片偏移u_char ttl;/生存时间
36、u_char proto;/协议u_short crc;/头部校验ip_address saddr;/源IP地址ip_address daddr;/目的IP地址u_int op_pad;/可选项+填充项 u_int占4个字节 32比特/接下来是数据段(Segment)ip_header;ICMP是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。ICMP报文是在IP数据报内部被传输的,如图3.4所示。图3.4 ICMP封装在IP数据报内部ICMP报文的格式如图3.5所示。图3.5 ICMP数据报格式及首部中的各字段首部ICMP报文的种类有两种:ICMP差错报告报文和ICM
37、P询问报文。 ICMP报文的前4个字节是统一的格式,共有三个字段:类型、代码、检验和,剩下的其他字节则互不相同。1、类型:8位,用于说明ICMP报文的作用及格式。2、代码:8位,是为了进一步区分某种类型中的几种不同的情况。3、检验和:16位,检验和字段覆盖了整个ICMP报文。typedef struct tag_icmp_headeru_char type;/8比特 类型u_char identifer;/8比特 代码u_char sequence;/序列号 8比特u_char chksum;/8比特校验和icmp_header;3.2.3 传输层传输层主要是为两台主机上的应用程序提供端到端的
38、通信。在TCP/IP协议中,有两个互不相同的传输协议:传输控制协议(Transmission Control Protocol, TCP)和用户数据报协议(User Datagram Protocol, UDP)。TCP(传输控制协议)是专门设计用于在不可靠的网络上提供可靠的、端到端的字节流通信的协议。一个TCP报文段分为首部和数据两部分,TCP数据报封装成一份IP数据报的格式如图3.6所示。图3.6 TCP数据报的封装TCP的全部功能都体现在它首部中各个字段的作用。因此,只有弄清楚TCP首部各字段的作用才能掌握TCP的工作原理。TCP协议的首部字段如图3.7所示。图3.7 TCP数据报格式及
39、首部中的各字段TCP报文段首部的前20个字节是固定的,后面有4n字节是根据需要而增加的选项(n必须是整数)。因此TCP首部的最小长度是20字节。首部固定部分各字段的意义如下:1、源端口和目的端口:各占2个字节。端口是传输层与应用层的服务接口。这两个值加上IP首部中的源IP地址和目的IP地址可唯一标识运行在一台主机上的进程。2、序列号:32位,序列号确定了发送方发送的数据流中被封装的数据所在位置,它表示在这个报文段中的第一个数据字节。3、确认号:32位,确认号确定了源主机下一次希望从目标主机接收的序列号。4、首部长度:4位,指示TCP报文首部的长度。首部长度指定了以32位字为单位的报头长度。这一
40、字段标识出数据的起点是十分重要,因为任选字段的长度是可变的。5、保留:6位,通常设置为0,为今后使用作保留。6、标志位:有6个标志比特。它们中的多个可同时被设置为1。每个比特用法如下所示:URG:第一个比特被置位,说明装载的是紧急报文;ACK:第二个比特被置位,说明确认号有效;PSH:第三个比特被置位,说明这是一个从发送端发往接收端的通知,接收端应该尽快地将其收到的数据传送到上层应用;RST:第四个比特被置位,就发出一个复位TCP连接的请求;SYN:第五个比特被置位,初始化一个连接;FIN:第六个比特被置位,终止一个连接。7、窗口大小:16位,主要用于流量控制。窗口大小指明了自确认号指定的字节
41、开始接收方在必须停止传输并等待确认之前发送方可以接受的数据段的字节长度。8、检验和:16位,检验和覆盖了整个的TCP首部和TCP数据。9、紧急指针:16位,只有当URG标志置1时紧急指针才有效。紧急指针指向TCP净荷中紧急报文的最后一个字节。10、可选项:长度可变。最常用的可选是最长报文长度,通知接收者发送者愿意接收的最大报文长度。实现过程中TCP数据报报头的数据结构如下:typedef struct tag_tcp_header u_short sport;/源端口 16比特 u_short dport;/目的端口 16比特 u_int32_t sn;/序列号 32比特 u_int32_t
42、an;/确认号 32比特 u_int16_t other;/16比特 首部长度4比特保留6比特UPG+ACK+PSH+RST+SYN+FIN u_int16_t window_size;/窗口大小 16比特 u_int16_t check_sum;/校验和 16比特 u_int16_t urgent_pointer;/紧急指针 16比特 u_int32_t option;/选项0或32比特tcp_header;UDP是一个简单的面向数据报的传输层协议,提供了一种无连接、尽力而为的数据包转发服务。UDP数据报封装成IP数据包的格式如图3.8所示。图3.8 UDP数据报封装UDP不提供可靠性:它并
43、不保证数据能到达目的地。UDP首部的各字段格式如图3.9所示。图3.9 UDP数据报格式及首部中的各字段1、源端口和目的端口号:各16位,表示发送进程和接收进程。2、UDP长度:16位,包括UDP首部和UDP数据的字节长度。该字段最小值为8字节。IP数据报长度指的是数据报全长,因此UDP数据报长度是全长减去IP首部的长度。3、UDP检验和:16位,UDP检验和覆盖UDP首部和UDP数据。实现过程中UDP数据报报头的数据结构如下:typedef struct tag_udp_headeru_short sport;/源端口 16比特u_short dport;/目的端口 16比特u_short
44、len;/数据报长度 16比特u_short crc;/校验和 16比特udp_header;3.3 小结本章主要介绍了网络的体系结构及MAC帧头、IP、ICMP、TCP、UDP协议的数据报格式。通过网络的功能分层带来了网络协议的层次结构。数据在传输过程中,就面临着数据的封装。协议数据单元在应用层、表示层和会话层被称作数据(Data),在传输层被称作分段(Segment),在网络层被称作包(Packet),在数据链路层被称作帧(Frame),在物理层被称作(bit)。在本系统网络协议分析中对数据报的分析就是一个对数据包进行解封装的过程。4 局域网监听系统的设计及实现本程序设计所要求的运行环境如
45、下:软件环境:操作系统 WindowsXP;底层驱动 WinPcap4.1.1;编译环境 Visual C + 6.0;WinPcap开发包 WpdPack4.1.1。硬件环境:同一网段的局域网网络环境;一台PC;一张以太网网卡。图4.1是该系统所依赖的网络环境:图4.1 网络工作环境4.1 局域网监听系统的设计4.1.1 功能设计该网络监听软件实现的主要功能可以概括为以下几点:1、首先对经过主机的所有网络数据包进行截获,实现抓取数据包的目的。2、然后把截获的数据包保存在用户指定的文件中。3、加载在上一步中保存的数据包到软件,根据TCP/IP协议中各数据包的格式对加载的数据包进行解包分析,获得
46、数据包包头的相关信息(如MAC帧的源、目的地址,TCP的源、目的端口等信息)。4、实现对捕获数据的存储与加载,可以将捕获到的数据存储在磁盘上,以供分析研究。也可以从磁盘上加载数据,进行协议分析。5、对局域网内网络数据包流量的统计,以实现对网络性能的判断。4.1.2 模块设计根据软件所需要实现的功能,将软件系统划分为以下几个主要模块:初始化模块,数据包捕获模块,协议分析模块,数据包流量统计模块,存储、输出模块。如图4.2所示:图4.2 监听系统模块示意图初始化模块:初始化模块的主要功能是获得可用的网卡,设置用户选定的网卡的工作模式为混杂模式;并且完成初始化以及启动WinPcap等工作。该模块完成
47、数据包监听的一系列准备工作。数据包截获模块:该模块的功能是完成数据包的捕获,并将其存放到用户指定的文件中。协议分析模块:协议分析模块主要的功能是从用户指定的文件中加载截获的数据包,并根据TCP/IP协议族中各种数据包的首部格式对以上加载的数据包进行协议分析,从而获得数据包的源MAC地址,目的MAC地址,源IP地址,目的IP地址,源端口号,目的端口号等等。其中,这里主要实现了对TCP包,UDP包和ICMP包的分析。数据包流量统计模块:对局域网内数据流量进行统计分析,以获得单位时间内局域网数据包的总量、平均流量及各协议数据包的个数。存储、输出(显示)模块:把协议分析模块分析和流量统计模块所得的IP地址信