网络数据包的捕获与分析毕业设计.doc_第1页
网络数据包的捕获与分析毕业设计.doc_第2页
网络数据包的捕获与分析毕业设计.doc_第3页
网络数据包的捕获与分析毕业设计.doc_第4页
网络数据包的捕获与分析毕业设计.doc_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

陕西理工学院毕业设计 网络数据包的捕获与分析 王 行 陕西理工学院数学与计算机科学学院网络工程专业 1101 班 陕西 汉中 723003 指导教师 贾 伟 摘要 网络数据包的捕获对于网络安全有着巨大的作用 为我们更好的分析网络中的数据流提供 了帮助 本论文是基于 Windows 下开发一个网络监听工具 侧重点在于实现网络数据包的捕获 然后分析 并显示捕获到的数据包信息这部分功能的实现 如分析 IP 首部协议类型 源 IP 目的 IP 和端口号等 采用的是 Winpcap Windows Packet Capture 来实现的抓包功能 通过 VC 6 0 中 MFC 编程实现通过一 个完整界面来控制调用 Winpcap 中的函数来实现对网卡信息的捕获和循环捕获数据包 然后通过预先对于 IP TCP UDP 等数据包的定义和 TCP IP 等协议来解析其中包含的内容并返回显示捕获到数据包的信息 当然也可以保存捕获到的数据包到指定地点以便进一步分析 关键词 Winpcap 数据包 捕获 分析 陕西理工学院毕业设计 The Capture and Analysis of Network Data Packets Wang Hang Grade 11 Class 1 Major Network Engineering School of Mathematics and Computer Science Dept Shaanxi University of Technology Hanzhong 723003 Shaanxi Tutor Jia Wei Abstract The capture of network data packets plays an important part in network security which is helpful for our better analysis of network data flow This paper is about a network monitoring tool based on Windows system which emphasizes particularly on realizing the capture and analysis of network data packets and then displays them Take analysis as an example it will check the type of the IP protocol the source address of IP the destination address of IP and the port number Use the Winpcap Windows Packet Capture to capture of data packets In MFC programming of VC 6 0 the capture of network data packets can be realized via the invoking and control of the functions through a full control panel and then the analysis of IP TCP UDP and TCP IP will be done before they are displayed Certainly the information captured can be saved to the appointed destination in order to go through an advanced analysis Key words Winpcap Data Packets Capture Analysis 陕西理工学院毕业设计 目目 录录 引言 1 1概述 2 1 1 课题背景 2 1 2 国内外研究现状 2 1 3 课题研究的意义 2 1 4 课题研究的内容 2 2相关知识介绍 3 2 1 TCP IP 协议简介 3 2 1 1 什么是 TCP IP 3 2 1 2 TCP IP 整体构架概述 3 2 1 3 TCP IP 中的协议 3 2 2 WINPCAP开发技术详解 5 2 2 1 Winpcap 介绍 5 2 2 2 Winpcap 的组成 6 2 2 3 Winpcap 数据结构 7 2 2 4 Winpcap 函数 7 3系统设计方案及功能描述 9 3 1 系统设计方案 9 3 2 系统功能描述 9 4系统编码实现 11 4 1 网络数据包捕获模块的实现 11 4 1 1 网络数据包捕获程序的编写过程 11 4 1 2 在程序中用到的 WinPcap 内核函数详细介绍 12 4 1 3 网络数据包捕获的应用 13 4 2 网络数据包分析模块的实现 14 4 2 1 网络数据包分析模块主要建立的类 14 4 2 2 IP 协议分析类的设计 14 4 2 3 TCP 协议分析类的设计 15 4 2 4 UDP 协议分析类的设计 17 4 2 5 系统中变量函数的设计 17 4 3 主界面构造 17 5软件测试 19 总 结 21 参考文献 22 致 谢 23 科技外文文献 24 外文文献翻译 36 附录 A 软件开发源代码 47 附录 B 软件使用说明书 65 陕西理工学院毕业设计 第 1 页 共 65 页 引言引言 随着网络技术的不断发展 通过网络将人与人的距离拉近 因此网络为来自世界各地 不同的人 团体 机构构建了一个网络村 网络的出现方便人们的日常生活及工作 在高 度发展的今天 网络已经不仅是浏览信息的品台 还广泛的运用到了商业 办公 金融 政务等各行各业中 网络中的风险也越发突出 进而网络安全问题越来越受到关注 因此 对网络的监控与管理势在必行 而想要监控和管理网络 首先就要获取网络中所传输的各 类信息 才能进一步得进行监控和管理 可以说数据包的捕获是对网络监控与管理的前提 所以研究并开发出一种能够有效地实时捕获网络信息的系统具有极其重要的意义 在网络中 信息是以数据包的形式传输 所以为了监控计算机当前网络信息 可以通 过 WinPcap 来实现在当前计算机网络中传输的数据包的抓取 然后通过对捕获数据包中数 据信息 进行过滤解析 得到所抓数据包的协议 数据长度 以及数据报内容等信息 此 外 此次毕业设计还注重研究 主要体现在应用层协议的识别方面 同时采用了基于正则 表达式技术得到某种应用层协议的特征表达式 而为了实现将抓包获取的数据进行解析并展现出来 本次毕业设计还要通过 C 编程 将其编写成为软件 以便于操作运用 能让获取的数据包数据进行解析后 在界面中显示 出来 方便查看数据包各类信息 以及进一步的进行一些对应操作 达到我们解析数据包 的目的 并可在日后能添加新功能 加强对数据包的分析能力 陕西理工学院毕业设计 第 2 页 共 65 页 1 1概述概述 1 11 1课题背景课题背景 随着网络技术的飞速发展 网络的普及 给我们带来了巨大的社会和经济效益 同时 网络安全问题变得日益严重 计算机网络的设计 维护难度日益增加 安全问题正威胁着 每一个网络用户 对网络安全的研究也越来越重要 因此 人们迫切的需要能够分析 诊 断和测试网络的工具 以防我们的电脑尽可能减少受到侵害 对于网络数据包的捕获现在 也有着很多的实现方法 存在着许多开源的 sniffer 软件供我们参考 但是其中的某些细节 上还是有一些问题的存在 在效果和效率上都有一些问题 分析上也并不是很方便 所以 尝试选择了这个课题 1 21 2国内外研究现状国内外研究现状 现在不论是网上的一些开源的 Sniffer 软件还是市面上出售的网络监听软件 其实其基 础功能都是基于网络数据包捕获功能后扩展开的 所以我们可以清晰的认识到网络数据包 捕获功能的巨大作用和广泛的应用范围 目前 sniffer 软件种类繁多 但是很多都存在一些 问题 比如说 效率低 效果差 分析困难等等 有些 sniffer 软件往往嵌入许多并不怎么 使用的功能在里面 增加了操作的复杂性 使用起来反而不便 所以真正想要找到一款操 作简单使用方便的数据包捕获软件并不容易 作为一名网络工程专业的学生 熟悉常用的 各种计算机相关软件 特别是和网络相关的软件是应该的 现在市场上的国内外的各种防 火墙软件 网络监听软件和协议分析软件等软件种类繁多 让人有点眼花缭乱 这些产品 大多数品质都不错 各有各的特点 所以选择起来的难度也挺大 我总是在一些比较著名 的软件下载网站上获取一些比较受好评的软件来使用 然后从中选择适合自己的 通过一 系列的使用和学习 我希望能够自己完成一款功能适合自己使用的操作简单让人可以轻易 上手的网络数据包捕获和简单分析的软件 1 31 3课题研究的意义课题研究的意义 随着网络的飞速发展 Internet 的迅速普及 网络已经深入到了我们的生活 跟我们息 息相关 伴随着网络带来的便利 网络安全问题也越来越受到人们的关注和重视 防火墙 也成了一个非常热门的课题 带来巨大的社会经济效益 保护我们的合法权益不受到侵害 我选择的课题是 windows 下的网络数据包的捕获与分析 所以主要的研究方向和侧重点是 在于最基本也是最核心的网络数据包的捕获和分析等功能上 网络数据包的捕获对于网络 安全领域有着无可代替的重要作用 不论是防火墙技术 网络监听技术或者是网络测试都 离不开数据包的捕获 这是一切的基础 其他的功能都要基于这个功能才能实现 1 41 4课题研究的内容课题研究的内容 由上所述 加强对网络中数据包传输的监管 已经越发显得重要 而对网络中所传输 的数据包进行捕获则是对网络中数据包管理的前提 通过监控分析网络中的数据包 是建 设安全网络的保障 本实验就是通过研究网络中数据包的传输情况 构建一个简单快捷的 数据包抓包及分析软件 一 运用 C 开发一个简单的软件实现通过调用 winpcap 来对网络中的基本数据包进 行捕获 二 通过 winpcap 中常用的库函数的使用方式 来实现了简单的小型的络数据包抓包 器 并通过对原始包文的分析来展示当前网络的运行状况 三 对捕获的数据包进行解析分类处理 能将所捕获的数据包中的信息解析罗列成数 据表 并可导入日志文本存储 通过以上步骤通过实现数据包的捕获 数据包信息的解析 流量的监控以及数据的导 出 陕西理工学院毕业设计 第 3 页 共 65 页 2 2相关知识介绍相关知识介绍 2 12 1 TCP IPTCP IP 协议简介协议简介 我们捕获数据包的主要目的就是要对捕获的数据包进行分析 而我们目前使用的网络 传输协议就是 TCP IP 协议 所以我们如果想更好的分析数据包就应该对此协议有点初步的 了解 下面我将简单的介绍一下 TCP IP 协议 2 1 12 1 1 什么是什么是 TCP IPTCP IP TCP IP 是供已连接因特网的计算机进行通信的通信协议 TCP IP 指传输控制协议 网际协议 Transmission Control Protocol Internet Protocol TCP IP 定义了电子设备 比如计算机 如何连入因特网 以及数据如何在它们之间传 输的标准 2 2 1 1 2 2 T TC CP P I IP P 整整体体构构架架概概述述 TCP IP 协议并不完全符合 OSI 的七层参考模型 传统的开放式系统互连参考模型 是 一种通信协议的 7 层抽象的参考模型 其中每一层执行某一特定任务 该模型的目的是使各 种硬件在相同的层次上相互通信 这 7 层是 物理层 数据链路层 网络层 传输层 会话 层 表示层和应用层 而 TCP IP 通讯协议采用了 4 层的层级结构 每一层都呼叫它的下一 层所提供的网络来完成自己的需求 这 4 层分别为 应用层 应用程序间沟通的层 如简单电子邮件传输 SMTP 文件传输协议 FTP 网络远程访问协议 Telnet 等 传输层 在此层中 它提供了节点间的数据传送 应用程序之间的通信服务 主要功 能是数据格式化 数据确认和丢失重传灯 如传输控制协议 TCP 用户数据报协议 UDP 等 TCP 和 UDP 给数据包加入传输数据并把它传输到下一层中 这一层负责传 送数据 并且确定数据已被送达并接收 互连网络层 负责提供基本的数据封包传送功能 让每一块数据包都能够到达目的主 机 但不检查是否被正确接收 如网际协议 IP 网络接口层 主机 网络层 接收 IP 数据报并进行传输 从网络上接收物理帧 抽 取 IP 数据报转交给下一层 对实际的网络媒体的管理 定义如何使用实际网络 如 Ethernet Serial Line 等 来传送数据 2 1 32 1 3 TCP IPTCP IP 中的协议中的协议 以下简单介绍 TCP IP 中的协议都具备什么样的功能 都是如何工作的 1 IP 网际协议 IP 是 TCP IP 的心脏 也是网络层中最重要的协议 IP 层接收由更低层 网络接口层例如以太网设备驱动程序 发来的数据包 并把该数 据包发送到更高层 TCP 或 UDP 层 相反 IP 层也把从 TCP 或 UDP 层接收来的数据包传 送到更低层 IP 数据包是不可靠的 因为 IP 并没有做任何事情来确认数据包是按顺序发送 的或者没有被破坏 IP 数据包中含有发送它的主机的地址 源地址 和接收它的主机的地 址 目的地址 高层的 TCP 和 UDP 服务在接收数据包时 通常假设包中的源地址是有效的 也可以 这样说 IP 地址形成了许多服务的认证基础 这些服务相信数据包是从一个有效的主机发 送来的 IP 确认包含一个选项 叫作 IP source routing 可以用来指定一条源地址和目的地 址之间的直接路径 对于一些 TCP 和 UDP 的服务来说 使用了该选项的 IP 包好像是从路 径上的最后一个系统传递过来的 而不是来自于它的真实地点 这个选项是为了测试而存 在的 说明了它可以被用来欺骗系统来进行平常是被禁止的连接 那么 许多依靠 IP 源地 址做确认的服务将产生问题并且会被非法入侵 IP 数据报格式如图 2 1 陕西理工学院毕业设计 第 4 页 共 65 页 图 2 1 IP 报文格式 2 TCP 如果 IP 数据包中有已经封好的 TCP 数据包 那么 IP 将把它们向 上 传送到 TCP 层 TCP 将包排序并进行错误检查 同时实现虚电路间的连接 TCP 数据包中包括序号和确认 所以未按照顺序收到的包可以被排序 而损坏的包可以被重传 TCP 将它的信息送到更高层的应用程序 例如 Telnet 的服务程序和客户程序 应用程 序轮流将信息送回 TCP 层 TCP 层便将它们向下传送到 IP 层 设备驱动程序和物理介质 最后到接收方 面向连接的服务 例如 Telnet FTP rlogin X Windows 和 SMTP 需要高度的可靠 性 所以它们使用了 TCP DNS 在某些情况下使用 TCP 发送和接收域名数据库 但使 用 UDP 传送有关单个主机的信息 TCP 报文格式 如图 2 2 图 2 2 TCP 报文格式 3 UDP UDP 与 TCP 位于同一层 但它不管数据包的顺序 错误或重发 因此 UDP 不被应 用于那些使用虚电路的面向连接的服务 UDP 主要用于那些面向查询 应答的服务 例如 NFS 相对于 FTP 或 Telnet 这些服务需要交换的信息量较小 使用 UDP 的服务包括 NTP 网络时间协议 和 DNS DNS 也使用 TCP 欺骗 UDP 包比欺骗 TCP 包更容易 因为 UDP 没有建立初始化连接 也可以称为握手 因为在两个系统间没有虚电路 也就是说 与 UDP 相关的服务面临着更大的危险 陕西理工学院毕业设计 第 5 页 共 65 页 UDP 报文格式 如图 2 3 图 2 3 UDP 报文格式 4 ICMP ICMP 与 IP 位于同一层 它被用来传送 IP 的的控制信息 它主要是用来提供有关通向 目的地址的路径信息 ICMP 的 Redirect 信息通知主机通向其他系统的更准确的路径 而 Unreachable 信息则指出路径有问题 另外 如果路径不可用了 ICMP 可以使 TCP 连接 体面地 终止 PING 是最常用的基于 ICMP 的服务 5 TCP 和 UDP 的端口结构 TCP 和 UDP 服务通常有一个客户 服务器的关系 例如 一个 Telnet 服务进程开始在 系统上处于空闲状态 等待着连接 用户使用 Telnet 客户程序与服务进程建立一个连接 客户程序向服务进程写入信息 服务进程读出信息并发出响应 客户程序读出响应并向用 户报告 因而 这个连接是双工的 可以用来进行读写 6 常用网际协议编号如表 2 1 表 2 1 常用网际协议编号 十进制编号协议说明 0无保留 1ICMP网际控制报文协议 2IGMP网际组管理协议 3GGP网关 网关协议 4无未分配 5ST流 6TCP传输控制协议 8EGP外部网关协议 9IGP内部网关协议 11NVP网络声音协议 17UDP用户数据报协议 2 22 2 WinPcapWinPcap 开发技术详解开发技术详解 2 2 12 2 1 WinpcapWinpcap 介绍介绍 Winpcap Windows Packet Capture 是 Windows 平台下一个专业网络数据包捕获开发 包 是为 Libpcap 在 Windows 平台下实现数据包的捕获而设计的 在设计 Winpcap 时参照 了 Libpcap 两者使用方法相似 使用 Winpcap 开发包 可以把在 Linux 下基于 Libpcap 的 程序很容易的移植到 Winpcap 平台下 Winpcap 是在 BSD 许可证下发布的 它主要是由加 利福尼亚大学的 Lawrence Berkeley Laboratory 开发 使用 Winpcap 开发包的主要软件有 Windump 与 linux 下的 Tcpdump 的功能几乎一 致 Analyzer Windows 下的嗅探器 Ethereal 网络协议分析软件 等 陕西理工学院毕业设计 第 6 页 共 65 页 开发 Winpcap 这个项目的目的在于为 Win32 应用程序提供访问网络底层的能力 其核 心功能是捕获网络数据包 其他功能包括数据包过滤 数据包发送 流量统计和数据包存 储等 Winpcap 给程序员提供了一套标准的网络数据包捕获的编程接口 并且与 Libpcap 兼容 增加了从 linux 到 windows 平台的可移植性 而且提供很高的应用效率 充分考虑 了各种性能和效率的优化 在内核层实现了数据包的捕获和过滤 这是由 NPF 来实现的 NPF 是 Winpcap 的核心部分 它实现了内核层次的统计功能 对于设计网络流量的程序很 有好处 在这里我使用的是 WinPcap 4 1 3 版 性能稳定 2 2 22 2 2 WinpcapWinpcap 的组成的组成 Winpcap 包括三部分内容 第一部分是内核层的数据包过滤模块 它相当于在 Linux 下 Libpcap 使用的 BPF 过滤 模块 实现了高效的网络数据包的捕获和过滤功能 其过滤规则跟 BPF 是一样的 此过滤 模块实际上是一个驱动程序 被称为 NPF Netgroup Packet Filter 数据包驱动程序 第二部分是动态链接库 packet dll 它是提供给开发者的一个接口 使用它就可以调用 Winpcap 的函数 它是一个较低层的开发接口 第三部分是动态链接库 wpcap dll 它也是提供给开发者的一个接口 但它是一个更高 层的编程接口 其调用与系统无关 使用此接口进行编程 几乎可以把 linux 下使用 libpcap 写的程序原封不动的搬到 Windows 平台下 网络驱动程序接口规范 NDIS Network Driver Interface Specification 是由微软和 3com 公司共同制定的 它位于网卡和协议层之间 提供一个接口 为上层协议提供服务 并且屏蔽了下层各种网卡的差别 并且支持多种网络协议 并且支持多种工作模式和网络 驱动类型 小端口驱动 中间层驱动 协议驱动 其中 Winpcap 的 NPF 就属于协议驱动 类型 NPF Netgroup Packet Filter NPF 是 Winpcap 的核心部分 它的主要功能就是捕获数据包 还可以发送数据包 存 储数据包以及对网络进行统计分析 图 2 4 NPF 的结构 图 2 4 中的箭头标识网络数据包的流动方向 并且可以看到 NPF 是工作在内核层的 NPF 由一个网络转发部件 从网卡驱动程序收集网络数据包 既可以发送给过滤部件 对 网络数据包进行过滤 也可以发送给统计部件 对网络进行统计分析 还可以发送给存储 陕西理工学院毕业设计 第 7 页 共 65 页 部件 把网络数据包直接存储到磁盘 数据包在 NPF 中使用了缓存机制 主要是为了提高 效率和速度 从图 2 4 中也可以看到 packet dll 位于 wpcap dll 的下层 是较低层的网络编程接口 使用它可以跟内核打交道 它是开发者与内核交互的一个很好的接口 Packet dll 提供了很 多功能复杂的编程接口 其接口形式与微软的 DDK 提供的 packet32 dll 差不多 使用 packet dll 比较烦琐 如果无特殊要求 一般不用 packet dll 进行编程开发 用的最多的还是 wpcap dll 因为它提供了一个更高级 更方便的编程接口 图 2 4 中 wpcap dll 是最上层的一个接口 与 libpcap 兼容 具有很好的可移植性 是 用的最多的一种编程接口 使用 wpcap dll 进行数据包捕获的编程与使用 Libpcap 一样简单 2 2 32 2 3 WinpcapWinpcap 数据结构数据结构 详细的一些数据结构在后面的软件编程中会给出 此处只是给出一些比较核心的数据 结构 并简单介绍 1 pcap addr Pcap addr 数据结构的定义如下 Tpyedef struct pcap addr pcap addr t Struct pcap addr Struct pcap addr next 指向下一个地址结点 Struct sockaddr addr 网络接口地址 Struct sockaddr netmask 地址掩码 Struct sockaddr broadaddr 广播地址 Struct sockaddr dstaddr 目的地址 此数据结构描述的是网络接口的地址 2 pcap if Pcap if 数据结构定义如下 Tpyedef struct pcap if pcap if t Struct pcap if Struct pcap if next 指向下一个网络接口结点 char name 网络接口名字 char description 描述信息 Struct sockaddr addresses 网络接口地址 Bpf u int32 flags 标记 此数据结构描述的是一个网络接口 它其实是网络接口链表中的一个结点 3 pcap pkthdr Pcap pkthdr 数据结构定义如下 Struct pcap pkthdr Struct timeval ts 时间戳 Bpf u int32 caplen 捕获长度 Bpf u int32 len 数据包长度 此数据结构用来描述每个捕获到的数据包的一些基本信息 每个数据包都有此数据结 构 2 2 42 2 4 WinpcapWinpcap 函数函数 Winpcap 提供的输出函数与 Libpcap 的函数完全一样 使用方法也一样 下面介绍一 陕西理工学院毕业设计 第 8 页 共 65 页 些主要的函数 1 网络接口函数 int pcap findalldevs pcap if t alldevsp char errbuf 此函数的功能是查找机器的所有可用网络接口 用一个链表返回 void pcap freealldevs pcap if t alldevs 此函数的功能是释放网络接口链表中的所有网络接口 pcap t pcap open live const char device int snaplen int promisc int to ms char ebuf 此函数的功能是打开一个网络接口进行数据包捕获打开的模式有 promisc 表示 如果 是 1 就表示以混杂模式把接口打开 2 规则函数 int pcap setfilter pcap t p struct bpf program fp 此函数设置 BPF 过滤规则 由参数 fp 确定 int pcap compile pcap t p struct bpf program program char buf int optimize bpf u int32 mask 此函数的功能是编译 BPF 过滤规则 3 数据包捕获函数 int pcap loop pcap t p int cnt pcap handler callback u char user 此函数是循环捕获网络数据包 直到遇到错误或者满足退出条件 每捕获一个数据包 就调用 callback 指示的回调函数 所以可以在回调函数中对捕获到的数据包进行操作 int pcap next ex pcap t p struct pcap pkthdr pkt header const u char pkt data 此函数的功能是捕获一个网络数据包 void pcap close pcap t p 此函数的功能是关闭 winpcap 操作 并销毁相应资源 4 文件相关函数 pcap dumper t pcap dump open pcap t p const char fname 此函数的功能是打开一个文件 并准备向其写入网络数据包数据 void pcap dump u char user const struct pcap pkthdr h const u char sp 此函数的功能是向文件中写入网络数据包内容 陕西理工学院毕业设计 第 9 页 共 65 页 3 3系统设计方案及功能描述系统设计方案及功能描述 3 13 1 系统设计方案系统设计方案 对于该软件的设计和执行过程 主要分为两个关键部分 所以按此要求分为中有两个 核心的工作步骤 第一步是调用 Winpcap 函数库实现下层抓包 这部分是为了实现网络中 的数据包获取 也是最基础的步骤 第二步是对所获取的数据包文进行分析和统计或是其 他操作 筛选出我们所需要的信息 下面分别列出两个核心过程 捕获过程 通过 winpcap 的调用从网络中获取数据包信息 步骤如下 第一 初始化 Winpcap 开发库 第二 获得当前的网卡列表信息 从列表中选取其中所需要的指定网卡 第三 获得当前的过滤规则 决定其过滤细节 但也可为空 第四 调用库函数 pcap loop 并同时指定其回调函数 所指定的回调函数其实 就是数据包分析过程 分析过程 将所获取的当前数据包信息转存后进行解析过程 步骤如下 第一 由上一步通过 winpcap 抓包 将抓包后得到的数据包后转存到内存里 满足以 后的使用和操作 第二 调用相符协议类型的数据包分析类 在概要设计中 按模型层的要求 构造了多个用于分析不同类型数据包的分析类模型 每个模型对应一种数据包类型 调用是按要求调用符合该数据包类型的指定模块 每个模 型中按对应的数据包类型构造分析算法 完成对本类型数据包的具体解析工作 第三 对数据包信息内容进行解析 过程如下 在数据包中 其前 14 个字节 Byte 表示为数据链路层的报文头 其报文格式是前 6 个字节 Byte 表示为目的 MAC 地址 随后的 6 个字节 Byte 表示为源 Mac 地址 最 后的 2 个字节 Byte 代表上层协议类型 这些重要的数据信息 是我们分析上层协议的 依据 根据所分析到的协议类型进行类似的迭代分析 这样就可以得到各层中的报文头信 息和数据信息 第四 结束本次分析 等待下一次调用 总体设计流程图如图 3 1 所示 启动程序 选择网卡 启动监听 不停的通过pcap loop抓包 通过调用各 Packet类来解析报文的包 增加相应的包类型计数 tcp或udp 将 捕获到的包的分析结果插入list中 开始监听线程 图 3 1 设计流程图 3 23 2 系统功能描述系统功能描述 开发的这个系统最主要也是最核心的功能就是对于网络数据包的捕获以及对于捕获到 陕西理工学院毕业设计 第 10 页 共 65 页 的网络数据包显示和简单的分析 实质是主要实现一个网络实时监听的功能 然后将捕捉 到的数据包保存下来以便进一步的分析使用 具体实现功能如下 1 通过使用 winpcap 库函数进行数据包的捕获 2 将捕获到的数据包进行分析并显示 3 解析出数据包使用的协议 源地址 目的地址 包的大小和内容等 4 在界面的列表中实时显示捕获到的数据包的情况 点击列表 可以展开此数据包 的详细信息 5 流量监控 6 导出数据 陕西理工学院毕业设计 第 11 页 共 65 页 4 4系统编码实现系统编码实现 4 14 1 网络数据包捕获模块的实现网络数据包捕获模块的实现 以太网具有共享介质的特征 信息是以明文的形式在以太网络上传输的 当网卡被设 置为混杂模式时 可以捕获任何一个在同一冲突域上传输的数据包 运用这一原理使网络 数据包捕获系统能够拦截到我们所要的信息 这是捕获数据包的物理基础 网卡具有 4 种 工作模式 广播模式 多播传送模式 直接模式 混杂模式 网卡的缺省工作模式包含广 播模式和直接模式 即它只接收广播帧和发给自己的帧 如果采用混杂模式 网卡将接受 同一网络内所有主机所发送的数据包 这样就可以到达对所有数据包进行捕获的目的 4 1 14 1 1 网络数据包捕获程序的编写过程网络数据包捕获程序的编写过程 1 获取本机已连接的网络适配器列表 WinPcap 提供了 pcap findalldevs ex 函数来实现这个功能 这个函数返回 pcap if 结 构的链表 每个这样的结构都包含了一个适配器的详细信息 值得注意的是 数据域 name 和 description 表示一个适配器名称和一个可以让人们理解的描述 int pcap findalldevs ex char source struct pcap rmtauth auth pcap if t alldevs char errbuf 2 打印网卡列表 for d alldevs d d d next printf d s i d name if d description printf s n d description else printf No description available n 3 选择网卡 一般的情况下都会检测到至少两块网卡 所以我们要选择我们正在使用的网卡设备 scanf d 输入要选择的网卡 if inum i 选端口输入错误 printf nInterface number out of range n pcap freealldevs alldevs 释放设备列表 return 1 4 跳转到选中的适配器 for d alldevs i 0 inext i 打开设备 if adhandle pcap open d name 设备名称抓包的设备 65536 65535 保证能捕获到不同数据链路层上的 每个数据包的全部内容 1 PCAP OPENFLAG PROMISCUOUS 混杂 模式 0 10000 读取超时时间 陕西理工学院毕业设计 第 12 页 共 65 页 NULL 远程机器验证 errbuf 错误缓冲池 NULL fprintf stderr nUnable to open the adapter s is not supported by WinPcap n d name pcap freealldevs alldevs 释放设备列表 return 1 5 打开捕获的数据存储的文件 dumpfile pcap dump open adhandle fileway 打开文件 6 循环捕获并存储 pcap freealldevs alldevs 循环捕获数据并调用 packet handler 函数把数据存储到堆文件 const struct pcap pkthdr header const u char pkt data pcap loop adhandle 1 packet handler unsigned char dumpfile 利用 adhandle 描述符 pcap close adhandle 关闭抓包过程 return 0 void packet handler u char dumpfile const struct pcap pkthdr header const u char pkt data pcap dump dumpfile header pkt data 此函数功能将数据报存储到堆文件 4 1 24 1 2 在程序中用到的在程序中用到的 WinPcapWinPcap 内核函数详细介绍内核函数详细介绍 1 pcap if 结构体 struct pcap if struct pcap if next char name char description struct pcap addr addresses bpf u int32 flags 结构体成员个变量意义 struct pcap if next 如果不为空 指向下一成员列表 为空则为最后一个成员列表 char name 指向一个字符串提供的名称装置传递给 pcap open live char description 如果不为空 则指向一个可让人理解的描述字符串 u int flags PCAP IF LOOPBACK 的接口标示 2 pcap findalldevs ex int pcap findalldevs ex char source struct pcap rmtauth auth pcap if t alldevs char errbuf char source 用来查找适配器 陕西理工学院毕业设计 第 13 页 共 65 页 struct pcap rmtauth auth 一个指针到 pcap rmtauth 结果体 This pointer keeps the information required to authenticate the RPCAP connection to the remote host 这指针保持必要 的资料 验证 RPCAP 连接到远程主机 This parameter is not meaningful in case of a query to the local host in that case it can be NULL 这个参数在没有意义的情况下查询本地主机 在 这种情况下 它可以是 NULL pcap if t alldevs 返回一个 pcap if 结构的链表 char errbuf 一旦错误将返回错误信息 通常 编写基于 WinPcap 应用程序的第一件事情 就是获得已连接的网络适配器列表 libpcap 和 WinPcap 都提供了 pcap findalldevs ex 函数来实现这个功能 这个函数返回一 个 pcap if 结构的链表 每个这样的结构都包含了一个适配器的详细信息 值得注意的是 数据域 name 和 description 表示一个适配器名称和一个可以让人们理解的描述 当我们完成了设备列表的使用 我们要调用 pcap freealldevs 函数将其占用的内存资 源释放 3 adhandle pcap open adhandle pcap open d name 设备名称抓包的设备 65536 65535 保证能捕获到不同数据链路层上的每个数据包的全部内容 1 PCAP OPENFLAG PROMISCUOUS 混杂模式 10000 读取超时时间 NULL 远程机器验证 errbuf 错误缓冲池 4 pcap loop int pcap loop pcap t p int cnt pcap handler callback u char user pcap loop 非常像 pcap dispatch 唯一不同的是它将保留所有读到的包直到 cnt 个包 被处理或者发生错误 负数将使它永远循环 5 pcap dump dumpfile header pkt data 此函数功能将数据报存储到堆文件 4 1 34 1 3 网络数据包捕获的应用网络数据包捕获的应用 数据包捕获是进行网络分析的基础 具体来说 只有对网络上所传输的数据包有了定 量的分析 才可能完成诸如网络流量监测 网络故障分析 网络协议工作原理及过程分析 非法数据捕获与入侵检测 网络设备仿真等 网络数据包捕获的应用主要在以下几个方面 1 流量统计 WinPcap 的强大功能还在于它提供了流量分析与统计的功能 它能 够将局域网上所运行数据包的大小及多少进行定量的统计 在统计模式下工作的 WinPcap 可以在不捕获整个数据包的前提条件下高效快速地获得该数据包的大小 因而我们可以利 用 WinPcap 的这个特点统计出单位时间中网络上数据包数目及数据字节数 2 协议及数据内容分析 在上文中通过对过滤规则的设置 WinPcap 可以根据我 们的设置对特定协议的网络数据包进行过滤 当然 我们还可以进一步在对所捕获的数据 包进行分析的过程中选择某些特定的 IP 地址的数据包 这些都是可以实现的 而且在 WinPcap 中实现是比较简单的 专门捕获某一协议或某一主机的数据包 进而对数据进一 步分析就可以了解该类协议的工作过程及协议内容 这对网络管理人员来说是非常重要且 陕西理工学院毕业设计 第 14 页 共 65 页 基本的事情 3 IDS 中的应用 随着分布式网络的发展 入侵检测是成为维护网络安全的必不可 少的一环 人侵检测系统的基础离不开对网络数据包的解析 只有对网络上所运行的数据 包有了深刻的认识和掌握 才能够发现和阻止攻击行为 以达到保护网络的目的 很显然 数据包捕获是人侵检测系统信息的重要来源之一 4 24 2 网络数据包分析模块的实现网络数据包分析模块的实现 网络数据包分析模块的设计思想是将 WinPcap 捕获到的数据对应网络数据包的格式进 行初始化 取得具体的值 并输出到界面 数据分析模块主要实现数据的解析 从网络适 配器中捕获数据的为原始数据 这些原始数据为二进制格式 必须转化为能比较好明白的 格式 这就要求将这些原始数据能按照网络数据传输的具体格式来保存 主要为了能较好 的读懂相关的信息 以便使用者分析 4 2 14 2 1 网络数据包分析模块主要建立的类网络数据包分析模块主要建立的类 网络数据包分析模块实现时 本系统提取的数据包中主要的一些信息 为了实现这个 功能 特此构造了几种数据包分析类 用于分析这几种常见常用的数据包 在提取获得的 数据包信息后 按照不同的数据包类型 相应的调用构建好的数据包分析类 对所获取的 该类型数据包进行分别处理 这几种类根据控制层控制 从抓包开始到结束 一直重复调用 分门别类的处理各自 相应数据包 并通过主界面显示 如表 4 1 所示 表 4 1 分析类表 类名作用 CFramePacket 类 构造函数 CFramePacket CFramePacket const unsigned char buf int buflen 用于处理链路层数据 分析数据包的类型 CIPPacket 类 构造函数 CIPPacket const unsigned char buf int buflen 中实现通过调用 已获取的 IP 包数据 分析 IP 包中的各项参数 CTCPPacket 类 构造函数 CTCPPacket unsigned char buf int buflen 实现通过调用已获 取的 TCP 包数据 分析 TCP 包中的各项参数 CUDPPacket 类 构造函数 CUDPPacket unsigned char buf int buflen 实现通过调用已获 取的 UDP 包数据 分析 UDP 包中的各项参数 CARPPacket 类 构造函数 CARPPacket const unsigned char buf const unsigned int buflen 实现通过调用已获取的 ARP 包数据 分析 ARP 包中的各项参数 其中 buf 指向该数据包的数据内容 buflen 代表其数据长度 由这两个变量构造算法 变换进制 对数据包逐层解析出所含信息 版本号 头部长度 服务类型 优先级等等 4 2 24 2 2 IPIP 协议分析类的设协议分析类的设计计 IP 协议的基本功能 寻址 路由选择和数据包的分割和组装 它不提供可靠的传输服 务 依据 IP 报文格式在程序中声明 IP 报头以及进行类的设计 程序如下 class CIPPacket IP 数据包类 private intm nVersion 版本 intm nHeaderLength 头部长度 intm nServiceType 服务类型 type of service intm nPrecedence 优先级 bool m bDelay 延迟 bool m bThroughtPut 吞吐量 bool m bReliability 可靠性 陕西理工学院毕业设计 第 15 页 共 65 页 unsigned int m uTotalLength 总长 total length intm nIdentification 标识 bool m bDF 不要分段 bool m bMF 还有进一步的分段 intm nFragOffSet 分段偏移 fragment offset intm nTTL 生命期 time to live intm nProtocol 协议 如 TCP UDP unsigned int m nCheckSum 头部校验和 long m lSrcIP 源 IP 地址 long m lDestIP 目的 IP 地址 intm nOptLength 选项长度 unsigned char m pOptions 选项内容 intm nDataLength 数据长度 unsigned char m pData 数据内容 public CIPPacket CIPPacket const unsigned char buf int buflen virtual CIPPacket public CStringGetProtocol CStringGetDestIP CStringGetSrcIP unsigned char Ge

温馨提示

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

评论

0/150

提交评论