网络嗅探技术探索与设计 毕业论文.doc_第1页
网络嗅探技术探索与设计 毕业论文.doc_第2页
网络嗅探技术探索与设计 毕业论文.doc_第3页
网络嗅探技术探索与设计 毕业论文.doc_第4页
网络嗅探技术探索与设计 毕业论文.doc_第5页
免费预览已结束,剩余31页可下载查看

下载本文档

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

文档简介

. . 装 订 线 . . . 山东农业大学 毕 业 论 文 题目: 网络嗅探技术探索与设计 院 部 信息科学与工程学院 专业班级 网络工程 2 班 届 次 2012 届 学生姓名 学 号 指导教师 二 一 二 年 六 月 五 日 网络嗅探器技术探索与设计网络嗅探器技术探索与设计 exploration and design of the network sniffer 专业 speciality 网络工程 network engineering 学生 undergraduate 指导教师 supervisor 山东农业大学 二一 二 年 六月 shandong agricultural university june, 2012 目目 录录 1 引言.1 1.1 课题背景1 1.2 网络安全现状2 1.3 开发意义3 2 关于网络嗅探4 2.1 网络嗅探概念.4 2.2 以太网嗅探的原理.4 2.3 winpcap 简介 6 3 系统概述.9 3.1 实现目标9 3.2 开发环境分析9 3.2.1 c+语言简介.9 3.2.2 开发工具简介.9 4 算法分析.11 4.1 各种类型报文对象的构造.11 4.2 过滤方法.12 5 详细设计与实现.14 5.1 网络协议的分析与实现.14 5.1.1 数据链路层14 5.1.2 网络层14 5.1.3 运输层19 5.2 数据包的捕获.22 5.3 数据包的分析.24 5.4 实现过程中的难点.26 5.5 嗅探程序运行截图.27 6 总结.30 参考文献.31 致谢.32 contents 1 introduction1 1.1 subject background.1 1.2 network security situation 2 1.3 development of meaning 3 2 network sniffer.4 2.1 the concept of network sniffer 4 2.2 ethernet sniffing the principle.4 2.3 winpcap profile.6 3 system overview9 3.1 goals9 3.2 analysis of development environment .9 3.2.1 c + + language profile9 3.2.2 development tool profile9 4 algorithm analysis .11 4.1 various types of packets the objects constructor11 4.2 filtering methods.12 5 detailed design and implementation14 5.1 analysis and implementation of network protocol.14 5.1.1 data link layer 14 5.1.2 network layer 14 5.1.3 transport layer .19 5.2 packet capture22 5.3 packet analysis.24 5.4 realize the difficulty in the process .26 5.5 sniffer program running screenshot.27 6 summary.30 references.31 acknowledgement.32 网络嗅探器技术探索与设计 2008 级计算机科学与技术 指导教师 【摘要摘要】随着计算机网络技术的迅速发展,网络的安全问题也显得越来越重要。网络监听技术 是很多网络安全软件实现的基础,也是设计网络分析软件的基础,所以研究相关的数据包嗅探 和分析技术对保证网络的安全运行是很有现实意义的。网络监听是一种监视网络状态、数据流 程以及网络上信息传输的软件管理工具,它可以将网络界面设定成监听模式,并且可以截获网 络上所传输的信息。数据包捕获技术是设计网络分析软件的基础,而 winpcap 则是 windows 系 统中实现的一个优秀的包捕获架构。文中结合该软件包的结构与功能对包捕获原理进行了详细 的分析,并介绍了其在网络安全监控系统中的应用。该系统的基本原理是通过调用 winpcap 库 捕获本地网络上的所有数据包,然后对数据包进行协议分析,从而可以实时地监控网络。 【关键词关键词】网络嗅探;winpcap;数据包捕获;协议分析 exploration and design of the network sniffer 【abstract】with the rapid development and extensive application of computer network technology, the security problem of network becomes more important. network sniffer is the base of many network safety softwares,and it is also the base of network analysis. so,the research of the sniffer and analysis of network is very helpful to the safety of the network. 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.packet capturing technology is the basis for designing 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 and find its problem and alarm automatically. the result from the application in lan also confirms that the system is steady and very effective. 【key words】network sniffer; winpcap; packet capture; protocol analysis 山东农业大学学士学位论文 1 1 引言 嗅探器是一种利用计算机网络接口监视网络数据运行,截获网络数据的工具, 可用于网络管理,网络协议分析以及网络安全等众多方面。在网络攻防技术中, 嗅探器技术是最为基础的一种技术。从攻方的角度,黑客可以利用嗅探器程序非 法获取网络中传输的大量敏感信息,如账号和口令等,对网络安全极具威胁;从 防守的角度,嗅探技术是基于网络的入侵检测系统的最底层环节,是整个系统的 数据来源。 1.1 课题背景 随着计算机网络技术的快速发展,网络己成为人们生活中的必备工具,计算 机网络在政治、经济、军事、社会生活等各个领域正发挥着日益重要的作用,人 们对计算机网络的依赖性也大大增强,一些网络新业务如电子商务、电子政务、 网络支付等,这些都对网络安全提出了较高的要求。但是由于计算机网络具有连 接形式多样性、开放性、互联性等特点, 而且多数都采用 tcp/tp 协议,而 tcp/tp 在设计上力求运行效率,并建立在相互信任的基础上,其本身就是造成网 络不安全的主要因素,这也是 tcp/tp 协议在设计上的缺陷,从而导致针对网络系 统的攻击事件频繁发生,所以网络安全已成为网络建设的一个非常重要的方面。 现在人们对计算机信息安全要求越来越高,随着计算机网络的资源共享进一步加 强,随之而来的网络安全问题使得计算机网络安全保护将会变得越来越重要。所 以当我们在享受网络所带来的方便和快捷的同时也要认识到网络安全所面临的严 峻考验。 网络监听是信息安全领域内一项非常重要和实用的技术,它的起源是网络管 理员为了诊断网络故障的需要,而监听网络中传输的数据信息。在网络管理和维 护中,网络管理和维护人员常常利用网络监听技术监控网络当前的信息状况、网 络流量,进行网络访问统计分析等等。更重要的是,可以发现网络中存在的漏洞 和隐患,提高网络和系统的安全性。但在实际应用中,网络监听技术往往被黑客 加以利用,用来窃取网络用户的机密资料。对于一般网站来说,被网络监听往往 意味着用户个人隐私资料的丢失;而对于金融机构,恶意的网络监听更会带来难 以弥补的金钱和信用损失。 在防范网络攻击方面,通过数据截取及分析输出结果可以捕获到透过防火墙 而进入网络的非法数据,成功的监视记录黑客的入侵过程,保障网络的安全。而 且数据截取和协议分析是入侵检测系统的重要部分,是入侵检测系统的最基础的 环节。因此网络监听无论是在网络攻击还是安全防御方面都扮演着重要的角色。 山东农业大学学士学位论文 2 1.2 网络安全现状 通过对国内外的文献调研发现,网络嗅探中的数据包捕获主要可以分为两种 方式 ,一种是基于操作系统内核的,如 unix、linux 系统,它们系统内核本身就 提供包捕获机制;第二种就是基于外界提供的驱动程序库,如 unix 下的 libpcap 和 windows 下的 winpcap。 由操作系统内核提供的捕获机制主要有以下四种:bpf(berkeley packet filter), dlpi(data link provider internet interface),nit(network interface tap), sockpacket 套接口。其中 bpf 由基于 bsd 的 unix 系统内核所实现,而 dlpi 是 solaris 系统的子系统,对于 nit 则是 sunos4 系统的一部分,但在 solaris 系统中已经被 dlpi 取代,linux 系统内核则实现了 sock packet 的包捕获机制。 从性能上看,bpf 比 dlpi 及 nit 效率要高的多,而 sock packet 最差。 winpcap 是一个基于 win32 的开源的包捕获驱动架构,它弥补了 windows 系 统内核本身提供很少包捕获接口的劣势,可以直接捕获到链路层的数据帧。基于 winpcap 开发的监听程序具有很好的可移植性,可以很容易的移植到 unix 系统上, 所以在 windows 系统上基于 winpcap 来开发嗅探软件是一种很好的选择。 网络嗅探技术的出现已经有较长一段时间了,因为 unix 类系统内核提供了对 网络嗅探很好的支持,而 windows 内核却没有,导致 unix 类系统下的网络嗅探产 品比 windows 下的多。现在已经有一些 unix 下的嗅探器被移植到了 windows 下, 目前比较流行的网络嗅探器有: (1)sniffit:由lawrence berkeley实验室开发,运行于solaris、sgi和linux等 平台。可以选择源、目标地址或地址集合,还可选择监听的端口,协议和网络接 口等。 (2)netxray:在windows9x和windowsnt上,netxray是一个功能强大、 使用方便的协议分析和网络监控工具。它是一个优秀的软件,能监控多个网段, 并且允许多监控实例存在,同时还能捕捉所需要的任何类型的报文。使用netxray 还可以设置许多过滤条件,而且其操作界面也比较漂亮。 (3)winpcap:winpcap是由伯克利分组捕获库派生而来的分组捕获库,它是 在windows 操作平台上来实现对底层包的截取过滤。winpcap为用户级的数据包 提供了windows下的一个平台。 目前使用的最多的是sniffit、winpcap监听软件,由于在unix和linux系统中, 发送这些命令需要超级用户的权限,这一点限制了在unix系统中的使用,普通用 户是不能进行网络监听的,只有获得超级用户权限,才能进行网络监听,而在 windows操作系统中,则没有这个限制,只要运行这一类的监听软件即可;目前网 络数据捕获器大多数是基于过滤器技术来实现的,大多数的过滤程序都是建立在 伯克利实验室的libpcap基础之上的。因此本文涉及的是在以太网环境下并在 山东农业大学学士学位论文 3 windows操作系统中,使用数据捕获器winpcap这一软件实现对底层数据进行监听。 由监听技术发展的现状来看,目前主流的网络监听工具软件几乎都是国外生 产的软件。随着中国信息技术的发展,监听系统必将大有用武之地,因此监听技 术的研究势在必行。 1.3 开发意义 本次设计只是对抓取到的本机在网络中的通信数据,比如说协议类型,源、目 的地址和端口、数据包的大小等加以分析,而无法做到像 sniffer 那种成熟的嗅探 器所拥有的强大功能。作为从事网络技术方面的人员来说,要想有效地利用它、 防范它,就得深入地学习、分析网络嗅探技术。最为重要的是,对于网络嗅探器 的设计与实现,使我对网络通信,数据传输和网络信息安全等有了切身的体会与 融入,学以致用,是不断提高自我的一种有效途径。 山东农业大学学士学位论文 4 2 关于网络嗅探 2.1 网络嗅探概念 网络嗅探器又称为网络监听器,简称为 sniffer 子系统,放置于网络节点处, 对网络中的数据帧进行捕获的一种被动监听手段,是一种常用的收集有用数据的 方法,这些数据可以是用户的账号和密码,可以是一些商用机密数据等等。 在应用中,程序员可以使用嗅探器来监视网络程序的运行状态;网络管理员 可以利用网络嗅探器获取网络的当前流量状况;而黑客们常利用 sniffer 技术来截 获用户的口令。当信息以明文的形式在网络上传输时,便可以使用网络嗅探的方 式来进行攻击。将网络接口设置在混杂模式,便可以源源不断地将网上传输的信 息截获。 网络嗅探可以在网上的任何一个位置实施,如局域网中的一台主机、网关或 远程网的调制解调器之间等。黑客用得最多的是截获用户的口令。当黑客成功地 登录进一台网络上的主机,并取得了该主机的超级用户权限后,往往要扩大战果, 尝试登录或者夺取网络中其他主机的控制权。而网络嗅探则是一种最简单且最有 效的方法,能轻易地获得用其他方法很难获得的信息。 在网络上,嗅探效果最好的地方是在网关、路由器一类的设备处,通常由网 络管理员来操作。使用最方便的是在一个以太网中的任何一台上网的主机上,这 也是大多数黑客的做法。 2.2 以太网嗅探的原理 以太网(ethernet)具有共享介质的特性,信息在网络中以明文的形式传输, 当网络适配器设置为混杂模式(promiscuous)时,以太网共享介质和广播信道争 用的方式,使得监听系统与正常通信的网络能够并联连接,以太网适配器只要 “听到”有帧在以太网上传输就都悄悄地接收下来,而不管这些帧是发往哪个站。 这样做实际上是“窃听”其他站点的通信而并不中断其他站点的通信。ieee802.3 标准的以太网采用的是持续 csma 的方式,正是由于以太网采用这种广播信道争 用的方式,使得各个站点都可以获得其他站点发送的数据。运用这一原理使得信 息捕获系统能够拦截我们所要的信息,这是捕获数据包的物理基础。 以太网是一种总线型的网络,从逻辑上来看是由一条总线和多个连接在总线 上的站点所组成的,各个站点采用上面提到的 csma/cd 协议进行信道的争夺和 共享。由每个站点网卡来实现这种功能。网卡主要的工作是完成对于总线当前状 态的探测,确定是否进行数据的传送,判断每个物理数据帧目的地是否为本站地 山东农业大学学士学位论文 5 址,如果不匹配,则说明不是发送到本站的而将它丢弃。如果是为本地地址,就 接收该数据帧,进行物理数据帧的 crc 校验,然后将数据帧提交给 llc 子层。 传输层 网络层 物理层 链路层 合法端口号 合法 ip 地址 合法 mac 地址 yes yes yes no no no 丢弃 丢弃 丢弃 数据包 图图 2-12-1 正常的数据包过滤机制正常的数据包过滤机制 网卡一般有四种接收数据帧的状态: 单一模式(unicast):是指网卡在工作时,只接收数据帧中目的地址是本机 mac 地址的数据帧。 广播模式(broadcast):该模式下的网卡能够接收网络中的广播信息。 组播模式(multicast):设置在该模式下的网卡能够接收同一组的播数据。 混杂模式(promiscuous):在这种模式下的网卡能够接收一切通过它的数据,而 不管该数据是否是传给它的。 网卡的缺省工作模式包含广播模式和单一模式,即它只接收广播帧和发给自 己的帧。如果采用混杂模式,一个站点的网卡将接收同一个网络内所有站点所发 送的数据包,这样就能达到对于网络嗅探的目的。 山东农业大学学士学位论文 6 非混杂模 式 其他硬 件 地址 混杂模式 地址匹配 数据包 数据包 mac 地址 本地接口硬件地址 产生中断 通知 cpu 接口配置模 式 产生中断 通知 cpu 不处理, 丢弃 图图 2-22-2 网卡模式图解网卡模式图解 2.3 winpcap 简介 winpcap 是由意大利的 fulvio risso 和 loris degioanni 等人实现的应用于 win32 平台数据包捕获与分析的一种驱动软件包,并提供了在 windows 操作系统 下的开放源代码,是一套高性能 api 封装库,有一套标准的抓包接口专门用于网 络数据包的截获,并在其基础上增加了自定义数据包的发送能力以及针对 win32 平台的扩展函数,独立于 windows 操作系统的协议栈。 winpcap 为 win32 平台提供了一个公共的接口 packetdll,使得程序可以运 行在不同版本的 windows 平台上,而无需重新编译。另外,winpcap 的标准抓包 接口与 libpcap 兼容,使系统便于向 unixlinux 平台移植。winpcap 的主要功能 在于独立于主机协议如 tcp/ip 协议发送和接收原始数据包,也就是说,winpcap 不能阻塞、过滤或控制其他应用程序对数据报的收发,它只是绕过系统原有的协 议栈监听网络上传送的数据包。因此它不能用于 qos(quality of service)调度程序 或个人防火墙。winpcap 有以下几方面的功能: (1)捕获原始数据包,无论它是发往某台机器的,还是在其他设备(共享媒介) 上进行交换的。 (2)在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤 掉。 (3)将原始数据包通过网络发送出去。 山东农业大学学士学位论文 7 (4)收集并统计网络流量信息。 winpcap 的基本结构沿用了 bpf( berkeley packet filter,伯克利数据包过滤器) 几个最重要的模块:过滤器,内核级和用户级的缓存,用户级上的两种库。 winpcap 的结构主要包括三部分: (1) 内核级的网络组包过滤器(npf) 在内核级的部分即 npf 是一个经过优化的内核模式驱动器,用于对数据包进 行过滤,并将这些数据包原封不动地传给用户级模块,在这个过程中包括了一些 操作系统特有的代码,如时间戳、数据包长度等信息。 (2) 数据包低级驱动程序库(packet.dll) 数据包驱动程序库是与 libpcap 相兼容的一组用户级的函数库。packet.dll 用 于在 win32 平台上为数据包驱动程序提供一个公共的接口。由于不同的 windows 系统都有自己的内核模块和用户层模块,而 packet.dll 可以解决这些不同,提供一 个与系统无关的 api。基于 packet.dll 开发的数据包截获程序可以运行于不同的 win32 平台而不必重新进行编译。packet.dll 还有几个附加功能,它可用来取得适 配器名称、动态驱动器加载以及获得主机掩码及以太网冲突次数等。 (3) 数据包高级驱动程序库(wpcap.dll) wpcap.dll 含有诸如产生过滤器、用户级缓冲以及包注入等高级功能。编程人 员既可以使用包含在 packet.dll 中的低级函数直接进入内核级调用,也可以使用由 wpcap.dll 提供的高级函数调用。wpcap.dll 的函数调用会自动调用 packet.dll 中的低 级函数,并可能被转换成若干个 npf 系统调用。 winpcap 的 api 函数直接从数据链路层获取数据帧,即 mac 帧。根据网络协 议的规定,对 mac 帧层层分析,可以获得网络上所传输的数据内容。 整个包捕获架构的基础是 ndis(网络驱动器接口规范),它是 windows 中最低端的 与连网有关的软件,主要是为各种应用协议与网卡之间提供一套接口函数,包驱 动器的 tap 函数就是通过调用这些函数实现其数据采集功能的。 以上内容详细介绍了网络嗅探的原理等。嗅探软件可以监听局域网中传输的 数据包是因为以太网是总线型网,而且在以太网中主机进行数据传输时采用子网 广播的方式。任何一台主机发送的数据包,都会在所经过的子网中进行广播。正 常情况下,主机只接收属于自己的数据包,不与其它主机发生混乱,这是计算机 中的网卡工作的结果。将网卡的接收模式进行适当改变就可以改变网卡的过滤策 略,使网卡能够接收经过本网段的所有数据包,无论这些数据包的目的地址是否 是该主机。可通过调用 winpcap 的 api 函数来改变网卡的工作模式进而截获数据 包。而且,根据网络数据过滤机制的原理,在截获数据包之前还可对数据包进行 过滤,实现截获管理员感兴趣的数据的目的。 山东农业大学学士学位论文 8 3 系统概述 3.1 实现目标 (1)利用 mfc 设计完成网络嗅探器的界面,基本要求界面简洁、易操作。 (2)实现抓取数据包的功能,并能对数据包进行简单的分析如区分所获数据包 的类型、大小、源地址及目的地址等。 (3)实现过滤功能如选择只抓取 tcp、ucp、icmp,并显示数据包的内容以及 解析树。 (4)实现暂停抓取数据包功能。 (5)实现清空列表以及退出的功能。 3.2 开发环境分析 3.2.1 c+语言简介 美国 at else df=false; 其中 pos 为 unsigned char*,指向当前字节,而 df 为该字节中右起第 3 位。 2)对于大于一个字节的字段,需要进行大数端到小数端的转换。因为网络中 传输是按大数段(高位在低地址处) ,而本地机器中则相反,按小数端(地位在低 地址处) 。 如:totallen=(*pos)*256+(*(pos+1); total 为双字节,pos 指针开始时指向低地址,乘 256 是完成大数端到小数端的 转换。 4.2 过滤方法 每次抓到一个数据包,会提交其信息,现将缓冲区前 14 个字节读入,按以太 帧格式构造以太帧头部的对象。然后根据设置的过滤机制判断所获数据包是否符 合要求,如满足要求继续进行下一步分析(例如过滤 tcp、udp、icmp 等信息) , 否则丢弃。算法流程如下图 4-2 所示: 山东农业大学学士学位论文 12 图图 4-24-2 过滤流程过滤流程 type为以太帧承载 的网络层协议类型 type值? 是否侦听 arp? 是否侦听 rarp? 是否侦听 ip? ip的 protocol? 是否侦听 tcp? 是否侦听 udp? 是否侦听 icmp? 地址是否符 合条件? return true; arprarp ip yes udp tcp icmp yes yes yes yes no return false no return false no return false no return false no return false no return false no return false yes yes 山东农业大学学士学位论文 13 5 详细设计与实现 本监听程序可以分为两大部分:驱动程序部分和应用程序部分。驱动程序部 分工作在核心态,负责网络数据的接收和发送;应用程序部分工作在用户态,除 了与驱动程序进行正确的通讯外,还要将有关信息显示出来,其中包括简要的分 析等操作。缓冲区由应用程序动态分配。 5.1 网络协议的分析与实现 5.1.1 数据链路层 在数据链路层中分离出来的数据帧,并从帧头中得到源 mac 地址、目标 mac 地址以及数据内容所用的协议。 图图 3-13-1 以太网帧的封装格式(以太网帧的封装格式(rfcrfc 894894) 在 tcp/ip 协议框架下,以太网 ip 数据报的封装(如图 3-1 所示)是在 rfc894hornig 1984中定义的。以太网帧由一个包含三个字段的帧头开始,前两 个字段包含了目的地址和源地址,各六个字节,头部的第三个字段包含了 16 位的 以太帧类型,帧后面是数据区。根据帧类型可以判断是哪种数据报,一般常用的 有 0x0080(ip 数据报) 、0x0806(arp 请求/应答) 、0x0835(rarp 请求/应答)三 种类型。 以太帧头部: class etherhead int srcaddr6;/ 源硬件地址 int destaddr6;/目的硬件地址 int type;/承载的网络层协议类型:ip,arp,rarp ; 5.1.2 网络层 网际协议 ip 协议是 tcp/ip 协议体系中两个最主要的协议之一,也是最重要 的因特网标准协议之一。tcp/ip 协议中传输数据的基本单位为 ip 数据报,ip 数 目的地址源地址crc数据类型 664 461500 2 山东农业大学学士学位论文 14 据报的格式能够说明 ip 协议都具有什么功能。由首部和数据两部分组成。首部的 前一部分是固定长度,共 20 字节,是所有 ip 数据报必须具有的。在首部的固定 部分的后面是一些可选字段,其长度是可变的。首都中的源地址和目的地址都是 ip 协议地址。其详细结构描述如图 3-2 所示。 1)版本:占 4 位,指 ip 协议的版本。通信双方使用的 ip 协议版本必须一致。 日前广泛使用的 ip 协议版本号为 4 (即 ipv4)。ipv6 目前还处于起步阶段。 2)首部长度:4 位,确定 ip 数据包首部字段的长度,基本单位为 4 字节,最 常用的首部长度是 20 个字节。 3)区分服务:8 位,用来获得更好的服务。在一般情况下都不使用这个字段。 4)总长度:16 位,指首部和数据之和的长度,是 ip 首部中必要的内容,单 位为字节。总长度字段为 16 位,所以 ip 数据报最大长度为 65535 字节。 5)标识:16 位,唯一标识主机发送的每一个数据报,并且每发送一次数据包 该字段值自动加 1。通过它可以唯一确定一个数据包是哪个进程发送,对同一个主 机的多个应用程序就可以区分开来。 图图 3-23-2 ipip 数据报格式及首部中的各字段数据报格式及首部中的各字段 6)标志:3 位,最低位记为第一位为 mf 。mf=1 即表示后面“还有分片”的 山东农业大学学士学位论文 15 数据。mf=0 表示这已是若干数据报片中的最后一个。中间的一位记为 df,即“不 能分片” 。只有当 df=0 时才允许分片。 7)ttl(time-to-live)生存时间字段:8 位,设置了数据报可以经过多少路 由器数。它表明了数据报在网络中的寿命。最初的设计是以秒作为 ttl 值的单位。 每经过一个路由器时,就把 ttl 减去数据报在路由器所消耗掉的一段时间。若数 据包在路由器消耗的时间小于 1 秒,就把 ttl 值减 1.当 ttl 值减为零时,就丢弃 这个数据报。 8)协议:8 位,指出此数据报所携带的数据是使用何种协议,以便使目的主 机的 ip 层知道应将数据部分上交给哪个处理过程。取值:1 表示为 icmp 协议,2 表示为 igmp 协,6 表示为 tcp 协议,17 表示为 udp 协议 9)首部检验和:16 位,是根据 ip 首部计算的检验和码。它不对首部后面的 数据进行计算。 10)源地址:占 32 位。 11)目的地址:占 32 位。 12)任选项:ip 首都的可变部分就是一个可选字段。选项字段用来支持排错、 测量以及安全等措施,内容很丰富。此字段的长度可变,从 1 个字节到 40 个字 节不等,取决于所选择的项目。某些选项只需要 1 个字节,它只包括 1 个字节 的选项代码。但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需 要有分隔符,最后用全 0 的填充字段补齐成为 4 字节的整数倍。增加首都的可变 部分是为了增加 ip 数据报的功能,但这同时也使得 ip 数据报的首部长度成为 可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使 用。新的 ipv6 就将 ip 数据报的首部长度做成固定的。 实现过程中 ip 数据报报头的数据结构如下: /定义 ip 头 ip 数据包=ip 头tcp 数据段(或 udp 数据段) class ipgram int version; /ip 版本 int ihl; /ip 报文头长,包含多少个 32 位 int servicetype;/服务类型 int precedence;/优先级 bool delay; /延迟 bool throughtput;/吞吐量 bool reliability;/可靠性 unsigned int totallen; /ip 报文总长 int identification;/标识 山东农业大学学士学位论文 16 bool df;/是否分段,为 1 表示没有分段 bool mf;/是否有进一步分段,为 1 表示有 int fragoffset;/偏移量 int ttl;/生命期 time to live int protocol; /协议:tcp,udp,icmp unsigned int checksum;/校验和 long srcaddr;/源 ip 地址 long destaddr;/目的 ip 地址 int optlen;/ip 选项长度 unsigned char *options;/选项内容 int datalen; /数据长度 unsigned char *data; /数据内容 ; icmp 经常被认为是 ip 层的一个组成部分。它传递差错报文以及其他需要注 意的信息 。 icmp 报文是在 ip 数据报内部被传输的,如图 3-3 所示。 图图 3-33-3 icmpicmp 封装在封装在 ipip 数据报内部数据报内部 icmp 报文的格式如图 3-4 所示。 078 1516 31 8 位类型8 位代码 16 位检验和 (不同类型和代码有不同的内容) 图图 3-43-4 icmpicmp 数据报格式及首部中的各字段首部数据报格式及首部中的各字段首部 icmp 报文的种类有两种:icmp 差错报文和 icmp 询问报文。 icmp 报文的前 4 个字节是统一的格式,共有三个字段:类型、代码、检验和。 ip 首部icmp 报文 ip 数据报 20 字节 山东农业大学学士学位论文 17 1)类型:8 位,可以有 15 个不同的值,以描述特定类型的 icmp 报文。 2)代码:8 位,是为了进一步区分某种类型中的几种不同的情况。 3)检验和:16 位,检验和字段覆盖了整个 icmp 报文。 class icmpgram int type;/类型 int code;/代号 int checksum;/校验和 int datalen;/数据长度 unsigned char *data;/数据内容 /以下不是所有 icmp 报文都具有的 unsigned int gatewayaddr;/网关地址 unsigned int identification;/标识 unsigned int sequence;/顺序号 unsigned int inittime;/初始时间 unsigned int receivetime;/接收时间 unsigned int sendtime;/发送时间 unsigned int addrmask;/地址掩码 ; 5.1.3 运输层 运输层主要是为两台主机上的应用程序提供端到端的逻辑通信。在 tcp/ip 协 议中,有两个互不相同的传输协议:面向连接的 tcp(传输控制协议)和无连接的 udp(用户数据报协议) 。 tcp(传输控制协议)是专门设计用于在不可靠的网络上提供可靠的、端到端 的字节流通信的协议。一个 tcp 报文段分为首部和数据两部分。tcp 的全部功能都 体现在它首部中各个字段的作用。因此,只有弄清楚 tcp 首部各字段的作用才能 掌握 tcp 的工作原理。tcp 协议的首部字段如图 3-5 所示。 山东农业大学学士学位论文 18 图图 3-53-5 tcptcp 数据报格式及首部中的各字段数据报格式及首部中的各字段 tcp 报文段首部的前 20 个字节是固定的,后面有 4n 字节是根据需要而增加的 选项(n 必须是整数) 。因此 tcp 首部的最小长度是 20 字节。 首部固定部分各字段的意义如下: 1)源端口和目的端口:各占 2 个字节。端口是运输层与应用层的服务接口。 这两个值加上 ip 首部中的源端 ip 地址和目的端的 ip 地址唯一确定一个 tcp 连接。 2)序号:32 位,标识从 tcp 发送端向 tcp 接收端发送的数据字节流,它表 示在这个报文段中的第一个数据字节。序号是 32 bit 的无符号数,序号到达 232- 1 后又从 0 开始。 3)确认号:32位,是期望受到对方的下一个报文段的数据的第一个字节的序 号,也就是期望收到的下一个报文段首部的序号字段的值。顺序号标志本分组的 编号,确认号指示希望接受的下一个分组编号。 4)首部长度:4 位,表示 tcp 报文段首部的长度。这条信息对于定位确切的 数据信息十分重要,因为任选字段的长度是可变的。这个字段占 4bit,因此 tcp 最多有 60 字节的首部。然而,没有任选字段,正常的长度是 20 字节。 5)保留:6 位,保留为今后使用,但当前应置为 0。 6)标志位:在 tcp 首部中有 6 个标志比特。它们中的多个可同时被设置为 山东农业大学学士学位论文 19 1。 7)窗口大小:16 位,tcp 的流量控制由连接的每一端通过声明的窗口大小来 提供。窗口的大小为字节书,起始于确认序号字段指明的值,这个值是接收端正 期望接收的字节。窗口大小是一个 16bit 字段,因而窗口大小最大为 65535 字节。 8)检验和:16 位,检验和覆盖了整个的 tcp 报文段。 9)紧急指针:16 位,只有当 urg 标志置 1 时紧急指针才有效。紧急指针是一 个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。 10)选项:长度可变。最常见的可选字段是最长报文大小,又称为 mss(maximun segment size) 。它指明本端所能接收的最大长度的报文段。 / 定义 tcp 首部格式 class tcpgram int srcport;/源端口号 int destport; /目的端口号 unsigned int seqnum; /顺序号 unsigned int acknum;/确认好 int headlen; /tcp 报文头长,包含多少个 32 位 bool urg;/为 1 表示使用紧急指针 bool ack;/为 1 表示确认合法 bool psh;/带 push 标志数据 bool rst;/用于主机崩溃或其他原因后的复位 bool syn;/用于建立连接 bool fin;/用于释放连接 int windowsize; /窗口大小 int checksum;/校验和 int urgpos;/紧急指针,从当前顺序号到紧急位置的偏移量 int optlen;/tcp 选项长度 unsigned char *options; /选项内容 int datalen; /数据长度 unsigned char *data; /数据内容 ; / 定义 tcp 首部格式 udp 是一个简单的面向报文的运输层协议:进程的每个输出操作都正好产生一 个 udp 数据报,并组装成一份待发送的 ip 数据报。 山东农业大学学士学位论文 20 udp 数据报封装成一份 ip 数据报的格式如图 3-6 所示。 ip 首部 udp 首部udp 数据 20 字节8 字节 udp 报文段 ip 数据报 图图 3-63-6 udpudp 数据报封装数据报封装 udp 不提供可靠性:它把应用程序传给 ip 层的数据发送出去,但是并不保证 它们能到达目的地。 udp 首部的各字段如图 3-7 所示。 图图 3-73-7 udpudp 数据报格式及首部中的各字段数据报格式及首部中的各字段 1)源端口和目的端口号:各 16 位,表示发送进程和接收进程。 2)udp 长度字段:16 位,指的是 udp 首部和 udp 数据的字节长度。该字 段最小值为 8 字节。ip 数据报长度指的是数据报全长(如图 3-9) ,因此 udp 数 据报长度是全长减去 ip 首部的长度。 3)udp 检验和:16 位,udp 检验和覆盖 udp 首部和 udp 数据。 class udpgram 16 位源端口号 16 位 udp 长度 16 位目的端口号 16 位 udp 检验和 数据(若有) 0 1516 31 8 字节 山东农业大学学士学位论文 21 unsigned int srcport;/源端口号 unsigned int destport;/目的端口号 int totallen;/udp 报文总长 int checksum;/校验和 unsigned int datalen;/数据长度 char *data;/数据内容 5.2 数据包的捕获 根据系统总体设计的思路,利用 winpcap 的采集数据技术对底层数据进行捕 获。为了在 windows 平台实现网络数据包的捕获功能,首先是把网卡设置成混杂 模式,以监听整个网段的数据。数据包捕获功能的实现是基于 winpcap 所提供的 api 接口函数实现的,它可以直接从链路层获取数据帧。进一步的分析、处理工作 可交由数据分析处理程序完成。 (1)将网卡设置成混杂模式: 首先查询到本机配置的所有网卡(包括虚拟网卡)利用函数pcap_findalldevs(); ,其次找到所选择的网卡(双击产生的) ,最后先是所选网卡信息(包括网卡名字, mac 地址,子网掩码,ip 地址等) ,并将此网卡设置为混合模式。设置网卡的主要 代码取下: bool cdlgadp:oninitdialog() htreeitem root = m_treectrl.insertitem(_t(“网卡信息“); if(alldevs=null)/查找所有网卡 if (pcap_findalldevs( adhandle=pcap_open(d-name, /网络设备名 65535, /数据包的捕获部分长度 pcap_openflag_promiscuous, /混合模式 1 打开混合模式 0 关闭混合模式 1000,/读超时值 null, errbuf);/错误信息缓存区 if(adhandle=null) 山东农业大学学士学位论文 22 messagebox(null,errbuf,“错误“,mb_ok); pcap_freealldevs(alldevs); return -1; 其中参数 1 用来设置网卡的工作模式。 (2)进行数据包类型过滤 根据过滤算法实现对报文类型、ip 地址以及传输方向等进行有效过滤。 void cdlgflt:onselchangedflttree(nmhdr* pnmhdr, lresult* presult) / 响应用户对 type 筛选 nm_treeview*pnmtreeview=(nm_treeview*)pnmhdr; htreeitem h=pnmtreeview-itemnew.hitem; if(h=tcp)/对 tcp 数据包过滤 typetype_tcp=!typetype_tcp; int icon=typetype_tcp?1:0; m_tree.setitemimage(h,icon,icon); else if(h=udp) /对 udp 数据包过滤 typetype_udp=!typetype_udp; int icon=typetype_udp?1:0; m_tree.setitemimage(h,icon,icon); *presult = 0; (3)开始捕获数据包 网卡的工作模式设置完毕,只需要调用捕捉函数 pcap 来进行对数据包

温馨提示

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

评论

0/150

提交评论