




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学学 位位 论论 文文 网络数据包捕获工具的设计与实现网络数据包捕获工具的设计与实现 论论文作者姓名 文作者姓名 申申请请学位学位专业专业 申申请请学位学位类别类别 指指导导教教师师姓姓名名 职职称称 论论文提交日期 文提交日期 网络数据包捕获工具的设计与实现网络数据包捕获工具的设计与实现 摘摘 要要 网络数据包的捕获对于网络安全有着巨大的作用 为我们更好的分析网络 中的数据流提供了帮助 本论文是基于 Windows 下开发一个网络监听工具 侧重点在于实现网络数 据包的捕获 然后分析并显示捕获到的数据包信息这部分功能的实现 如分析 IP 首部协议类型 源 IP 目的 IP 和端口号等 数据包的捕获是实现防火墙 网络协议的分析或者网络监听等等功能的核心内容 一般可以采用 Winsock 编 程 Winpcap 或者 NDIS 网络接口驱动来实现 采用的是 Winpcap Windows Packet Capture 来实现的抓包功能 Winpcap 是 Windows 平台下一个专业网络数据包捕获开发包 是为 Libpcap 在 Windows 平台下实现数据包捕获而设计的 Winpcap 功能更加强大 不仅具备了 Libpcap 的功能 还具有一些其他功能 通过 VC 6 0 中 MFC 编程实现通过一个完整界面来控制调用 Winpcap 中 的函数来实现对网卡信息的捕获和循环捕获数据包 然后通过预先对于 IP TCP UDP 等数据包的定义和 TCP IP 等协议来解析其中包含的内容并返回 显示捕获到数据包的信息 当然也可以保存捕获到的数据包到指定地点以便进 一步分析 关键词关键词 Winpcap NPF VC 6 0 TCP IP 计算机网络 The Design and Implementation of Capture Tool of Network Data Packets 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 The capture of data packets is the basis of realizing the analysis of network protocol and network monitoring Generally it can be realized via Winsock and Winpcap programming or NDIS Use the Winpcap Windows Packet Capture to capture of data packets Winpcap is a professional developing program based on Windows which is designed to help you to capture the data packs via Libpcap Winpcap is much more powerful It not only has integrated all the functions of Libpcap but also has some advanced functions 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 NPF Visual C 6 0 TCP IP Computer Network 目目 录录 论文总页数 27 页 1 引言 1 1 1课题背景 1 1 2国内外研究现状 1 1 3课题研究的意义 1 2设计理论依据 2 2 1OSI 与协议族 2 2 2面向对象和可视化编程 4 2 3WINPCAP开发技术详解 5 2 3 1Winpcap 介绍 5 2 3 2Winpcap 的组成 5 2 3 3Winpcap 数据结构 7 2 3 4Winpcap 函数 8 3设计方案与系统功能描述 10 3 1设计方案 10 3 2功能描述 11 3 3系统流程图 12 4编码实现 12 4 1WINPCAP环境设置 12 4 2MFC 控件相关 14 4 3定时器和系统时间的获得 15 4 4捕获并显示本机信息 16 4 5捕获数据包及相关操作 17 5软件测试与结果 22 5 1网卡信息获取 22 5 2整合到 MFC 界面中的程序测试 23 结 论 24 参考文献 25 致 谢 26 声 明 27 第 1 页 共 27 页 1 1 引言引言 1 11 1 课题背景课题背景 随着网络技术的飞速发展 网络的普及 给我们带来了巨大的社会和经济 效益 同时网络安全问题变得日益严重 计算机网络的设计 维护难度日益增 加 安全问题正威胁着每一个网络用户 对网络安全的研究也越来越重要 因 此 人们迫切的需要能够分析 诊断和测试网络的工具 以及保护我们的电脑 尽可能的减少收到侵害的堡垒 防火墙 对于网络数据包的捕获现在也有着 很多的实现方法 存在着许多开源的 sniffer 软件供我们参考 但是其中的某 些细节上还是有一些问题的存在 在效果和效率上都有一些问题 分析上也并 不是很方便 所以尝试选择了这个课题 1 21 2 国内外研究现状国内外研究现状 现在不论是网上的一些开源的 Sniffer 软件还是市面上出售的网络监听软 件 其实其基础功能都是基于网络数据包捕获功能后扩展开的 所以我们可以 清晰的认识到网络数据包捕获功能的巨大作用和广泛的应用范围 目前 sniffer 软件种类繁多 但是很多都存在一些问题 比如说 效率低 效果差 分析困难等等 有些 sniffer 软件往往嵌入许多并不怎么使用的功能在里面 增加了操作的复杂性 使用起来反而不便 所以真正想要找到一款操作简单使 用方便的数据包捕获软件并不容易 作为一名网络工程专业的学生 熟悉常用 的各种计算机相关软件 特别是和网络相关的软件是应该的 现在市场上的国 内外的各种防火墙软件 网络监听软件和协议分析软件等软件种类繁多 让人 有点眼花缭乱 这些产品大多数品质都不错 各有各的特点 所以选择起来的 难度也挺大 我总是在一些比较著名的软件下载网站上获取一些比较受好评的 软件来使用 然后从中选择适合自己的 通过一系列的使用和学习 我希望能 够自己完成一款功能适合自己使用的操作简单让人可以轻易上手的网络数据包 捕获和简单分析的软件 1 31 3 课题研究的意义课题研究的意义 随着网络的飞速发展 Internet 的迅速普及 网络已经深入到了我们的生 活 跟我们息息相关 伴随着网络带来的便利 网络安全问题也越来越受到人 们的关注和重视 防火墙也成了一个非常热门的课题 带来巨大的社会经济效 益 保护我们的合法权益不受到侵害 我选择的课题是 windows 下的网络数据 包的捕获工具的开发和实现 所以主要的研究方向和侧重点是在于最基本也是 最核心的网络数据包的捕获和分析等功能上 网络数据包的捕获在于网络安全 领域有着无可代替的重要作用 不论是防火墙技术 网络监听技术或者是网络 测试都离不开数据包的捕获 这是一切的基础 其他的功能都要基于这个功能 第 2 页 共 27 页 才能实现 2 2设计理论依据设计理论依据 2 12 1OSIOSI 与协议族与协议族 要想轻松搞定抓包程序 除了要有良好的编程能力 还要有扎实的理论知 识 特别是计算机网络方面的知识 必须要明白数据包在网络中是怎么传送的 通过什么协议 运作在哪一层 当然还要了解数据包的特点 方便你能更好的 获得有用的信息 学习计算机网络的我想大都应该知道著名的 OSI 体系结构 OSI 模型有点 太过理想化和复杂 在时下 Internet 网体系结构非常流行并将其取而代之 物理层 涉及在物理信道上传输原始比特 处理与物理传输介质有关的机 械的 电气的和过程的接口 数据链路层 分为介质访问控制 MAC 和逻辑链路控制 LLC 两个子层 MAC 子层解决广播型网络中多用户竞争信道使用权问题 LLC 的主要任务是将有 噪声的物理信道变成无传输差错的通信信道 提供数据成帧 差错控制 流量 控制和链路控制等功能 网络层 负责将数据从物理连接的一端传到另一端 即所谓点到点 通信 主要功能是寻径 以及与之相关的流量控制和拥塞控制等 传输层 主要目的在于弥补网络层服务与用户需求之间的差距 传输层通 过向上提供一个标准 通用的界面 使上层与通信子网 下三层 的细节相隔 离 传输层的主要任务是提供进程间通信机制和保证数据传输的可靠性 会话层 主要针对远程终端访问 主要任务包括会话管理 传输同步以及 活动管理等 表示层 主要功能是信息转换 包括信息压缩 加密 与标准格式的转换 以及上述各操作的逆操作 等等 应用层 提供最常用且通用的应用程序 包括电子邮件 E mail 和文电 传输等 对于网络方面的知识应该予以一定的了解 也许你在学习的时候没有发觉 它的具体作用 但是当你一旦在实践中遇到了运用到了就会豁然开朗 发现原 来一切是这么回事 实践才是检验真理的最佳途径 第 3 页 共 27 页 下面两幅图图 1 和图 2 中我们可以看到现在风靡世界的 Internet 网的结构 跟著名的 OSI 之间的区别和共同之处 图 1 TCP IP 体系结构 下面是 OSI 和 TCP IP 结构的对比 图 2 OSI 与 Internet 协议族 值得注意的是 在一些问题的处理上 TCP IP 与 OSI 是很不相同的 例如 1 TCP IP 一开始就考虑到多种异构网的互连问题 并将网际协议 IP 作为 TCP IP 的重要组成部分 但 ISO 和 CCITT 最初只考虑到全世界都使用同一种统 第 4 页 共 27 页 一的标准公用数据网将各种不同的系统互联起来 后来 ISO 认识到网际协议 IP 的重要性 却已经来不及了 Internet 网的超迅猛发展给了 OSI 重重一击 投 入了巨大资源 ISO 当然不愿放弃自己定义的标准为了补救只好在网络层中划分 出一个子层来完成类似 TCP IP 中 IP 的作用 2 TCP IP 一开始就对面相连接服务和无连接服务并重 而 OSI 在开始时只 强调面向连接这一种服务 一直到很晚才开始制定另一种无连接服务的有关标 准 2 22 2面向对象和可视化编程面向对象和可视化编程 面向对象技术是软件技术的一次革命 在软件开发史上具有里程碑的意义 随着 OOP 面向对象编程 向 OOD 面向对象设计 和 OOA 面向对象分析 的 发展 最终形成面向对象的软件开发方法 OMT ObjectModellingTechnique 这是一种自底向上和自顶向下相结合的方法 而且它以对象建模为基础 从而 不仅考虑了输入 输出数据结构 实际上也包含了所有对象的数据结构 所以 OMT 彻底实现了 PAM 没有完全实现的目标 不仅如此 OO 技术在需求分析 可 维护性和可靠性这三个软件开发的关键环节和质量指标上有了实质性的突破 彻底地解决了在这些方面存在的严重问题 从而宣告了软件危机末日的来临 面向对象的程序设计是结构化语言的自然延伸 面向对象程序设计中通过 定义基本的功能模块 类 使得物质世界中的对象被有机的分解 然后遵循一 定的原则用程序将模块组合 装配 扩充 达到按用户的要求 将现实世界中 的对象以软件形式部分或全部实现 OOP 的先进编程方法为一般用户和其他的 程序员提供了可以在其他的程序中使用以经设计好的模块 类的机会 这样就 完全不必重新编制大量重复的程序代码 这种程序设计方法可使用开发时间大 大地缩短 切实地提高编程人员的工作效率 Visual C 自诞生以来 一直是 Windows 环境下最主要的应用开发系统之 一 Visual C 不仅是 C 语言的集成开发环境 而且与 Win32 紧密相连 所 以 VC 开发系统可以完成各种各样的应用程序的开发 从底层软件直到上层直 接面向用户的软件 而且其强大的调试功能也为大型复杂软件的开发提供了有 效的排错手段 可视化 Visual 技术得到广泛的重视越来越多的人开始研究可视化技术 所谓可视化技术 一般是指软件开发阶段的可视化和对计算机图形技术和方法 的应用 我采用 VC 6 0 的 MFC 来实现通过界面控制程序的运行 之所以采用 VC 来实现是因为 1 界面设计简单 第 5 页 共 27 页 2 面向对象编程 比较容易实现 3 很容易调用 Windows 自身的函数 4 后台存取规则容易 5 所见即所得 2 32 3WinpcapWinpcap 开发技术详解开发技术详解 2 3 12 3 1 Winpcap 介绍介绍 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 网络协议分析软 件 等 开发 Winpcap 这个项目的目的在于为 Win32 应用程序提供访问网络底层的 能力 其核心功能是捕获网络数据包 其他功能包括数据包过滤 数据包发送 流量统计和数据包存储等 Winpcap 给程序员提供了一套标准的网络数据包捕 获的编程接口 并且与 Libpcap 兼容 增加了从 linux 到 windows 平台的可移 植性 而且提供很高的应用效率 充分考虑了各种性能和效率的优化 在内核 层实现了数据包的捕获和过滤 这是由 NPF 来实现的 NPF 是 Winpcap 的核心 部分 它实现了内核层次的统计功能 对于设计网络流量的程序很有好处 在这里我使用的是 WinPcap 3 1 版 性能稳定 2 3 22 3 2 Winpcap 的组成的组成 Winpcap 包括三部分内容 第一部分是内核层的数据包过滤模块 它相当于在 Linux 下 Libpcap 使用 的 BPF 过滤模块 实现了高效的网络数据包的捕获和过滤功能 其过滤规则跟 BPF 是一样的 此过滤模块实际上是一个驱动程序 被称为 NPF Netgroup Packet Filter 数据包驱动程序 第二部分是动态链接库 packet dll 它是提供给开发者的一个接口 使用 它就可以调用 Winpcap 的函数 它是一个较低层的开发接口 第三部分是动态链接库 wpcap dll 它也是提供给开发者的一个接口 但 它是一个更高层的编程接口 其调用与系统无关 使用此接口进行编程 几乎 可以把 linux 下使用 libpcap 写的程序原封不动的搬到 Windows 平台下 第 6 页 共 27 页 网络驱动程序接口规范 NDIS Network Driver Interface Specification 是由微软和 3com 公司共同制定的 它位于网卡和协议层之间 提供一个接口 为上层协议提供服务 并且屏蔽了下层各种网卡的差别 并且 支持多种网络协议 并且支持多种工作模式和网络驱动类型 小端口驱动 中 间层驱动 协议驱动 其中 Winpcap 的 NPF 就属于协议驱动类型 NPF Netgroup Packet Filter NPF 是 Winpcap 的核心部分 它的主要功能就是捕获数据包 还可以发送 数据包 存储数据包以及对网络进行统计分析 图 3 NPF 的结构 图 3 中的箭头标识网络数据包的流动方向 并且可以看到 NPF 是工作在内 核层的 NPF 由一个网络转发部件 从网卡驱动程序收集网络数据包 既可以 发送给过滤部件 对网络数据包进行过滤 也可以发送给统计部件 对网络进 行统计分析 还可以发送给存储部件 把网络数据包直接存储到磁盘 数据包 在 NPF 中使用了缓存机制 主要是为了提高效率和速度 第 7 页 共 27 页 从图 3 中也可以看到 packet dll 位于 wpcap dll 的下层 是较低层的网 络编程接口 使用它可以跟内核打交道 它是开发者与内核交互的一个很好的 接口 Packet dll 提供了很多功能复杂的编程接口 其接口形式与微软的 DDK 提供的 packet32 dll 差不多 使用 packet dll 比较烦琐 如果无特殊要求 一般不用 packet dll 进行编程开发 用的最多的还是 wpcap dll 因为它提供 了一个更高级 更方便的编程接口 图 3 中 wpcap dll 是最上层的一个接口 与 libpcap 兼容 具有很好的 可移植性 是用的最多的一种编程接口 使用 wpcap dll 进行数据包捕获的编 程与使用 Libpcap 一样简单 2 3 32 3 3 Winpcap 数据结构数据结构 详细的一些数据结构在后面的软件编程中会给出 此处只是给出一些比较 核心的数据结构 并简单介绍 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 标记 第 8 页 共 27 页 此数据结构描述的是一个网络接口 它其实是网络接口链表中的一个结点 3 pcap pkthdr Pcap pkthdr 数据结构定义如下 Struct pcap pkthdr Struct timeval ts 时间戳 Bpf u int32 caplen 捕获长度 Bpf u int32 len 数据包长度 此数据结构用来描述每个捕获到的数据包的一些基本信息 每个数据包都有此 数据结构 2 3 42 3 4 Winpcap 函数函数 Winpcap 提供的输出函数与 Libpcap 的函数完全一样 使用方法也一样 呵呵 也就是说掌握了其中任何一种那么恭喜你不论是 windows 下的还是 linux 下的你都已经迈出了坚实的一大步 至少我个人是这么认为的 下面介 绍一些主要的函数 1 网络接口函数 a int pcap findalldevs pcap if t alldevsp char errbuf 函数返回值 如果操作成功 就返回 0 失败就返回 1 参数描述 参数 alldevsp 表示网络接口链表 参数 errbuf 用来储存 错误信息 此函数的功能是查找机器的所有可用网络接口 用一个链表返回 b void pcap freealldevs pcap if t alldevs 函数返回值 无 参数描述 参数 alldevs 表示一个网络接口链表 此函数的功能是释放网络接口链表中的所有网络接口 c pcap t pcap open live const char device int snaplen int promisc int to ms char ebuf 函数返回值 返回一个 Libpcap 句柄 参数描述 参数 device 表示网络接口的名字 参数 snaplen 表示捕获 数据包的长度 参数 promisc 表示是否设置混杂模式 如 果赋值 1 就表示设置混杂模式 参数 to ms 表示等待时间 参数 ebuf 表示储存错误信息 此函数的功能是打开一个网络接口进行数据包捕获打开的模式有 promisc 表示 如果是 1 就表示以混杂模式把接口打开 第 9 页 共 27 页 2 规则函数 a int pcap setfilter pcap t p struct bpf program fp 此函数设置 BPF 过滤规则 由参数 fp 确定 b int pcap compile pcap t p struct bpf program program char buf int optimize bpf u int32 mask 此函数的功能是编译 BPF 过滤规则 说明 此处的过滤规则只是在内核中过滤显示协议信息 并非过滤数据包 并不能做到对数据包的阻塞功能 要想过滤数据包可以采用 NDIS 网络 驱动在更底层来实现 所以我并没由添加这部分功能 这里只是提出 来说明下有这些功能 3 数据包捕获函数 a int pcap loop pcap t p int cnt pcap handler callback u char user 函数返回值 操作成功返回 0 失败返回负数 参数描述 参数 p 表示 winpcap 的句柄 参数 cnt 为捕获数据包的个 数如果为 1 则表示无限个 参数 callback 表示回调函数 参数 user 表示回调函数中传输的参数 此函数是循环捕获网络数据包 直到遇到错误或者满足退出条件 每 捕获一个数据包就调用 callback 指示的回调函数 所以可以在回调函 数中对捕获到的数据包进行操作 说明 由于 pcap loop 这个函数在没有数据包进出时会可能阻塞掉 而 且用 loop 会造成程序代码更加复杂 所以我采用的下面一个 pcap next ex 来循环抓包 b int pcap next ex pcap t p struct pcap pkthdr pkt header const u char pkt data 函数返回值 函数操作成功返回 1 如果超时就返回 0 失败则返回 1 或 2 参数描述 参数 p 表示 Winpcap 句柄 参数 pkt header 宝石数据包头 参数 pkt data 表示数据包 此函数的功能时捕获一个网络数据包 说明 winpcap next ex 从 winpcap next 发展的 更加简单好用 winpcap next 还要配合 pcap dispatch 来使用才能达到 Winpcap next ex 的效果 c void pcap close pcap t p 第 10 页 共 27 页 函数返回值 无 参数描述 参数 p 为 Winpcap 句柄 此函数的功能是关闭 winpcap 操作 并销毁相应资源 4 文件相关函数 a pcap dumper t pcap dump open pcap t p const char fname 此函数的功能是打开一个文件 并准备向其写入网络数据包数据 b void pcap dump u char user const struct pcap pkthdr h const u char sp 此函数的功能是向文件中写入网络数据包内容 3 3设计方案与系统功能描述设计方案与系统功能描述 3 13 1设计方案设计方案 在多方参考的情况下打算采用 Winpcap 和 Winsock 中的一种来实现抓包等 相应的功能 参考了 网络安全开发包详解 和 Windows 防火墙和网络封包 截获技术 这两本书后决定采用 Winpcap 来实现代码 Winpcap 中封装了许多 的功能 只需要直接调用 就像 java 中封装好的类一样 使用起来非常方便 通过 Microsoft Visual C 6 0 MFC 来实现可视化编程 通过一个简单的 界面来实现对于捕获网卡信息 本机 IP 地址 广播地址和子网掩码等信息的获 取显示 设置开始 停止按钮来实现对于抓包函数的调用的控制 在界面上获取 并显示系统当前时间 通过设置定时器每隔一秒钟触发一次获取当前系统时间 来实现一个时间显示 在开始 停止按钮中添加循环判断语句 并且设置一个 bool 型变量来控制是否开启抓包函数的调用 如果执行抓包函数 那么将捕获 到的数据包的信息保存并解析处里面的信息返回到 list 表中插入显示出来 如 果点击停止按钮则调用 pcap close 函数来实现关闭 winpcap 操作 大体的一 个设计思路就是这样子的 具体的各个功能实现在软件编码部分会详细讲解 下面部分 为了方便大家形象的理解其中的一些东西 会适当的结合一些 图片和代码来分类详细描述 下面的图 4 是开发初期的大体界面框架 第 11 页 共 27 页 图 4 MFC 控制界面 3 23 2功能描述功能描述 制作的这个软件的最主要也是最核心的功能就是对于网络数据包的捕获 对于捕获到的网络数据包显示和简单的分析 分析数据包的协议类型 是 TCP UDP 还是 ICMP 等 还有数据包的源 IP 目的 IP 还有端口号 时间戳 和包长等最后并将这些信息显示出来 实质是主要实现一个网络实时监听的功 能 然后将捕捉到的数据包保存下来以便进一步的分析使用 图 5 中为系统初 始化后加载各个模块的流程图 具体功能在后面章节中会分别详细说明 图 5 功能模块图 第 12 页 共 27 页 3 33 3系统流程图系统流程图 下图 6 是程序流程图 图 6 程序流程图 根据流程图可以清楚明白的看到每一步的流程 程序是怎么样执行下去的 有助于理解程序 4 4编码实现编码实现 4 14 1WinpcapWinpcap 环境设置环境设置 配置环境首先需要安装 Winpcap 所使用的是 Winpcap 3 1 exe 这个是必 须安装的 它是所有基于 Winpcap 的应用程序运行所必须的 还有就是 wpdpack zip 文件的解压了放在 D 毕业设计 KNIGHTG WPDPACK 中 它是 Winpcap 开发包文件 是设计基于 Winpcap 的应用程序的开发文件 该文件包 括开发用的头文件和静态链接库文件 是开发者要用到的 解压后会有几个文 件夹 其中 Include 文件夹中的是 Winpcap 的一些头文件 编程时必须把此 文件夹的路径包含到 Visual C 的包含头文件的路径中 文件夹 Lib 中是开发 程序时用刀的静态链接库 编程时此文件夹也必须包含到 Visual C 库文件路 径中 第 13 页 共 27 页 VC 环境下安装配置过程如下 1 添加路径 工具 Tools 选择 Options 目录 Directories 同下图图 7 进行设置 图 7 Winpcap 环境配置 1 这里添加路径要注意自己 Winpcap 安装时的 WPCAP 和 Include 的文件夹的 位置 要不然在代码编译和连接的时候都会报 Cannot open include file pcap h No such file or directory 刚开始写代码的时候就吃了这方面的 亏 对于这个 Winpcap 的环境配置不来 教程和相应的参考书籍里面写的非常 的模糊 当时配置起来选项和栏目又多不知道该要填在哪儿 对于一个 Winpcap 的初学者来说实在时有一定的难度 后来在 MSDN 论坛上面求教后才明 白该怎么弄 所以在论文中特别将这点加入进来 添加路径时要注意这里不仅要添加头文件相关的路径 还要加入 Libpcap 的的路径 否则编译过了 连接时也会报错 cannot open file wpcap lib 图 8 Winpcap 环境设置 2 第 14 页 共 27 页 2 设置工程参数 新建一个工程后 工程 Project 设置 Settings 选择 C C 在预处理程序定义 Preprocessor definition 里面添加 图 9 Winpcap 环境设置 3 WPCAP 即可 同理设置 link 如下图图 10 图 10 Winpcap 环境配置 4 4 24 2 MFCMFC 控件相关控件相关 通过设置不同的按钮来实现不同的控制功能 还可以通过设置 list 表来显 示信息 其中这里主要说下关于 list 表的问题 其他的控件都比较简单就不在 第 15 页 共 27 页 这里多说了 将 list 的属性中的 style 里查看选项改成了 report 格式 然后通过插入 语句来实现对表项中每一列显示信息种类的设置 设置监听状况表项 m list1 InsertColumn 0 T 协议类型 LVCFMT LEFT 60 m list1 InsertColumn 1 T 时间 LVCFMT LEFT 70 m list1 InsertColumn 2 T 包头长 LVCFMT LEFT 60 m list1 InsertColumn 3 T 源 IP 地址 LVCFMT LEFT 125 m list1 InsertColumn 4 T 目的 IP 地址 LVCFMT LEFT 125 m list1 InsertColumn 5 T 源端口号 LVCFMT LEFT 60 m list1 InsertColumn 6 T 目的端口号 LVCFMT LEFT 80 设置第一列为协议类型 然后第二到七列分别为捕获到数据包的时间戳 包头长度 源 IP 目的 IP 源端口号和目的端口号 然后在抓包函数执行后得到我们需要的信息后执行和列的插入来将数据返 回界面并显示出来 row m list1 GetItemCount row m list1 InsertItem row ip header proto 协议类型 m list1 SetItemText row 1 time1 捕获数据包的时间戳 m list1 SetItemText row 2 bag header len 包头长度 m list1 SetItemText row 3 sourceip 源 IP m list1 SetItemText row 4 desip 目的 IP m list1 SetItemText row 5 sourceport 源端口号 m list1 SetItemText row 6 desport 目的端口号 其中数据包的显示是通过定时器每隔一秒钟触发调用一次将捕捉到的数据 包信息返回插入到 list 表中 4 34 3定时器和系统时间的获得定时器和系统时间的获得 SetTimer 1 1000 NULL 设置定时器 1000ms 触发一次 CDialog OnTimer nIDEvent 获得系统当前时间 第 16 页 共 27 页 SYSTEMTIME tNow GetLocalTime m tc Format 2d 2d 2d tNow wHour tNow wMinute tNow wSecond UpdateData false 其中设置定时器放在程序的初始化里边 通过控件显示定时器每个一秒触 发一次获取当前时间函数所得到的时间 定时器的设置在捕获网络数据包函数 还将会使用到 后面会详细说明 4 44 4捕获并显示本机信息捕获并显示本机信息 int getnetworkcardinfo 捕获网卡信息函数 pcap findalldevs 将网卡描述传递到 Description 中 IP Address iptos structsockaddr in a addr sin addr s addr Submask iptos structsockaddr in a netmask sin addr s addr 通过下面的函数把 u long 型的数据转换可读的 IP 地址和子网掩码 char iptos u long in static char output IPTOSBUFFERS 3 4 3 1 定义 buffers 的大小 3 4 3 1 后面的 3 1 分别是代表 3 个 和 1 个结束符 static short which u char p p u char which which 1 IPTOSBUFFERS 0 which 1 sprintf output which d d d d p 0 p 1 p 2 p 3 输出 IP return output which 在初始化程序通过调用和文本设置语句将获取的本机信息传递到 MFC 界面 中显示出来 调用获取网卡及本机信息函数 getnetworkcardinfo 第 17 页 共 27 页 输出网卡基本信息 m des SetWindowText Description m ip SetWindowText IP Address m submask SetWindowText Submask m addressfamilyname SetWindowText Address Family Name 通过设置的文本框来接收并显示这些信息 4 54 5捕获数据包及相关操作捕获数据包及相关操作 接下来就是重中之重的数据包捕获等相关操作了 首先要了解一些基本信 息 以便更加容易理解这段代码 当然这里所给出的都是实现每一个功能的主 要代码 如头文件还有一些结构 TCP UDP 等首部的结构 的定义这里并没有 给出 这些东西将不会特别给出给出 如有需要可以自行参考 因为这些只是 一些 struct 定义而已 将各个首部中的各种相关属性定义到一起 所以这里为 了大家方便理解就形象化的把个首部的信息用 excel 作出了插入到这里大家可 以看看 代码中很多地方都用到了一些相关信息 图 11 IP 首部 图 12 TCP 首部 图 13 UDP 首部 第 18 页 共 27 页 从图 11 12 和 13 中可以轻易的看出每一种协议的数据包首部所包含的信 息 这些信息很多都是可以解析看到 也是我们分析判断的依据 不论是监听 网络状况还是防火墙的过滤规则安全策略 捕获数据包并分析其中所包含的内 容绝对都是其中的关键和绝对的前提 当初在写抓包程序这段代码的时候遇到了一定的问题 最开始打算通过 NDIS 网络驱动程序来实现这段代码 但是通过一段时间的初步学习鉴于对驱动 程序的各种特性的不了解最终在韩斌韩老师和宋波宋老师的建议下改用 Winpcap 来实现 刚开始在使用 Winpcap 来实现抓包功能的时候采用了 pcap loop 这个函 数来实现 但是当使用这个函数将抓包程序写出来的时候发现调用这个函数来 实现抓包功能的时候存在一定的缺陷 首先这个函数在没有数据包到来的时候 将会出现阻塞的情况 而且还会增加程序的复杂程度 基于回调包捕获机制的 pcap loop 在某些情况下是不错的选择 一般程序不大的情况下使用 但是在 一些情况下处理回调并不特别好 这会使程序变的复杂并且在象多线程或 C 类这些情况下它看起来到像一块绊脚石 于是同样用 pcap next ex 来编写了一个捕获网络数据包的小程序来实验 比较 最终决定是用 pcap next ex 来实现抓包功能 pcap next ex 是在 pcap next 的基础出现的 pcap next 因为 pcap next 有许多限制在很多 情况下并不鼓励用它 首先它的效率很低因为它隐藏了回掉方法并且还依赖于 pcap dispatch 这个函数 再次它不能够识别文件结束标志 EOF 所以对来自文 件的数据流它几乎无能为力 下面来看看这段代码 int CFirewallDlg capturebag pcap if t alldevs pcap if t d int i 0 char errbuf PCAP ERRBUF SIZE struct tm ltime char timestr 16 ip header ih 第 19 页 共 27 页 udp header uh u int ip len u short sport dport 重新获取网络接口链表 pcap findalldevs 跳转到选择的网卡 这里设置的默认可用网络接口为第二块 即本机的网卡 第一 块是拨号的 并且在这里给出遍历每一块网络接口的代码 可通过循环来实现 for d alldevs d d d next d alldevs d d next 打开网卡 adhandle pcap open live d name 网络接口名称 65536 捕获数据包的长度 1 混杂模式 1000 读取超时 errbuf 错误缓冲区 释放所有设备列表 pcap freealldevs alldevs 建立存储截获数据包的文件 pcap dumper t dumpfile dumpfile pcap dump open adhandle Packet dat 将捕获的信息保存到抓包程序所在目录下的 packet dat 中以便以后进一步分析使用 此处循环调用 pcap next ex 来接受数据报 res pcap next ex adhandle 转换时间戳为识别格式 ltime localtime 第 20 页 共 27 页 strftime timestr sizeof timestr H M S ltime 找到 IP 头的位置 ih ip header pkt data 14 14 为以太网首部的长度 ip len ih ver ihl uh udp header u char ih ip len 将端口信息从网络型转变为主机顺序 sport ntohs uh sport dport ntohs uh dport 将捕获到数据包时间戳赋给 time1 转换包头长 源 IP 目的 IP 源端口号 目的端口 号转换为可读格式 time1 timestr bag header len Format d header len sourceip Format d d d d ih saddr byte1 ih saddr byte2 ih saddr byte3 ih saddr byte4 desip Format d d d d ih daddr byte1 ih daddr byte2 ih daddr byte3 ih daddr byte4 sourceport Format d sport desport Format d dport 根据 IP 首部中的 8 位协议类型来判别上层协议的类型 switch ih proto case 1 ip header proto Format ICMP break case 2 ip header proto Format IGMP break case 6 ip header proto Format TCP break case 17 ip header proto Format UDP 第 21 页 共 27 页 break default ip header proto Format other break pcap dump unsigned char dumpfile header pkt data 将数据包内容依次写入 pcap dump open 指定的文件中 return 0 程序中很多函数的作用功能的实现和参数的作用都给出了相应的注释 所 以很多地方就不特别给出解释了 只给出个人认为比较不好理解的地方的一些 东西 可以看到通过上面的 Switch 语句可以确定上层协议的类型 从下面两幅图 图 14 和图 15 中可以看到数据包的封装和解析过程 图片的理解可以结合代码 部 图 14 数据包的封装和解析 分 而上面有介绍到了各个协议类型的首部信息 可以很清楚的看出数据到底 是如何被解读出来的 因此可以看出当捕获到数据包时按照图中箭头所指示的 方向 第 22 页 共 27 页 图 15 数据进入协议栈的封装过程 进行解析数据包 而 IP 首部中包含的各种协议类型的值将帮助我们分析出数据 包的协议类型 所以上面代码中的 switch 语句能够非常方便的判断出上层协议 的类型来 5 5软件测试与结果软件测试与结果 5 15 1网卡信息获取网卡信息获取 下面图 16 和图 17 是预先写的一个调试是否能够获得网卡信息和打开网卡 捕获数据包的测试程序的截图 运行程序后成功的扫描到本机上的信息 有两 块可用的网络接口 图中显示网络接口的描述 其中第一个是网号工具 第二 个是的本机网卡 提示选择接口号以便打开网卡开始捕获数据包 所以输入的 网卡所在选项即输入 2 图 16 测试截图 1 输入之后从下图中可以看到监听本机网卡然后成功的捕获到数据包并打印 出了结果 其中包括了源 目的 IP 地址 源 目的端口号 时间戳和包长 程 序运行成功功能实现 图 17 测试截图 2 第 23 页 共 27 页 图 16 中的测试程序中可以选择网卡号来打开指定的网卡 但是在 MFC 却要 直接运行就开始抓包 也就是说选择打
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学习习惯的重要性与培养方法议论文4篇
- 项目评估及可行性分析工具包
- 故乡食物背后的文化意蕴教学教案
- 大数据分析平台建设与应用服务协议
- 高效兑现合同承诺函(7篇)
- 农业生产社会化服务协议书
- 销售团队业绩分析报告模板含销售策略建议
- 售后服务流程与满意度评价表
- 基于人工智能的金融风险管理服务协议
- 分布式海量数据并行传输:技术、挑战与突破
- 面部桃花灸培训专业知识课件
- (2025)汽车驾驶员(技师)考试题库及答案
- 应急预案试题及答案
- 人工智能在威胁情报中的应用-洞察及研究
- 2025年教科版(2024)小学科学二年级上册(全册)教学设计(附目录)
- 阳光体育大课间知识培训课件
- 2025年玉树州公安局面向社会公开招聘警务辅助人员(第二批)考试参考试题及答案解析
- 建筑工程临电监理细则
- 四川省绵阳市涪城区绵阳南山中学2025-2026学年高三上学期开学英语试题(含答案无听力音频有听力原文)
- 乡级增补叶酸培训课件
- 家庭劳动教育的制度性困境与教育主体重构研究
评论
0/150
提交评论