数据包包头协议解析器——毕业论文_第1页
数据包包头协议解析器——毕业论文_第2页
数据包包头协议解析器——毕业论文_第3页
数据包包头协议解析器——毕业论文_第4页
数据包包头协议解析器——毕业论文_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

北京信息科技大学 毕毕业业设设计计 (论论文文) 题题 目:目: 数据包包头协议解析器 学学 院:院: 信息与通信工程学院 专专 业:业: 电子信息工程 学生姓名:学生姓名: 班级班级/学号学号 指导老师指导老师/督导老师:督导老师: 起止时间:起止时间: 摘要 II 摘摘 要要 从网络中获取正在传输的数据流,对网络数据包进行捕捉和分析,这一类技术几乎是现有 阶段网络安全技术的实现基础,同时能够有效预防网络入侵危害,实施网络入侵检测;现有的 网络分析软件也是基于从网络中抓取数据包进行解析这一基础而设计的。我们现有的技术,例 如入侵监测、防火墙、网络安全扫描、包头协议分析等这一系列的功能实现都是以对数据包的 捕获与分析为前提的,那么我们通过深入的分析所捕获到的数据包,从而可以测算出当前网络 中的流量情况,观察和研究目标网络的状态以及在当前网络上传输着什么样信息等,从而我们 可以分析当前的网络性能怎么样、排除网络中存在着的故障的阻碍因素又是什么。所以,研究 对于网络中的数据包进行捕获与分析的技术对于保障网络安全来说是非常重要的,也是有意义 的一项工作。 在本次的毕设项目中,将依托一系列的开发环境和开发工具,设计并制作完成一个基于网 卡的数据包包头协议解析软件,软件将实现对流经网卡的数据包进行捕获和分析,并能够对所 捕获和分析后的数据进行导出保存,以便后续由专业人士对当前的网络状态进行研究判定,从 而实现我们对当前的网络状态进行监控的目的,进而保证我们的网络安全、无危害。 关键词关键词:数据包捕获,包头协议解析,网络安全,WinpCap Abstract III Abstract From the network to obtain the data stream being transmitted, the network packet capture and analysis, this type of technology is almost the existing stage of network security technology to achieve the basis of the same time to effectively prevent network intrusion hazards, the implementation of network intrusion detection; existing Of the network analysis software is based on the data packet from the network to analyze the basis of this design. We have some of the existing technology intrusion detection, firewall, network security scanning, packet header protocol analysis, etc. This series of functional implementations are based on the capture and analysis of the premise of the packet, then we through the in-depth analysis to capture the Data packets, which can be measured in the current network traffic situation, observe and study the status of the target network and what kind of information transmitted on the current network, so that we can analyze the current network performance how to exclude the existence of the network What are the obstacles to the failure? Therefore, the study of the network for the data packet capture and analysis of the technology for the protection of network security is very important, but also a meaningful work. In this project, will rely on a series of development environment and development tools, design and production of a network card based packet header protocol analysis software, the software will be carried out through the network card to capture and analyze the data packets, and Can capture and analyze the data after the export and preservation, so that the follow-up by the professionals on the current state of the network to determine the study, in order to achieve our current state of the network monitoring purposes, and thus to ensure that our network security, no harm. Keywords: Network packet capture, The packet analysis, Network security,Winpcap 目录 IV 目录目录 摘摘 要要.II ABSTRACT.III 第一章第一章 概述概述 .1 1.1 数据包解析技术 1 1.2 基于 WINPCAP实现数据包解析 .2 1.2.1 Winpcap .2 1.2.2 Winpcap 捕获和解析数据包 3 1.3 小结 4 2.1 功能需求 5 2.2 性能需求 5 2.3 可行性分析 6 2.3.1 经济可行性 6 2.3.2 技术可行性 6 2.4 本章小结 6 第三章第三章 系统设计系统设计7 3.1 设计原则7 3.2 总体架构7 3.3 系统主流程7 3.3.1 数据包捕获模块 .8 3.3.2 数据包解析模块 .9 3.4 小结9 第四章第四章 系统实现系统实现10 4.1 驱动获取10 4.2 捕获数据初始化11 4.3 数据包与解析捕获13 4.4 数据包保存与读取18 4.5 数据包流量分析19 4.6 小结20 第五章第五章 系统效果系统效果21 5.1 系统功能截图21 5.1.1 系统主页面 .21 5.1.2 选择网卡 .21 5.1.3 数据包过滤 .21 目录 V 5.1.4 数据包捕获和解析 .22 5.2 小结22 第六章第六章 总结与展望总结与展望 23 6.1 总结23 6.2 展望 23 结束语结束语.24 数据包包头协议解析器 1 第一章第一章 概述概述 互联网已经逐渐取代了以往的信息传送方式,人类文明数千年来的传承与不断迸发出的新 思想、新知识,在互联网上我们可以一目了然,互联网俨然成为了人类的第二世界,那么与此 同时,我们的这个“第二世界”的安全性和可靠性就显得越发的重要。因此,社会对能够分析、 诊断网络,测试网络性能与安全的工具软件的需求也越来越迫切,这就为基于 Winpcap 的网络 数据包的捕获和解析的产生和发展提供了良好的条件。其可以开发一套基于网络数据包的捕获 与解析的数据包解析器 。那么,对我们所使用的网络中“流动”的数据包进行捕捉获取并进行 进一步的深层系的分析,这是有效预防网络威胁侵入的核心措施,那么同时也是设计和实现网 络分析软件的必要基础,我们现有的一些网络技术,像防火墙、入侵监测、安全扫描、协议分 析等一系列功能的实现,全部都是通过监测网络流量、数据包,对其进行捕获,通过进一步的 深入分析,从数据层面上解析所捕获到的数据包,我们可以得到当前网络中的数据信息,观察 网络运行状态等信息,来分析是否有具有威胁的攻击行为、了解当前的网络的性能以及排除网 络中存在故障问题。通过本次的毕业设计,搭建设计所需的开发环境,学习和制作数据包解析 器,对数据包包头进行解析从而实现对网络流量信息的一个抓取和基本掌握。 1.11.1 数据包解析技术数据包解析技术 随着计算机技术的一个不断的发展,在量子计算机、生物计算机等超前应用还处于研究之 中,而没有商业化的时代,二进制的比特流依然是我们当前社会进行信息存储以及传递的基础, 并且,伴随着物联网技术的发展,我们可以看到“万物联于一网”的时代即将到来,这将极大 的丰富人们的生活方式,甚至钱币都将去实物化,化为一个个“0”和“1” ,我们可以从比特币 中窥探到未来货币的影子。但是与此伴随的,是日益多发的网络安全问题,正如当前的 “Wanacry” ,基于 windows 的漏洞对整个互联网体系造成了沉重的打击,无论是大到政府机构、 国营企业,还是 windows 个人用户,通过蠕虫病毒完成快速传播,加密用户文件资料,以此勒 索比特币实现其利益需求,对于公共服务行业造成了极大的影响。因此,对于信息安全的防护 越来越受到重视。良好的网络环境是一个公司,一个企业,乃至一个政府部门正常开展工作的 基础,而良好的网络环境必定包括通畅的网路信号传输,完善的网络安全机制两方面,这个项 目正是在这个基础上建立的。该项目将完成一个网络数据包的捕获和解析的工具的制作,这款 软件将实现一系列功能如对网络进行必要的分析以便为网络管理提供客观有效的参数,与此同 时,它还能够对当前所处网络的数据流进行捕获和分析,从而能够达到对网络状态进行监控的 目的,进而保障我们的用网安全、保障个人信息和重要资料的安全性。 数据包包头协议解析器 2 1.21.2 基于基于 WinPcapWinPcap 实现数据包解析实现数据包解析 .1 WinpcapWinpcap Windows 平台下内核本身没有提供直接访问数据包的标准 API 接口,需要通过增加一 个驱动程序或者网络组件来访问内核网卡驱动提供的数据包。Winpcap 所采用的是 Windows 平台系统下的一种对数据包进行捕获分析方法,它相当于是一个函数库、一个应用于 Windows 操作系统的免费而又公开的可以直接的用于访问互联网络的开发者工具包,它是 Linu/Unixx 系统中的 Libpcap 的 Windows 移植版,从设计到实现完全兼容 Libpcap,使得 原来许多 Linux/Unix 平台下的网络分析工具能被快速移植到 Windows 中。此外,Winpcap 不仅可以与 Libpcap 进行兼容,它还根据 Window 系统的特点,针对 Windows 做出了性能上 的优化和效率上的提升,其包括了对于 BPF-位于内核层次的过滤器的支持以及位于内核的 统计模式上的支持等等。目前,Windows 平台上的用作网络数据包捕获和解析的软件有很 多,但是 Winpcap 绝对是 Windows 平台上我们所首选的。 由当前的技术发展现状来看,绝大多数在 Windows 平台上运行的关于的网络方面的应 用基本上都是通过“Winsock API Windows 套接口”这一类高级的编程接口来实现访问 网络的,通过套接口访问网络数据的这种方法允许数据通过一定的条件在网络中实现一些 较为简单的传递,这是因为 Windows 操作系统中的 TCP/IP 协议栈能够使软件能够自主处理 流程的底层细节(例如协议操作、流程重组等这一些) ,并且提供给了系统一个函数接口, 这个函数接口能够用来读写目标文件。然则,在一些情况下,这种“简便的方法”实际上 并不能满足我们现实中的一些需求,有那么一些的程序想要绕过 TCP/IP 协议栈,目的是直 接处理位于网络底层中的数据信息,这些程序需要直接访问位于网络的底层数据,也就是 说没有与协议栈(TCP/IP 协议栈)相似的实体介入时,程序还能够对网络进行原始的访问。 那么,我们采用“Winsock API”进行网络编程,使应用程序是能够通过调用 Windows 系统 提供的接口以访问 TCP/IP 协议栈从而实现在网络中进行数据通信。通过使用 Winpcap 工具 进行编程,应用程序绕开 Windows 操作系统的 TCP/IP 协议栈,直接通过操作系统底层网络 发送数据流,亦或是从网络中抓取数据包从而进行解析。 Winpcap 主要提供了以下四个功能: (1)捕获流经网卡的数据包,不管这个数据包时发送往其他主机上的,还是处于共享 媒介上的,都能够捕捉到; (2)可以定义捕获规则,抓取用户想要的数据包类型,捕获目标数据包; (3)能够将原始数据从自己的主机上从网络中发送出去; (4)可以统计网络中的流量信息。 Winpcap提供的这些功能,要依靠安装在Win32内核的网络设备驱动程序和一些动态链 接库才能够最终实现。尽管Winpcap有许多功的能,但是其实Winpcap也有其应用的局限性: 比如Winpcap不能进行过滤、阻止或者是操纵其他应用程序在同一主机内进行通信,只能够 简单地“监听”数据包的网络传输过程。因此,Winpcap不能提供网络控制功能的服务,例 如流量控制、个人防火墙和服务质量调度一类的支持。 数据包包头协议解析器 3 wpcap.dll 或 应用程序 packet.dll NPF device driver 网卡设备 用户级 内核级 外部网 图 1.2.1 Winpcap 成员调用关系 Winpcap 由两个不同层次的 API 组成:一个是位于应用层底层的低级动态链接库 Packet.dll 和位于应用层高层不依赖于系统的高层静态库 Wpcap.dll ,以及驱动层的虚 拟设备驱动程序 NPF drivice driver(Netgroup Packet Filter) 。它们之间的调用关系 如图 2.2 所示,应用程序既可以调用应用层底层的 API packet.dll 实现一些更底层的操作, 也可以调用应用层高层的 API wpcap.dll 来简化程序开发。 NPF(全拼:Netgroup Packet Filter) ,它是位于驱动层的一个虚拟设备驱动程序, 同时它也是Winpcap 最为核心的部分,NPF负责从网卡驱动中捕获网络中的数据包,然后将 捕获到的数据包转发给过滤器模块进行规则过滤,再下一步可以选择将过滤后的数据包发 送到统计模块而后做数据分析,也可以发送到转存器,将捕获到的数据包存储到磁盘中。 Packet.dll是用户级的低级包过滤动态链接库,通过它可以直接映射到Windows系统内 核的调用,使应用程序可以运行在不同的Windows系统上,也可以直接访问NPF驱动程序的 API,从而选择接收或是发送数据包。 Wpcap.dll是一个高级的、独立于系统的动态库,与 Packet.dell 相同,并使用低层 级的 Packet.dll 所提供的一些服务,为应用程序功能提供更复杂的监听界面和更丰富的 功能调用。 .2 WinpcapWinpcap 捕获和解析数据包捕获和解析数据包 通过WinPcap,我们能够访问到存在于网络中的原始数据包,原始数据包即为那些没有 被操作系统利用网络协议处理过的数据,所捕获到的每一个数据包都是数据链路层中的一 帧。在计算机领域中,应用范围最广的以太网帧协议有两种:分别是 DIXv2 标准(即以太 网 V2 标准)和 IEEE 802.3 标准,那么现在世界上使用的最多的以太网帧协议为以太网 V2 的 标准的MAC帧格式。DIXv2 标准由以下 5 个字段组成:长度为 6 Byte 的目的地址、 长度为 6 Byte 的源地址、长度是 2 Byte的类型字段(类型字段的作用是用来标识位于上 一层协议的协议类型,举个例子:0x8035 表示的是上层的协议为 RARP协议、长 46 数据包包头协议解析器 4 1500 Byte 长度不等的 IP 数据报(IP Datagram),以及还有长为 4 Byte 的帧检验序列 (FCS,frame check sequence) 。通过分析每一个数据包,也即每一帧,我们可以解析出 该数据包的源 MAC 地址和目的 MAC 地址,对于IP数据报也可以得到它的完整内容。 。 如图1.2.2,这是一个IP 数据报。第4位至7位是 IP 的首部长度,该字段的作用是用 来精准定位网络层的上层协议即传输层的起始位置来的(例如:上层协议是TCP) ;第 10 字节是协议字段,通过对该字段的分析,可以得出这个IP数据报携带了哪种协议,它所实 现的功能是什么,常用的协议字段如图1.2.3 所示;第 13字节至第16字节是32位源始地址, 第17位至20字节是32位目的地址,这两个字段分别标注了这个数据包从哪里发送、又发送 到了哪里,可以解析出该数据报的源 IP 地址和目的 IP 地址,我们可以很清晰的判定数 据包的流向。 图 1.2.2 IP 数据报结构 图 1.2.3 常用的协议字段 1.31.3 小结小结 在本章节中,介绍了数据包解析技术(又称嗅探技术)存在的背景,分析了数据包解 析技术对于网络安全的重要性。同时简明的介绍了 Winpcap 的功能和结构,通过一个 IP 数据报分析了接下来的实施方法。 数据包包头协议解析器 5 第二章第二章 需求分析需求分析 需求分析在系统的整个开发中起着很重要的作用,只要正确、完善地做出需求分析, 才能够减少后期的修改,不仅仅减少开发的时间和成本,也能影响到开发出的系统是否能 够正常地投入到实际的应用中。本系统基于 MFC 的程序框架,在 windows 系统上,采用 Microsoft Visual Studio 2010 开发出一套基于 Winpcap 的数据包包头协议解析器,并 结合项目实际,结果现实需求进行分析在描述具体的需求之前,软件需要具备以下基本原 则: (1)系统需要规范化、自动化。系统能够在用户输入完基本的信息以及相关的信息后, 能够实现对数据的归档类存储,在用户需要这些处理后的数据时,能够清晰明了地展现出 来。 (2)以实用性为开发目的。围绕捕获数据包和解析数据包进行开发,以系统的高速性 和稳定性为核心,兼顾应用功能的丰富性。 (3)简单易操作为开发目标。任何一个系统,不能开发的过于复杂或者重要常用的功 能操作繁琐。而应该是简单易懂的方式呈现在用户面前,并且系统应该遵循当前主流软件 的界面设计,这样能方便第一次接触的用户从别的软件快速联想到当前软件的使用方式, 进一步方便用户的使用。 下面,就从系统的需求分析开始,分析其功能需求,准确定位在后续的工作中需要实 现的功能。 2.12.1 功能需求功能需求 系统实现了对流经网卡中的数据流进行捕获分析,完成数据包捕获、头部协议解析和 后续的数据存储的功能。因此,该系统的功能应有以下几点: (1)我们需要对从网卡中捕获到的数据包的包头协议进行解析,进而提取协议信息中 的关键字段,它们包括源 MAC 地址、目的 MAC 地址、以太网类型、源 IP 地址、目的 IP 地 址、源端口号、目的端口号、协议类型以及数据负载长度等,然后再显示到软件界面上; (2)用户能够自定义数据包的过滤规则,使数据包的捕获更具精准性和灵活性,增强 了软件功能以及与用户的交互能力; (3)程序带有导出功能,使解析的数据包信息以一定格式导出到指定文件夹,以便后 续能够进行分析研究; (4)要求程序界面简洁友好,大部分只需要鼠标点击就可以完成各个功能,操作简单、 方便。 2.22.2 性能需求性能需求 系统首先应能够保证稳定运行,在解析速率上要接近 100Mbps 的任务要求,要保证解 数据包包头协议解析器 6 析结果的正确性,软件的交互界面要简洁、明了、友好。其中,系统对数据包捕获解析处 理的准确度和时效性是两个系统的必备性能,也是重中之重,因为作为一个实时处理数据 信息的系统,它的数据准确性以及时效性显得尤为关键。 那么,综上所述,系统的功能需求如一下四点: (1)运行速度:保证系统的运行速度快、响应时间短、处理时间快、更新周期短,应 该能满足用户的需求。 (2)精度需求:保证系统的运算精度。根据使用需要,在各项数据的捕获、解析过程 中,要保证数据的正确性且能满足数据包的快速解析。 (3)故障处理需求:能够兼容可能出现的数据包异常情况,能够对发生的异常进行提 示与容错处理。 (4)界面友好性:要有用户需求特点的智能化美观的界面,以便用户使用上的方便。 2.32.3 可行性分析可行性分析 .1 经济可行性经济可行性 本次毕设的工作是基于 Winpcap 这一网络数据包捕获与解析的开发工具,通过对网卡 上流经的数据包进行捕获和解析,以实现对当前网络的监控,这将是为后期网络数据的监 控提供一定的指导价值,然而,开发却不需要过多的开发成本,所以经济上对于开发该系 统是可行的。 .2 技术可行性技术可行性 该系统将基于 WinpCap 对数据包进行捕获解析,当前已经有很多参考的例子进行学习 和研究。并且,该系统在算法逻辑上,并没有很复杂的处理,主要是功能和对业务逻辑的 处理。所以,在开发过程中不仅仅可以借鉴程序的开发例子,也可以在遇到问题的时候, 找到相应的解决办法,所以,从技术的可行性来说,实现一个这样的系统是可行的。 2.42.4 本章小结本章小结 在本章中,我们对需要设计的系统做了需求分析,并从经济可行性和技术可行性两点 做了可行性分析,这为后面章节中该系统的详细设计奠定基础,并且详细的需求分析可以 为系统的具体实现提供准确的依据。 数据包包头协议解析器 7 第三章第三章 系统设计系统设计 3.13.1 设计原则设计原则 (1)对于网络中的数据包进行捕获分析是一项对于系统的稳定性要求很高的项目,系统的设计 要突出性能和稳定性优先,兼顾开发难度的原则,在开发工具、平台和技术的选择上优先保证性能。 (2)在技术的选择上要注意该项技术与系统的相容性,包括在性能上的相容性。比如本次的开发 环境选择了 Windows 环境的 Winpcap,这是由我个人的开发环境而选择的。 3.23.2 总体架构总体架构 在软件设计和开发中,将不同的功能模块化的设计往往是最终软件开发能够快速、方便的前提, 并且能够在协同开发、业务扩展等等方面提供很好的兼容性。将各个模块分离开,优点是很多的。如 有效地实现软件之间的解耦合,便于软件开发过程中进行分工,后期的维护,提高软件的重组,便于 以后以模块化的方式来替换产品,以及产品功能的扩展等等功能。所以,模块化的设计,以及分层的 处理,能有效地让软件更利于开发。其具体如图 3-1: 用户界面 设备选择 数据捕获 过滤规则 协议首部解析 数据 存储/读取 TCP数据包解析 UDP数据包解析界面交互 ICMP数据包解析 图 3.1 系统总体架构图 该系统主要实现对当前计算机中已有网卡的获取和选择,实施流经网卡的数据流的捕获和存储以 及网络数据包协议的分析等一系列功能。网络设备的获取与选择主要完成从主机中获取网络设备列表 及其相关描述信息,并以列表的形式显示出来,进而用户通过界面选择并查看系统工作的网络设备信 息。网络数据流的捕获与存储主要完成在设置好过滤规则的基础上,对已经打开的网络设备采集数据 流,并按照主流的数据流存储格式存储对捕获到的网络数据流,然后再对所捕获到的数据包的首部信 息进行解析,同时用户可以查看指定数据包的详细信息,进一步实现对单一数据的应用层数据解析。 数据包包头协议解析器 8 3.33.3 系统主流程系统主流程 系统的核心是通过 WinpCap 捕获到数据包,然后根据对应的数据包协议进行解析, 最终呈现到界面上。所以其具体的处理流程如下: .1 数据包捕获模块数据包捕获模块 数据包捕获模块主要负责采集网络数据流。该模块通过调用 WinPcap 开发包提供的 API 函数,实现网络设备信息的获取,以便用户选择系统所运行的网络设备;实现过滤规 则的设定,以筛选出系统感兴趣的网络数据流;实现从用户指定设备上捕获流经的数据 流,并将获取到的数据流缓存起来,以供后续模块进行分析处理。 数据包捕获模块,实现了从网卡选择到数据捕获,最终呈现到界面的处理流程。其 中,数据包的分析下面将作为一个详细的章节进行介绍。具体逻辑如图 3-2: 开开始始 p pc ca ap p_ _f fi in nd da al ll ld de ev vs s 获获取取网网卡卡 找找到到网网卡卡 显显示示到到界界面面 Y Y N N 选选择择网网卡卡 清清空空界界面面数数据据 创创建建线线程程 捕捕获获数数据据包包 P Pc ca ap p_ _o op pe en n_ _l li iv ve e 打打开开网网卡卡 过过滤滤 P Pc ca ap p_ _s se et tf fi il lt te er r 设设置置过过滤滤 p pc ca ap p_ _l lo oo op p 抓抓包包 停停止止 捕捕获获到到数数据据包包 数数据据包包解解析析 结结束束 N N N N Y Y Y Y Y Y N N 图 3-2 数据包捕获 如图 3-2,具体的处理简要介绍如下: (1)系统启动后,通过调用 pcap_findalldevs 获取当前计算机的所有网卡信息,然后显示到界面; (2)用户选择网卡后,调用 Pcap_open_live 打开选中的网卡,开始初始化数据包捕获的相关资 数据包包头协议解析器 9 源; (3)如果需要设置过滤的数据包,则调用 Pcap_setfilter 对捕获的数据包进行过滤设置,在此次 设计中,没有对不同协议的数据包进行过滤设置; (4)然后开始循环以旁路的方式获取数据包; (5)当捕获到一个数据包时,系统就对其进行解析; (6)最终将解析到的数据包显示到界面; (7)最后,用户停止数据包的解析。 .2 数据包解析模块数据包解析模块 数据包解析模块主要负责解析网络数据流。该模块按照各层协议首部格式解析每 个网络数据包,提取网络层、传输层等协议首部的关键字段信息,如:源 IP 地址、目的 IP 地址、源端口、目的端口等;然后再提取其 TCP 首部的序列号、确认序列号、TCP 标 志等信息,为 TCP 流重组提供必要信息。 数据包的解析主要是根据捕获到的数据包数据,以及对应的协议,进行数据包的解 析。该解析的方式是基于不同协议的格式固定,所以针对不同的数据包以及包协议,就 可以直接到指定位置获取到对应的数据。其处理逻辑如图 3-3: 开开始始 数数据据包包捕捕获获 捕捕获获到到数数据据包包 发发送送消消息息 到到解解析析线线程程 Y Y N N 解解析析包包类类型型 定定义义对对应应 包包结结构构指指针针 将将捕捕获获的的数数据据包包首首 地地址址指指向向包包指指针针 读读取取对对应应 字字段段并并显显示示 结结束束 停停止止 N N Y Y 图 3-3 数据包解析 如图 3-3,在捕获到数据包后,程序通过自定义的 windows 消息,将该捕获的数据包发送到对应 的线程中进行分析。这样能避免数据包过快导致数据无法快速捕获和解析。 对于捕获的数据包,通过定义了对应协议的数据结构,然后分析出该包的协议类型后,直接捕获 的数据包的内存将对应的首地址指向对应的包头结构指针,这样,就直接完成了数据包的解析,然后 数据包包头协议解析器 10 调用对应的字段去显示就可以。其中,系统针对了 TCP,UDP,ICMP 数据包进行了解析,其对应的 数据包结构如下: 3.43.4 小结小结 本章主要围绕 WinpCap 对数据包捕获的核心逻辑处理,根据这些处理,能够有效地 了解 Winpcap 捕获数据包的方式,为后面系统的具体实现提供详细的依据。 数据包包头协议解析器 11 第四章第四章 系统实现系统实现 本章将具体阐述该系统的具体实现。 4.14.1 驱动获取驱动获取 系统在初始化运行之后,系统需要捕获当前部署的设备上的所有网卡信息,显示到界面, 用于供用户选择当前要捕获的具体网卡。其处理逻辑如图 4-1: 开开始始 创创建建下下拉拉列列表表框框控控 件件 p pc ca ap p_ _f fi in nd da al ll ld de ev vs s _ _e ex x读读取取所所有有网网卡卡 循循环环将将查查询询到到的的网网 卡卡显显示示到到下下拉拉列列表表 结结束束 图 4-1 网卡选择 由图 3-2 可知,系统在网卡的获取与显示上是通过添加一个下拉列表框的方式,然后 调用 pcap_findalldevs_ex 函数,来实现网卡的获取,然后将获取的网卡显示到下拉列表中, 供用户捕获选择。 其主要的代码如下: If ( ! m_wndToolBar.m_wndComboBox.Create (WS_CHILD | WS_VISIBLE|CBS_DROPDOWNLIST,rect,(CWnd*) pcap_if_t * alldevs,*d; char errbuf PCAP_ERRBUF_SIZE ; if ( pcap_findalldevs_ex (PCAP_SRC_IF_STRING,NULL, For ( d = alldevs ; d ; d = d - next ) 数据包包头协议解析器 12 If ( d - description ) m_wndToolBar.m_wndComboBox.AddString ( d - description ); m_wndToolBar.m_wndComboBox.SetCurSel ( 0 ) ; 可以看到,该系统中主要的处理都是 MFC 对控件的基本处理。其中 WinpCap 中的接口就是 pcap_findalldevs_ex 对网卡的读取,pcap_findalldevs_ex 函数获得已经连接的网络适配器接口,然后返 回一个 pcap_if 结构的链表, 每个这样的结构都包含了一个适配器的详细信息。如下程序,得到保 存了当前环境下的所有网卡信息的 alldevs 列表对象,并将其打印出来,数据域 name 和 description 表示一个适配器名称和一个可以让人们理解的描述,其该对象的结构如下: struct pcap_if struct pcap_if * next; char * name; char * description; struct pcap_addr * addresses; bpf_u_int32 flags; ; 可以看到,其是一个链表结构。其保存了网卡的名字、描述信息、地址信息、标记。并且,通过 next 指针指向了下一个结构,从而能够获取所有的所有的列表信息。 4.24.2 捕获数据初始化捕获数据初始化 在数据包捕获之前,需要对资源进行初始化处理。其主要的处理逻辑如图 4-2: 数据包包头协议解析器 13 开开始始 获获取取选选择择的的网网卡卡 根根据据选选择择的的网网卡卡名名 打打开开网网卡卡设设备备 当当前前网网络络为为以以 太太网网网网络络 创创建建目目录录 数数据据包包保保存存目目 录录存存在在 创创建建数数据据包包文文件件保保 存存对对象象 数数据据包包捕捕获获与与处处理理 结结束束 N N Y Y N N Y Y 图 4-2 资源初始化 数据包捕获之前,需要对系统资源进行初始化,这些初始化包括网卡的设置、保 存文件的创建、内存的分配等。其主要的代码如下: (1)打开设备 /打开设备 Adhandle = pcap_open ( d - name, /网络设备名 65535, /数据包的捕获部分长度 PCAP_OPENFLAG_PROMISCUOUS, /混合模式 1000, /读超时值 NULL, Errbuf ); /错误信息缓存区 if ( adhandle = NULL ) return - 1; 数据包包头协议解析器 14 系统在用户选择了网卡点击启动数据包捕获后,其调用 pcap_open 函数,打开选择的网卡对象中 名字对应的网卡对象,其在打开时,可以设置最大的捕获数据包的长度,其 65535 是以太网中单个数 据包的最大长度。也可以设置该操作的超时时间,如果指定时间内都没有打开,则返回失败。其也设 置了捕获的数据包为混杂模式,即只要流经该网卡的数据都会被捕获到,即使只是通过该网卡进行传 递,而非发送给当前计算机应用层数据。 (2)检测是否是以太网 If ( pcap_datalink ( adhandle ) ! = DLT_EN10MB ) return - 1; 该程序捕获只限于以太网的环境下,所以如果当前网络非以太网,则不允许捕获。 (3)创建目录 CFileFind file ; If ( ! file.FindFile ( “SavedData“ ) CreateDirectory ( “SavedData“ , NULL ); 数据包捕获的时候,会通过调用 WinpCap 的保存接口实现对数据包的捕获,所以,需要创建一个 目录用于保存这些数据包文件,而该系统中,每次捕获操作初始化的时候,如果检测到该目录不存在, 则创建该目录。 (4)创建线程捕获数据包 LPDWORD ThreadID = NULL; m_ThreadHandle = CreateThread ( NULL , 0 , MyCaptureThread , this , 0 , ThreadID ); 资源初始化完成后,就开始对数据包进行捕获。但是,其数据包的捕获是一个循环、持续的过程, 所以其具体的处理通过创建线程来操作,这样让业务逻辑与 UI 逻辑分离出来,能够让用户的操作更 友好。 4.34.3 数据包与解析捕获数据包与解析捕获 数据包的捕获其是通过调用WinpCap的接口来实现数据包的捕获,当捕获到数据包之后,需要对 数据包进行处理,这些处理包括解析数据包、显示解析的数据、保存数据包、计算平均速率和瞬时速 率等。其主要处理的逻辑如图4-3: 数据包包头协议解析器 15 开开始始 捕捕获获到到数数据据包包 I IP P数数据据包包头头部部解解析析 T TC CP P 获获取取协协议议类类型型 U UD DP PI IC CM MP PO Ot th he er rs s 保保存存解解析析后后的的数数据据 到到内内存存指指针针 发发送送W Wi in nd do ow ws s消消息息 刷刷新新页页面面 刷刷新新显显示示页页面面 发发送送W Wi in nd do ow ws s消消息息 保保存存数数据据包包 保保存存此此次次数数据据包包 发发送送W Wi in nd do ow ws s消消息息 显显示示速速率率 显显示示平平均均和和瞬瞬时时速速 率率 捕捕获获下下一一个个数数据据包包停停止止捕捕获获 结结束束 Y Y N N M MA AC C层层数数据据解解析析 图4-3 数据包捕获与处理 其数据包的捕获主要处理逻辑如下: 捕获数据包:系统通过调用 WinpCap 的数据包捕获接口实现对数据包的捕获, 其代码如下: Res = pcap_next_ex ( pthis - adhandle , 其首先是需要指定捕获的数据包的网卡对象,其该接口是一个阻塞方式的接口,其当有新的数据 包来临的时候,其才会返回,会将捕获的 IP 数据包的捕获的描述信息保存在 header 对象中,其具体 捕获的数据内容在 pkt_data 对象中。其中,header 对象如下: 数据包包头协议解析器 16 struct pcap_pkthdr struct timeval ts ; /* 时间戳 */ bpf_u_int32 caplen ;/* 本部分长度 */ bpf_u_int32 len ; /* 数据包长度 */ ; 可以看到,该对象主要是描述了数据包捕获的具体时间以及捕获的数据包长度,即定义了 pkt_data 对象的数据大小,程序就可以通过对应的包长度对 pkt_data 对象进行详细的解析。 (2)MAC 层数据解析 其 pkt_data 就是具体的数据包,其包括 MAC 层的数据,IP 层的数据,应用层具体的包结构。所 以,程序需要先对 MAC 层数据进行解析,得到 MAC 层数据进行显示。 其主要的解析代码如下: mach = ( mac_header * ) pkt_data; /mac 头 for ( int i = 0 ; i mach.sadd i = mach - sadd i; pdata - mach.dadd i = mach - dadd i; pdata-mach.mac_type=mach-mac_type; 其 MAC 层的结构如下: /Mac 帧头 占 14 个字节 typedef struct tag_mac_header u_char dadd 6 ;/6 个字节 目标地址 u_char sadd 6 ;/6 个字节 源地址 u_short mac_type ;/2 个字节 类型 mac_header; 可以看到,其通过解析 MAC 层的数据,就能够得到该数据包的目标 MAC 地址和源 MAC 地址。 (3)IP 层数据解析 解析完 MAC 层数据后,就可以解析 IP 层数据,其具体处理的代码如下: 数据包包头协议解析器 17 ih = (ip_header*)(pkt_data+14);/ip 头 int iplen = (ih-ver_ihl pdata - iph.crc = ih - crc; pdata - iph.daddr = ih - daddr; pdata - iph.flags_fo = ih - flags_fo; pdata - iph.identification = ih - identification; pdata - iph.op_pad = ih - op_pad; pdata - 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; 其 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 占两个字节 u_short identification;/标识 u_short flags_fo;/标志位 Flags(3 位)+分段偏移(13 位) u_char ttl;/TTL u_char proto;/Protocol u_short crc;/校验和 ip_address saddr;/源地址 ip_address daddr;/目的地址 u_int op_pad;/选项+填充字段 u_int 占 4 个字节 32 位 /接下来是数据段,不属于 IP 头部 ip_header; 通过该结构,就可以知道其具体的上层使用的协议,以及数据包进行稳定传输的参数。 (4)上层协议解析 通过字段 proto 字段,再对具体的上层协议进行解析,在该系统中,实现了对 TCP、UDP、ICMP 的解析,其定义的头部结构如下: /定义 TCP 头 typedef struct tag_tcp_header 数据包包头协议解析器 18 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 位UPG1+ACK1+PSH1+RST1+SYN1+FIN1 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 头 typedef struct tag_udp_header u_short sport;/源端口 16 位 u_short dport;/目的端口 16 位 u_short len;/数据报长度 16 位 u_short crc;/校验和 16 位 udp_header; /定义 ICMP typedef struct tag_icmp_header u_char type;/8 位 类型 u_char identifer; /8 位 代码 u_char sequence;/序列号 8 位 u_char chksum;/8 位校验和 icmp_header; (5)数据包内存数据保存 通过上面的步骤,其数据包的数据就已经解析完毕。其会将解析后的数据保存到内存链表中,用 于数据的显示。其具体的实现是通过 CPtrList 类来实现。 CPtrList 对象是一个链表的指针对象,其能够保存 Object 对象。所以,当有新的数据包来临是, 其通过 AddTail 接口,实现将新的数据包保存到该链表中。 (6)数据包显示 数据包的显示包括对解析后的头部数据进行显示,也包括对当前速度的统计数据的显示,其为了 让捕获的数据包速度更快,系统通过发送 Windows

温馨提示

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

评论

0/150

提交评论