局域网监听系统的设计本科论.doc_第1页
局域网监听系统的设计本科论.doc_第2页
局域网监听系统的设计本科论.doc_第3页
局域网监听系统的设计本科论.doc_第4页
局域网监听系统的设计本科论.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业设计(论文)本科毕业设计(论文) 局域网监听系统的设计局域网监听系统的设计 学学 院院 计算机学院计算机学院 专专 业业 网络工程网络工程 (网络系统开发与管理方向)(网络系统开发与管理方向) 年级班别年级班别 20072007 级(级(1 1)班)班 学学 号号 31070069273107006927 学生姓名学生姓名 单国玮单国玮 指导教师指导教师 何晓桃何晓桃 20112011 年年 6 6 月月 摘摘 要要 随着计算机网络技术的迅速发展,网络的安全问题也显得尤其重要。随之而诞生 的一项主要的技术网络监听技术,它已成为网络安全领域内的一个热点话题,在 实际应用中有很强的背景。网络监听是网络管理员对网络进行监控、负载分析等管理 活动的常用方法,同时也是被黑客利用来窃取非法信息的手段。网络监听工具利用网 络传输介质的共享特性来捕获数据包,从而帮助网络管理员了解当前网络的使用情况 ,对网络中的信息进行实时的监测、分析;但同时也会被黑客利用来截获本网段的一 些重要信息,威胁网络安全。 数据包捕获技术是设计网络监听软件的底层技术,而 WinPcap 则是 Windows 系统 中完成的一个优秀的包捕获架构。本文联系该软件包的结构与功能对包捕捉理论进行 了具体的分析,并实现了其在网络安全监控系统中的运用。该系统的基本理论是通过 调用 WinPcap 库捕获本地网络上的一切数据包,然后对数据包进行协议分析,然后可 以实时地监控网络。 关键词关键词:网络监听,WinPcap,包捕获,协议分析 Abstract With the rapid development of computer network technology, the security problem of network becomes 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 information 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 threaten 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 introduces 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 Sniffer, WinPcap, Packet capture, Protocol Analysis 目目 录录 1绪论.1 1.1课题背景1 1.2研究现状1 2网络监听技术综述.3 2.1网络监听概念3 2.2以太网监听的原理3 2.3WINPCAP的原理.5 2.4综述7 3相关网络协议的分析.9 3.1网络的原理体系结构9 3.2网络协议的分析与实现10 3.2.1 网络接口层10 3.2.2 网络层11 3.2.3 传输层15 3.3小结19 4局域网监听系统的设计及实现.20 4.1局域网监听系统的设计20 4.1.1 功能设计20 4.1.2 模块设计21 4.2局域网监听系统程序的实现22 4.2.1 数据包的捕获23 4.2.2 数据包的分析24 4.2.3 网络数据包流量的统计28 4.2.4 实现过程中的难点和解决28 4.3系统程序运行29 结 论32 参 考 文 献33 致 谢34 0 1 1绪论绪论 1.11.1课题背景课题背景 随着 Internet 的日益普及,Internet 已经普遍使用于各行各业,为资源共享、信息 交流和分布处理提供了良好的环境。计算机网络具有分布广泛性、系统结构开放性、 资源共享性和信道复用性的特点,从而提高了网络的通用性,也无可避免地带来系统 的脆弱性,使其面临严重的安全问题。目前人们对计算机信息安全的要求越来越高, 随着计算机网络的资源共享的需求进一步提高,随之而来的网络安全问题使得计算机 网络安全维护将会变得越来越重要。 网络监听是信息安全领域内一项十分重要和常用的技术,它的诞生源于网络管理 员为了诊断网络问题的需要,而监听网络中传输的数据信息。在网络管理和维护中, 网络管理和维护人员经常使用网络监听技术监测网络的实时状况、统计流量、分析网 络访问等等。更重要的是,网络监听技术可以帮助网络管理员发现当前网络的漏洞和 隐患,为增强网络系统的安全性提供了依据。任何事物都有两面性,网络监听技术也 经常成为黑客窃取网络用户的私隐资料的有利工具。被网络监听往往意味着用户个人 私隐资料的泄露,甚至会给公司企业机构带来难以弥补的金钱和声誉损失。 在网络攻击防护方面,通过数据截获及分析可以捕获到穿过防火墙而进入网络的 不合法数据,监控记录黑客的入侵进程,保证网络的安全。而且,数据截获和协议分 析是入侵检测系统的主要部分,是入侵检测系统的最底层的环节。因而网络监听无论 是在网络攻击还是安全防护方面都扮演着重要的角色。 1.21.2研究现状研究现状 在信息技术迅猛发展的今天,信息安全已经成为当前计算机研究一个主要领域。 网络安全由内部网络安全和外部网络安全构成,保证外部网络的安全性一般都采用在 防火墙或者其他网络设备上设置参数隔离的方法,对来自外部网络的访问的恶意攻击 进行监控,检测和阻止;保证内部网络安全主要是跟踪监控网络活动,过滤网络信息 。目前主要采用网络监听技术对内部网络进行监控,随着这一技术的诞生,许多可工 作在各种平台上的相关软硬件工具也产生了,管理员使用这些网络监听工具,可以获 1 知当前网络的负载状况,网络访问的情况以及网络上传输的信息,起到防止外部攻击 或弥补内部网络缺陷的作用。 在网络上,网络监听效果最好的地方是在防火墙、网关、路由器一类的设备处, 通常由网络管理员来实施操作。使用最方便的是在一个以太网中的任何一台接入网络 的主机上,它可以在不同的操作平台上进行监听。目前有很多优秀的网络监听软件: 1、Sniffit: 由 Lawrence Berkeley Laboratory 开发的,在 Solaris、Linux、SGI 等多种平台上均可运行的网络监听软件 。可以选择要监听的源、目标地址,还可选 择 TCP 或 UDP 端口,协议和网络接口等。 2、NetXRay: 由 Cinco Networks 公司开发的 ,可以在 Windows9X 和 WindowsN T 上运行,NetXRay 是功能非常强大,使用也比较方便的协议分析和网络监控工具。 它能实行多个网段监控,可以同时存在多个监控实例。使用 NetXRay 还可以设置许多 过滤条件,而且有着友好的图形化界面 。 3、Tcpdump: Tcpdump 是 Linux 中强大的网络数据采集 分析工具。它从应用程 序中读入网络上有关的大量分组信息,与指定准则进行匹配来过滤这些分组信息。但 其操作界面不太友好,操作性不强。 4、WinPcap: WinPcap 是由 Berkeley 包捕获库派生而来的包捕获库,在 Windows 操作平台上实现对底层包的截获过滤。 目前使用最多的监听软件是 WinPcap、Sniffit,由于在 Unix 和 Linux 系统中,要 拥有超级用户的权限才能执行这些命令,因此限制了 UNIX 系统的普通用户运行网络监 听软件,只有超级用户才能对网络实施监听;而在 Windows 操作系统中,所有用户都 能运行这类监听软件进行监听,没有 UNIX 系统的限制;目前许多数据包捕获器都是基 于过滤器技术来实现的,大多数的过滤程序都是建立在 Lawrence Berkeley Laboratory 的 Libpcap 基础之上的。因此本文涉及的是在以太网的网络环境下,在 Windows 操作 系统中使用包捕获器 WinPcap 实现对底层数据包进行捕获分析。 由监听技术发展的现状来看,目前主流的网络监听工具软件几乎都是国外生产的 软件。随着中国信息技术的发展,监听系统必将大有用武之地,因此监听技术的研究 势在必行。 2 2 2网络监听技术综述网络监听技术综述 2.12.1网络监听概念网络监听概念 监听器俗称嗅探器(Sniffer),它是一种与网络安全密切相关的常用工具。它的完整 解释是:应用计算机的网络接口截获目的地为其它计算机的数据报文的一种工具。 在使用中,网络管理员可以运用网络监听器获取网络的实时流量情况;程序员可 以应用监听器来管理网络程序的运行状态;对于黑客而言,网络监听工具也是常用的 工具。当网络上的数据以明文的方式传输时,便可以使用网络监听的方法进行窃听。 将网络接口卡设置为混杂模式,就可以源源不断地截获网络上传输的信息。 网络上的任何一个位置都可以实施网络监听,如局域网中的一台主机、路由器、 网关、防火墙或长途网的调制解调器之间等。 截获用户的口令是黑客们用得最多的攻击手段。当黑客成功地入侵互联网上的一 台主机,并获得了超级用户权限后,一般还会继续扩展战果,入侵网络中其他主机或 者获取其他主机的控制权。而网络监听则是一种既简单又有效的办法,能方便地取得 用其他手段很难取得的信息。 在网络上,监听效果最好的是在本地网关、路由器、防火墙一类的设备处,由网 络管理员来操作。使用最方便的是在一个以太网中的任何一台上线的主机上,这也是 大多数黑客的做法。 2.22.2以太网监听的原理以太网监听的原理 以太网(Ethernet)具有介质共享的特性,数据是以明文的形式在网络上传输,当网 络适配器设置为混杂模式(Promiscuous)时,由于以太网采用广播信道争用和共享传输 介质的方式,使得监听系统能够连接正常通信的网络,并可以捕获在同一冲突域上传 输的任何一个数据包。IEEE802.3 标准的以太网是采用 CSMA/CD 的方式发送数据的, 正是由于以太网采用这种广播信道争用的机制,给连接在以太网上的主机捕获其他主 机发送的数据包带来了可能,数据包捕获系统就能够拦截我们所要的信息,这是捕获 数据包的物理基础。 以太网从逻辑上来看是一种总线型的网络,是由一条总线和多个连接在总线上的 站点所组成的,各个站点采用 CSMA/CD 方式争夺共享信道,由每个站点的网络适配 3 器来实现这种功能。网络适配器主要的工作是监听总线当前状态是否空闲,是否可以 进行数据的传送,判断每个数据帧的 MAC 目的地址是否为本机的 MAC 地址,如果不 匹配则将它丢弃。如果是为本地地址,说明该数据帧是发往本机的,接收该数据帧, 进行数据帧的 CRC 校验,然后上交数据帧到 LLC 子层。 正常的数据包过滤机制如图 2.1 所示: 图 2.1 正常的数据包过滤机制 网络适配器具有如下的几种工作模式: 广播模式:物理地址(MAC 地址)是 0Xffffffffffff 的帧是广播帧,工作在广播模式 的网络适配器接收广播帧。 多播模式:多播地址为目的 MAC 地址的帧可以被多播组内的主机接收,而多播组 外的其它主机却接收不到。但是,如果将网络适配器设置为多播模式,即使不是组内 成员也可以接收所有的多播数据帧。 直接模式:工作在直接模式下的网络适配器只能接收目的地址是自己的数据帧。 混杂模式:工作在混杂模式下的网络适配器接收所有到达网络适配器的帧,网络 监听程序就是在此模式下运行的。 网络适配器的缺省工作模式包含广播模式和直接模式,即它只接收广播帧和发给 自己的帧。如果把网络适配器设置为混杂模式,一个站点的网络适配器将可以接收同 一个网络内所有站点所发送的数据包,这样便可以达到对网络实施监听的目的。 4 2.32.3WinPcapWinPcap 的原理的原理 各种网络安全应用系统均是基于相应的网络数据包截获函数开发而成的。虽然 Unix 平台上的基于 BSD 系统的数据包过滤器(BPF,Berkeley Packet Filter,伯克利数 据包过滤器)提供了一组供应用程序直接调用的网络数据包截获函数,允许应用程序直 接与网卡进行交互,但在 Win32 平台上,目前主要使用 WinPcap 包捕获驱动架构。 WinPcap 是 LibPcap 的 Windows 版本,它是基于 Win32 平台的网络数据包捕获和分析 的系统,它具有丰富的网络数据包处理函数,其功能比 BSD 数据包捕获系统更强大。 WinPcap 采用的是分层化的驱动程序模型,它包含三个组件:内核级的包过滤器(NPF), 底层的动态链接库(packet.dll)以及高层并且与系统无关的库(wpcap.dll)。WinPcap 是集 成于 Windows 操作系统的设备驱动程序,它可以捕获网卡收到的原始数据包,或者往 网卡发送原始数据包,同时能够过滤并且存储数据包。开发 WinPcap 这个项目的目的 在于为 Win32 应用程序提供访问网络底层的能力。 它提供了以下四项功能: 1、捕获原始数据包,可捕获共享网络上各主机发送的以及相互之间交换的数据包; 2、在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉; 3、把原始的数据包发送到网络上; 4、采集网络通信过程中的统计数据。 5 图 2.2 WinPcap 结构图 WinPcap 的基本结构沿用了 BPF( Berkeley Packet Filter,伯克利数据包过滤器) 几个最重要的模块:过滤器,内核级缓存和用户级缓存,用户级上的两种库。WinPcap 的结构如图 2.2 所示,主要包括三部分: 1、内核级的包过滤器(NPF) 在内核级的 NPF 是一个经过优化的内核模式驱动器,并将过滤后的数据包原封不 动地传给用户级模块。 2、数据包低级动态链接库(packet.dll) 数据包低级动态链接库是与 Libpcap 相兼容的一组用户级的函数库。它为 Win32 平台提供了一个公共的接口,可直接访问 NPF 驱动程序。不同的 Windows 系统都有自 己的内核模块和用户层模块,而 packet.dll 可以解决这些不同,提供一个与系统无关的 API。基于 packet.dll 开发的数据包截获程序可以运行于不同的 Win32 平台而不必重新 进行编译。 packet.dll 还有几个附加功能,它可用来获取网络适配器名称、加载动态驱动器、 获取主机掩码以及以太网冲突次数等。packet.dll 和 NPF 均是与操作系统有关的。 3、数据包高级系统无关库(wpcap.dll) 6 wpcap.dll 是更高层的与操作系统无关的,它含有产生过滤器、用户级缓冲以及包 注入等高级功能。所以,程序员既可以直接进入内核级调用 packet.dll 中的低级函数, 也可以调用由 wpcap.dll 提供的高级函数,wpcap.dll 功能更强大,程序员使用起来也更 方便。wpcap.dll 的高级函数调用会自动调用 packet.dll 中的低级函数,并可能被转换成 若干个 NPF 系统调用。Wpcap.dll 模块与 Unix 系统下的 BSD 捕获架构提供的 Libpcap 库完全兼容,在功能上还有所增强,增加了数据包发送功能以及统计功能,数据包发 送功能使得应用程序可以实现主动向网络发送数据包。统计功能可以实现对网络数据 的快速统计,如某时间段经过网卡的数据包数目,数据字节数等。通常我们用 Wpcap.dll 模块来设计网络监听程序,这样在 Unix 系统下使用 Libpcap 编制的程序,经 过重新编译后,就可以在 Win32 平台上直接运行,可移植性强。 WinPcap 的 API 函数直接从数据链路层获取数据帧,即 MAC 帧。根据网络协议 的规定,对 MAC 帧层层分析,可以获得网络上所传输的数据内容。 整个包捕获架构的基础是网络驱动接口规范(Network Driver Interface Specification,简称 NDIS),它是 Windows 中最底层的与连网有关的软件,定义网络适 配器与协议驱动(如 TCP/IP)之间通信的规范。 WinPcap 的优点在于: 1、独立于主机协议来发送和接收原始数据包,并且提供了一套标准的与 Lipcap 兼 容抓包接口,使得可以快速移植许多 Unix 平台下的网络分析工具,便于各种网络分析 工具的开发。 2、充分考虑了性能优化与效率优化,包括对 NPF 内核层次上的过滤器支持。 3、提供了数据包发送功能,支持内核级的统计模式, 。 WinPcap 的缺点在于:不能过滤、阻塞或控制其他应用程序收发数据包,它仅仅 是监听共享网络上传送的数据。因此,它不能用于个人防火墙或 QOS 调度程序。 2.42.4综述综述 以上内容详细介绍了网络监听的原理。监听软件可以监听局域网中传输的数据包 是因为以太网是总线型网,而且在以太网中主机进行数据传输时采用广播的方式。任 何一台主机发送的数据包,都会在网络中进行广播。正常情况下,主机只接收属于自 己的数据包,不与其它主机发生混乱,这是计算机中的网卡工作的结果。将网卡的接 7 收模式进行适当改变就可以改变网卡的过滤策略,使网卡能够接收经过本网段的所有 数据包,无论这些数据包的目的地址是否是该主机。可通过调用 WinPcap 的 API 函数 来改变网卡的工作模式进而截获数据包。以上这些为后期的开发奠定了理论基础,为 编程实现提供了指导。 8 3 3相关网络协议的分析相关网络协议的分析 3.13.1网络的原理体系结构网络的原理体系结构 网络协议通常分不同层次进行开发,每一层负责不同的通信功能。本局域网监听 系统主要基于 TCP/IP 协议进行网络数据包的监听与分析的。TCP/IP 通常被认为是一个 四层的体系结构,它包含应用层、传输层、网络层和网络接口层。结构如图 3.1 所示: 图 3.1 TCP/IP 协议的四层结构 TCP/IP 协议的四层结构中每一层负责不同的功能: 1、网络接口层 网络接口层,有时也称作链路层,通常包括操作系统中的设备驱动程序和计算机 中对应的网络接口卡。它们为网络层提供数据传输服务,负责处理所有的硬件细节。 在发送数据的时,网络接口层的任务是将在网络层传下来的 IP 数据报封装成帧,在两 个相邻节点间的链路上传送以帧为单位的数据。 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、传输层 9 传输层,主要是为两台主机上的应用程序提供端到端的通信。在 TCP/IP 协议族中, 有两个互不相同的传输协议:传输控制协议(Transmission Control Protocol, TCP)和用户 数据报协议(User Datagram Protocol, UDP)。 TCP 在 IP 网络基础上通过面向连接的数据传输方式提供可靠的数据传输。它所做 的工作包括把应用程序交给它的数据分成合适大小的数据段交给下面的网络层,确认 接收到的分组,设置发送最后确认分组的超时时钟等。由于传输层提供了高可靠性的 端到端的通信,因此应用层可以忽略所有这些细节。 而另一方面,UDP 则为应用层提供一种非常简单的服务。它是不保证可靠性的无 连接协议,它没有确认机制或传输保证,只是把数据报文从一台主机发送到另一台主 机,错误处理和重传机制必须由上层协议来完成。 4、应用层 应用层是体系结构中的最高层,它直接为用户应用进程提供服务。应用层确定进 程之间通信的性质以满足用户的需要。这里的进程就是指正在运行的程序。应用层直 接为用户的应用进程提供服务。在因特网中的应用层协议很多,如提供万维网服务的 HTTP 协议,支持电子邮件的 SMTP 协议,支持文件传送的 FTP 协议等等。 3.23.2网络协议的分析与实现网络协议的分析与实现 3.2.1网络接口层 在数据链路层中分离出来的数据帧,并从帧头中得到源 MAC 地址、目标 MAC 地 址以及数据内容所用的协议。 图 3.2 以太网的封装格式 在 TCP/IP 世界中,以太网 IP 数据报的封装(如图 3.2 所示)是在 RFC894Hornig 1984中定义的。以太网帧由一个包含三个字段的帧头开始,前两个字段包含了物理地 址,各六个字节,头部的第三个字段包含了 16 位的以太帧类型,帧后面是数据区。根 据帧类型字段可以判断是哪种数据报,比如,如果是 IP 数据报,这个字段就被置为 0x0800;如果是 ARP 请求及应答,这个字段就被置为 0x0806;如果是 RARP 请求及 10 应答,这个字段就被置为 0x8035。 实现过程中 MAC 头的定义如下: typedef struct tag_mac_header u_char dadd6;/6 个字节 目标地址 u_char sadd6;/6 个字节 源地址 u_short mac_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 首部中必要的内容,它的基本 单位为字节。由于该字段长 16 比特,所以 IP 数据报最长可达 65535 字节。 5、标识字段:16 位,IP 软件在存储器中维持一个计数器,每产生一个数据报, 计数器就加 1,并将此值赋给标识字段。标识字段通常与标记字段和片偏移字段一起用 于数据包的分段。如果数据包原始长度超过数据包所要经过的数据链路的最大传输单 元(MTU),那么必须将数据包分段为更小的数据包。相同的标识字段的值使分段后的 各数据包片最后能正确地重装成原来的数据报。 11 图 3.3 IP 数据报格式及首部中的各字段格式 6、标志域:3 位,第一位没有使用。第二位是不分段(DF)位。当 DF 位被设置为 1 时,表示能对数据包进行分段处理。如果数据包由于不能被分段而未能被转发,那么 将丢弃该数据包并向源点发送错误消息。第三位表示还有更多分段(MF)位,当对数据 包进行分段时,除了最后一个分段的 MF 位设置为 0 外,其他所有分段的 MF 位均设 置为 1,以便接收者直到收到 MF 位为 0 的分段为止。 7、片偏移:13 位,以 8 个字节为单位。用于指明分段起始点相对于报头起始点的 偏移量。由于分段到达时可能错序,所以片偏移字段可以使接收者按照正确的顺序重 组数据包。 8、生存时间(Time To Live, TTL)字段:8 位,在最初创建数据包时 TTL 即被设置 为某个特定值。当数据包逐个沿路由器被传输时,每台路由器都会将 TTL 的值减 1。 当 TTL 值减为 0 时,路由器将会丢弃该数据包并向源点发送 ICMP 报文通知源主机。 9、协议类型:8 位,表示 IP 数据包的数据部分属于什么协议。 取值:1 表示为 ICMP 协议 2 表示为 IGMP 协议 6 表示为 TCP 协议 12 17 表示为 UDP 协议 10、首部检验和:16 位,是根据 IP 首部计算的检验和码。它不对首部后面的数据 进行计算。 11、可选项:是数据报中的一个可变长的可选信息。 通过以上的网络层分析在协议标识的第 10 个字节为 6 时,表示 IP 包的内容是一 个 TCP segment,从而获得网络层 TCP 的数据包。 实现过程中 32bit 的 IP 地址的定义: typedef struct tag_ip_address u_char byte1;/sizeof(u_char)=1 u_char 占 1Byte(8bit) u_char byte2; u_char byte3; u_char byte4; ip_address; 实现过程中 IP 数据报报头的数据结构如下: /定义 IP 头 IP 数据=IP 头TCP 数据段(或 UDP 数据段) typedef struct tag_ip_header u_char ver_ihl;/ u_char 8 比特 4 比特版本号 4 比特头部长度 u_char tos;/服务类型 TOS u_short tlen;/总长度 u_short 占 2Byte u_short identification;/标识 u_short flags_fo;/3 比特标识符+ 13 比特片偏移 u_char ttl;/生存时间 u_char proto;/协议 u_short crc;/头部校验 ip_address saddr;/源 IP 地址 ip_address daddr;/目的 IP 地址 u_int op_pad;/可选项+填充项 u_int 占 4 个字节 32 比特 13 /接下来是数据段(Segment) ip_header; ICMP 是 TCP/IP 协议族的一个子协议,用于在 IP 主机、路由器之间传递控制消息。 ICMP 报文是在 IP 数据报内部被传输的,如图 3.4 所示。 图 3.4 ICMP 封装在 IP 数据报内部 ICMP 报文的格式如图 3.5 所示。 图 3.5 ICMP 数据报格式及首部中的各字段首部 ICMP 报文的种类有两种:ICMP 差错报告报文和 ICMP 询问报文。 ICMP 报文的前 4 个字节是统一的格式,共有三个字段:类型、代码、检验和,剩 下的其他字节则互不相同。 1、类型:8 位,用于说明 ICMP 报文的作用及格式。 2、代码:8 位,是为了进一步区分某种类型中的几种不同的情况。 3、检验和:16 位,检验和字段覆盖了整个 ICMP 报文。 typedef struct tag_icmp_header u_char type;/8 比特 类型 u_char identifer;/8 比特 代码 14 u_char sequence;/序列号 8 比特 u_char chksum;/8 比特校验和 icmp_header; 3.2.3传输层 传输层主要是为两台主机上的应用程序提供端到端的通信。在 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 所示。 15 图 3.7 TCP 数据报格式及首部中的各字段 TCP 报文段首部的前 20 个字节是固定的,后面有 4n 字节是根据需要而增加的选 项(n 必须是整数) 。因此 TCP 首部的最小长度是 20 字节。 首部固定部分各字段的意义如下: 1、源端口和目的端口:各占 2 个字节。端口是传输层与应用层的服务接口。这两 个值加上 IP 首部中的源 IP 地址和目的 IP 地址可唯一标识运行在一台主机上的进程。 2、序列号:32 位,序列号确定了发送方发送的数据流中被封装的数据所在位置, 它表示在这个报文段中的第一个数据字节。 3、确认号:32位,确认号确定了源主机下一次希望从目标主机接收的序列号。 4、首部长度:4 位,指示 TCP 报文首部的长度。首部长度指定了以 32 位字为单 位的报头长度。这一字段标识出数据的起点是十分重要,因为任选字段的长度是可变 的。 5、保留:6 位,通常设置为 0,为今后使用作保留。 6、标志位:有 6 个标志比特。它们中的多个可同时被设置为 1。每个比特用法如 下所示: URG:第一个比特被置位,说明装载的是紧急报文; 16 ACK:第二个比特被置位,说明确认号有效; PSH:第三个比特被置位,说明这是一个从发送端发往接收端的通知,接收端应 该尽快地将其收到的数据传送到上层应用; RST:第四个比特被置位,就发出一个复位 TCP 连接的请求; SYN:第五个比特被置位,初始化一个连接; FIN:第六个比特被置位,终止一个连接。 7、窗口大小:16 位,主要用于流量控制。窗口大小指明了自确认号指定的字节开 始接收方在必须停止传输并等待确认之前发送方可以接受的数据段的字节长度。 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 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 是一个简单的面向数据报的传输层协议,提供了一种无连接、尽力而为的数 据包转发服务。 。 17 UDP 数据报封装成 IP 数据包的格式如图 3.8 所示。 图 3.8 UDP 数据报封装 UDP 不提供可靠性:它并不保证数据能到达目的地。 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_header u_short sport;/源端口 16 比特 u_short dport;/目的端口 16 比特 u_short len;/数据报长度 16 比特 u_short crc;/校验和 16 比特 18 udp_header; 3.33.3小结小结 本章主要介绍了网络的体系结构及 MAC 帧头、IP、ICMP、TCP、UDP 协议的数 据报格式。通过网络的功能分层带来了网络协议的层次结构。数据在传输过程中,就 面临着数据的封装。协议数据单元在应用层、表示层和会话层被称作数据(Data),在传 输层被称作分段(Segment),在网络层被称作包(Packet),在数据链路层被称作帧(Frame), 在物理层被称作(bit)。在本系统网络协议分析中对数据报的分析就是一个对数据包进行 解封装的过程。 19 4 4局域网监听系统的设计及实现局域网监听系统的设计及实现 本程序设计所要求的运行环境如下: 软件环境:操作系统 WindowsXP; 底层驱动 WinPcap4.1.1; 编译环境 Visual C + 6.0; WinPcap 开发包 WpdPack4.1.1。 硬件环境:同一网段的局域网网络环境; 一台 PC; 一张以太网网卡。 图 4.1 是该系统所依赖的网络环境: 图 4.1 网络工作环境 4.14.1局域网监听系统的设计局域网监听系统的设计 4.1.1功能设计 该网络监听软件实现的主要功能可以概括为以下几点: 1、首先对经过主机的所有网络数据包进行截获,实现抓取数据包的目的。 2、然后把截获的数据包保存在用户指定的文件中。 3、加载在上一步中保存的数据包到软件,根据 TCP/IP 协议中各数据包的格式对 加载的数据包进行解包分析,获得数据包包头的相关信息(如 MAC 帧的源、目的地址, 20 TCP 的源、目的端口等信息) 。 4、实现对捕获数据的存储与加载,可以将捕获到的数据存储在磁盘上,以供分析 研究。也可以从磁盘上加载数据,进行协议分析。 5、对局域网内网络数据包流量的统计,以实现对网络性能的判断。 4.1.2模块设计 根据软件所需要实现的功能,将软件系统划分为以下几个主要模块:初始化模块, 数据包捕获模块,协议分析模块,数据包流量统计模块,存储、输出模块。如图 4.2 所 示: 图 4.2 监听系统模块示意图 初始化模块:初始化模块的主要功能是获得可用的网卡,设置用户选定的网卡的 工作模式为混杂模式;并且完成初始化以及启动 WinPcap 等工作。该模块完成数据包 监听的一系列准备工作。 数据包截获模块:该模块的功能是完成数据包的捕获,并将其存放到用户指定的 文件中。 协议分析模块:协议分析模块主要的功能是从用户指定的文件中加载截获的数据 包,并根据 TCP/IP 协议族中各种数据包的首部格式对以上加载的数据包进行协议分析, 从而获得数据包的源 MAC 地址,目的 MAC 地址,源 IP 地址,目的 IP 地址,源端口 号,目的端口号等等。其中,这里主要实现了对 TCP 包,UDP 包和 ICMP 包的分析。 21 数据包流量统计模块:对局域网内数据流量进行统计分析,以获得单位时间内局 域网数据包的总量、平均流量及各协议数据包的个数。 存储、输出(显示)模块:把协议分析模块分析和流量统计模块所得的 IP 地址信 息、端口信息、流量信息等各项内容在显示器上输出并把这些信息按照规定的格式写 到指定的文件中。 这样划分模块便于后期的程序实现。通过对各模块的设计有利于在后期的实现过 程中对各个功能的把握,这样能更优的实现网络数据包的截获,协议分析,数据包流 量的统计,以及数据的输出和保存。 图 4.3 是该系统的程序流程图,其与系统的功能模块相对应,以直观的方式将系统 流程表现出来,以便于编程过程中更好的实现网络监听系统。 图 4.3 监听系统的程序流程图 4.24.2局域网监听系统程序的实现局域网监听系统程序的实现 本监听程序可以分为两大部分:驱动程序部分和应用程序部分。驱动程序部分工 作在内核级,负责网络数据的接收和发送;应用程序部分工作在用户级,除了与驱动 程序进行正确的通讯外,还要将有关信息显示出来,并提供存盘,过滤等操作。缓冲 22 区由应用程序动态分配。在具体的实现过程中根据程序流程图将监听系统程序简化为 以下几个步骤。 4.2.1数据包的捕获 根据系统总体设计的思路,利用 WinPcap 的采集数据技术对底层数据进行捕获。 为了在 Windows 平台实现网络数据包的捕获功能,首先是把网卡设置成混杂模式,以 监听整个网段的数据。数据包捕获功能的实现是基于 WinPcap 所提供的 API 接口函数 实现的,它可以直接从链路层获取数据帧。进一步的分析、处理工作可交由数据分析 处理程序完成。 数据包捕获的实现步骤: 1、获得网络适配器列表并统计网卡个数: if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,d;d=d-next) m_nDeviceCount+; 2、打开网卡,将网卡设置成混杂模式: adhandle=pcap_open(d-name, /网卡名 65535, /数据包的捕获部分长度 PCAP_OPENFLAG_PROMISCUOUS, /混合模式 1 打开 0 关闭 1000,/读超时值 NULL, errbuf);/错误信息缓存区 if(adhandle=NULL) MessageBox(NULL,errbuf,“错误“,MB_OK); pcap_freealldevs(alldevs); return -1; 23 其中参数 1 用来设置网卡的工作模式。 3、开始捕获数据包 网卡的工作模式设置完毕,只需要调用捕捉函数 pcap_next_ex 来进行对数据包抓 取就可以实现截获数据包。在具体的实现过程中,通过建立一个捕获线程来实现数据 包的捕获,以减少在网络繁忙时,其数据流量超过计算机的数据处理速度而出现漏包 的情况。 while(res=pcap_next_ex(pthis-adhandle,imach.saddi=mach-saddi; pdata-mach.daddi=mach-daddi; pdata-mach.mac_type=mach-mac_type; /IP ih=(ip_header*)(pkt_data+14);/ip 头 int iplen=(ih-ver_ihl & 0xf)*4; pdata-iph.crc = ih-crc; 25 pdata-iph.daddr=ih-daddr; pdata-iph.flags_fo=ih-flags_fo; pdata-iph.identification=ih-identification; pdata-iph.op_pad=ih-op_pad; to=ih-proto; pdata-iph.saddr=ih-saddr; pdata-iph.tlen=ih-tlen; pdata-iph.tos=ih-tos; pdata-iph.ttl=ih-ttl; pdata-iph.ver_ihl=ih-ver_ihl; /TCP 或 UDP tcp_header* ptemp=NULL; udp_header* pudptemp=NULL; icmp_header* icmptemp=NULL; switch(ih-proto) case TCP_PROTO: /如果是 TCP tcph=(tcp_header*)(u_char*)ih + iplen); ptemp=new tcp_header; ptemp-an=tcph-an; ptemp-check_sum=tcph-check_sum; ptemp-dport=tcph-dport; ptemp-option=tcph-option; ptemp-other=tcph-other; ptemp-sn=tcph-sn; ptemp-sport=tcph-sport; ptemp-urgent_pointer=tcph-urgent_pointer; ptemp-window_size=tcph-window_size; pdata-pTCP_UDP =ptemp; 26 strcpy(pdata-strPacketType,“TCP“); break; case UDP_PROTO:/如果是 UDP udph=(udp_header*)(u_char*)ih + iplen); pudptemp=new udp_header; pudptemp-crc=udph-crc; pudptemp-dport=udph-dport; pudptemp-len=udph-len; pudptemp-sport=udph-sport; pdata-pTCP_UDP=pudptemp; strcpy(pdata-strPacketType,“UD

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论