ARP包的封装、发送、捕获与解析软件开发 毕业论文.doc

上传人:小小飞 文档编号:3901326 上传时间:2019-10-09 格式:DOC 页数:43 大小:297.52KB
返回 下载 相关 举报
ARP包的封装、发送、捕获与解析软件开发 毕业论文.doc_第1页
第1页 / 共43页
ARP包的封装、发送、捕获与解析软件开发 毕业论文.doc_第2页
第2页 / 共43页
ARP包的封装、发送、捕获与解析软件开发 毕业论文.doc_第3页
第3页 / 共43页
ARP包的封装、发送、捕获与解析软件开发 毕业论文.doc_第4页
第4页 / 共43页
ARP包的封装、发送、捕获与解析软件开发 毕业论文.doc_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《ARP包的封装、发送、捕获与解析软件开发 毕业论文.doc》由会员分享,可在线阅读,更多相关《ARP包的封装、发送、捕获与解析软件开发 毕业论文.doc(43页珍藏版)》请在三一文库上搜索。

1、ARP 包的封装、发送、捕获与解析软件开发 摘 要 互联网络是时代需求的产物,随着社会需求的不断增长,互联网络技 术得到飞速发展,网络规模急剧膨胀,通过研究网络协议来提高网络通信 的安全性变得非常重要。 ARP 协议是 TCP/IP 协议栈中一个非常重要的网络通信协议。在透彻理 解 ARP 协议,深入了解 ARP 协议的分组格式和 ARP 的工作流程,熟悉 Winpcap 编程的基础上,本文设计开发了一个 ARP 包的封装、发送、捕获 与解析软件,该软件主要用于辅助教学。程序是在 Windows 环境下使用 Visual C+6.0 和 WinPcap 网络编程工具编写的,在程序测试阶段则使用

2、 了网络管理工具 Sniffer 对程序的运行结果和效率进行了测试。本文还对 WinPcap 以及 Sniffer 进行了简要介绍,并且在本文最后总结了开发程序 过程中遇到的一些问题和解决办法,希望可以为学习网络编程和相关技术 的人提供帮助。 关键词关键词:ARP 协议;WinPcap;ARP 数据包;Sniffer ABSTRACT Internet is the product of the times demand.With the increasing growing of social needs,Internet technologies is rapidly developing

3、 and the network size is rapidly expanding.It is important to improve the security of the network communications through studying network protocols. Arp is a very important network communications protocol in TCP/IP protocols.With the understanding of the Arp protocol and Arp-format and the ARP workf

4、low and Familiaring with Winpcap programming,I designed and developed a software, which is a software of packaging Arp packets, senting,catching and analyzing.This software is used to teaching.This procedure is programmed using Visual C+ 6.0 and WinPcap in Windows environment.In the testing stage,Sn

5、iffer is used to text the result of this procedure and the efficiency of this procedure.This paper also introduces WinPcap and Sniffer,and concludes that some of the problems encountered in the procedure and their solutions in the end of this paper.I hope that these questions can provide assistance

6、for the people who is learning network programming and related technologies. Keywords: ARP protocol; WinPcap; ARP packet; Sniffer 目 录 第 1 章 前言.1 1.1 课题研究的意义 1 1.2 课题的研究现状 1 1.3 课题研究的工作任务和预期结果 1 第 2 章 ARP 协议概述 .2 2.1 TCP/IP 协议栈2 2.2 ARP 协议的引入.3 2.3 ARP 协议的原理.4 2.3.1 ARP 的分组格式.5 2.3.2 ARP 协议的工作流程.6 第

7、3 章 SNIFFER 软件简介 .8 3.1 SNIFFER概述 8 3.2 SNIFFER功能简介 8 3.2.1 Sniffer 封装功能介绍.8 3.2.2 Sniffer 捕获功能介绍.9 第 4 章 网络编程工具12 4.1 WINPACP概述 .12 4.2 WINPCAP的结构.14 4.3 WINPCAP的安装使用方法 .15 第 5 章 软件开发17 5.1 需求规格说明 .17 5.1.2 引言 .17 5.1.2 数据描述 .17 5.1.3 功能需求 .18 5.2 概要设计说明 .19 5.3 详细设计说明 .19 5.4 代码实现 .24 5.4.1 本文系统的开

8、发环境 .25 5.4.2 封装 ARP 包的函数 .25 5.4.3 发送 ARP 包的函数 .27 5.4.4 捕获、解析 ARP 包的函数 .27 5.5 测试 .28 5.5.1 封装测试 .28 5.5.2 发送测试 .29 5.5.3 捕获测试 .30 5.5.4 解析测试 .30 5.6 与 SNIFFER的比较 32 第 6 章 毕业设计中遇到的问题及解决办法34 第 7 章 结论36 致谢.38 参考文献.39 1 第 1 章 前 言 1.1 课题研究的意义 虽然 Sniffer 是一个功能强大的网络管理工具,但是正是由于它功能 强大的原因,它运行时占有的资源也是很大的,因此

9、在某些方面做的不是 很好,比如在捕获数据包的时候,由于它消耗的资源很大,因此当它捕获 到数据包的时候并不能及时处理这些数据包,只能把这些数据包丢掉,这 样对于我们教学来说并不是有利的,因此为了能够更好的帮助大家了解、 掌握 ARP 协议及其运作过程,本人在透彻理解 ARP 协议和熟悉 Winpcap 编 程的基础上,设计开发了一个 ARP 包的封装、发送、捕获与解析软件用于 辅助教学。 1.2 课题的研究现状 虽然 ARP 地址解析协议的定义已经给出了非常明确的解释,但是由于 该协议工作在网络层以下的链路层上,是属于较底层的协议,国内外很少 有人关心该协议的数据包通信过程,也正是因为这个原因,

10、该协议下的攻 击往往不容易被发现。随着网络攻击技术的发展,网络黑客越来越侧重于 用采用较底层的协议,而且这种危害也日趋严重,比如现在的 ARP 欺骗技 术1就是一个典型的例子。该技术主要是利用 ARP 协议中协议漏洞伪装目 标主机的 MAC 地址非法窃取该主机的信息或者破坏该主机的正常的网络通 信。鉴于这种现状,ARP 协议的研究变得非常的重要,只有准确全面的研 究 ARP 协议,解决 ARP 协议通信安全问题才能更好的提高网络通信的安全 性2。 1.3 课题研究的工作任务和预期结果 (1)构造 ARP 包,选择并打开网卡,将 ARP 包发送出去; (2)获取网络中的 ARP 数据包; (3)

11、解析数据包的内容,将结果标准输出,并同时写入日志文件; 2 (4)与 Sniffer 做对比,测试和评价该软件。 第 2 章 ARP 协议概述 2.1 TCP/IP 协议栈 TCP/IP 协议包含了一系列构成互联网基础的网络协议。这些协议最早 发源于美国国防部的 ARPA 互联网项目。TCP/IP 字面上代表了两个协议: TCP 传输控制协议和 IP 互联网协议3。 时间回放到 1983 年 1 月 1 日,在这天,互联网的前身 Arpanet 中, TCP/IP 协议取代了旧的网络核心协议 NCP(Network Core Protocol) ,从 而成为今天的互联网的基石。最早的的 TCP

12、/IP 由 Vinton Cerf 和 Robert Kahn 两位开发,慢慢地通过竞争战胜了其它一些网络协议的方案,比如国 际标准化组织 ISO 的 OSI 模型。 TCP/IP 成功的另一个因素在与对为数众多的低层协议的支持。这些低 层协议对应与 OSI 模型中的第一层(物理层)和第二层(数据链路层) 。每 层的所有协议几乎都有一半数量的支持 TCP/IP,例如:以太网(Ethernet) , 令牌环(Token Ring) ,光纤数据分布接口(FDDI) ,端对端协议(PPP) , X.25,帧中继(Frame Relay) ,ATM,Sonet,SDH 等。 TCP/IP 协议并不完全

13、符合 OSI 的七层参考模型。传统的开放式系统互 连参考模型,是一种通信协议的 7 层抽象的参考模型,其中每一层执行某一 特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这 7 层 是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。 而 TCP/IP 通讯协议采用了 4 层的层级结构,每一层都呼叫它的下一层 所提供的网络来完成自己的需求。这 4 层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP) 、文件传 输协议(FTP) 、网络远程访问协议(Telnet)等。 传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协 3 议(TCP) 、用户数

14、据报协议(UDP)等,TCP 和 UDP 给数据包加入传输数据 并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并 接收。 互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都 能够到达目的主机(但不检查是否被正确接收) ,如网际协议(IP) 。 网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如 Ethernet、Serial、Line 等)来传送数据。 2.2 ARP 协议的引入 在任何时候,当主机或路由器有数据报要发送给另一个主机或路由器 时,它必须有接收端的逻辑(IP)地址。但是 IP 数据报必须封装成祯才能 通过物理网络。这就表示,发送端必须有接收端的

15、物理地址。因此需要从逻 辑地址到物理地址的映射4。 使用静态映射和动态映射都可做到这点,逻辑地址和物理地址之间的 关联可以静态地存储在地址映射表中。发送端可在表中查找出对应于逻辑 地址的物理地址。但这不是解决问题的好方法。每当物理地址发生变化时, 这个表就必须更新。频繁地在所有的机器上对表进行更新是非常麻烦的任 务。 但这种映射可做成动态的,即发送端在需要时可请求接收端宣布它的 物理地址。ARP 就是为这个目的而设计的。 ARP 把 IP 地址和它的物理地址关联起来。在典型的物理网络上,如局 域网,链路上的每一个设备都用通常是写在 NIC 中的物理地址或站地址来 标识。 任何时候当主机或路由器

16、需要找出这个网络上的另一个主机或路由器 的物理地址时,它就发送 ARP 查询分组。这个分组包括发送端的物理地址 和 IP 地址,以及接收端的 IP 地址。当发送端不知道接收端的物理地址, 它就会在网络上以广播的形式发送一个 ARP 请求报文5。 4 在网络上的每一个主机或路由器都接收和处理这个 ARP 查询分组,但 只有预期的接收者才识别 ARP 查询分组的 IP 地址,并发回 ARP 响应分组。 这个响应分组包含接收者的 IP 地址和物理地址。这个分组用单播直接发送 给查询者,它使用收到的查询分组中所用的物理地址。 2.3 ARP 协议的原理 IP 数据包常通过以太网发送。以太网设备并不识别

17、 32 位 IP 地址,它 们是以 48 位以太网地址传输以太网数据包的。因此,IP 驱动器必须把 IP 目的地址转换成以太网网目的地址。在这两种地址之间存在着某种静态的 或算法的映射,常常需要查看一张表。地址解析协议(Address Resolution Protocol,ARP)就是用来确定这些映象的协议。 ARP 是一个位于 TCP/IP 协议栈中的低层协议,它工作在数据链路层, 用于将网络中的协议地址(当前网络中大多是 IP 地址)解析为本地的硬件 地址(MAC 地址)6。 为了节省 ARP 缓冲区内存,被解析过的 ARP 条目的寿命都是有限的。 如果一段时间内该条目没有被参考过,则条

18、目被自动删除。在工作站 PC 的 Windows 环境中,ARP 条目的寿命是 2 分钟,在大部分 Cisco 交换机中, 该值是 5 分钟。 反向 ARP(Reverse ARP,RARP)用于把物理地址(MAC 地址)转换到 对应的 IP 地址。例如,在无盘工作站启动的时候,因为无法从自身的操作 系统获得自己的 IP 地址配置信息。这时,无盘工作站可发送广播请求获得 自己的 IP 地址信息,而 RARP 服务器则响应 IP 请求消息,为无盘工作站分 配 1 个未用的 IP 地址(通过发送 RARP 应答包)7。 代理 ARP(PROXY ARP)也被称作混杂 ARP(Promiscuous

19、 ARP)一般被 像路由器这样的设备使用,用来代替处于另一个网段的主机回答本网段主机 的 ARP 请求7。 无故(Gratuitous ARP,GARP)ARP 也称为无为 ARP。主机有时会使用 5 自己的 IP 地址作为目标地址发送 ARP 请求。这种 ARP 请求称为无故 ARP,GARP,主要有两个用途: (1)检查重复地址(如果收到 ARP 响应表明存在重复地址) 。 (2)用于通告一个新的数据链路标识。当一个设备收到一个 arp 请求 时,发现 arp 缓冲区中已有发送者的 IP 地址,则更新此 IP 地址的 MAC 地 址条目。 2.3.1 ARP 的分组格式 表 2-1 ARP

20、 分组格式的示意图 注:因为物理帧最小长度为 64B,所以要填充 18B。 2.3.1.1 物理帧头 表 2-2 物理帧头的结构 目的 MAC(6B)源 MAC(6B)类型(2B) 2.3.1.2 ARP 帧结构 表 2-3 ARP 帧结构的示意图 硬件类型 协议类型 硬件长度 协议长度 操作(请求 1,回答 2) 发送站硬件地址 (例如,对以太网是 6 字节) 发送站协议地址 (例如,对 IP 是 4 字节) 目标硬件地址(在请求中填入) (例如,对以太网是 6 字节) 物理帧头 (14B) ARP 帧结构 (28B) 填充数据 (18B) CRC(4B ) 6 目标协议地址 (例如,对 I

21、P 是 4 字节) ARP 分组具有如下的一些字段: HTYPE(硬件类型):这是 16 位字段,用来定义运行 ARP 的网络的类 型。每一个局域网为其类型指派一个整数。例如,以太网是类型 1。ARP 可 使用在任何网络上。 PTYPE(协议类型):这是 16 位字段,用来定义协议的类型。例如, 对 IPv4 协议,这个字段的值是 080016。ARP 可用于任何高层协议。 HLEN(硬件长度):这是 8 位字段,用来定义以字节为单位的物理地 址长度。例如,对以太网这个值是 6。 PLEN(协议长度):这是一个 8 位字段,用来定义以字节为单位的逻 辑地址长度。例如,对 IPv4 协议这个值是

22、 4。 OPER(操作):这是 16 位字段,用来定义分组的类型。已定义了两种 类型:ARP 请求(1)和 ARP 回答(2) 。 SHA(发送端硬件地址):这是可变长度字段,用来定义发送端的物理 地址长度。例如,对以太网这个字段是 6 字节长。 SPA(发送端协议地址):这是可变长度字段,用来定义发送端的逻辑 (例如,IP)地址长度。对于 IP 协议,这个字段是 4 字节长。 THA(目标硬件地址):这是可变长度字段,用来定义目标的物理地址 长度。例如,对以太网这个字段是 6 字节长。对于 ARP 请求报文,这个字 段是全 0,因为发送端不知道目标的物理地址。 TPA(目标协议地址):这是可

23、变长度字段,用来定义目标的逻辑地址 (例如,IP 地址)长度。对于 IPv4 协议,这个字段是 4 字节长。 2.3.2 ARP 协议的工作流程 (1)首先,每台主机都会在自己的 ARP 缓冲区(ARP Cache)中建立 一个 ARP 列表,以表示 IP 地址和 MAC 地址的对应关系; 7 (2)当源主机需要将一个数据包要发送到目的主机时,会首先检查自 己 ARP 列表中是否存在该 IP 地址对应的 MAC 地址,如果有,就直接将数据 包发送到这个 MAC 地址;如果没有,就向本地网段发起一个 ARP 请求的广 播包,查询此目的主机对应的 MAC 地址。此 ARP 请求数据包里包括源主机

24、的 IP 地址、硬件地址、以及目的主机的 IP 地址; (3)网络中所有的主机收到这个 ARP 请求后,会检查数据包中的目的 IP 是否和自己的 IP 地址一致。如果不相同就忽略此数据包,如果相同, 该主机首先将发送端的 MAC 地址和 IP 地址添加到自己的 ARP 列表中,如果 ARP 表中已经存在该 IP 的信息,则将其覆盖,然后给源主机发送一个 ARP 响应数据包,告诉对方自己是它需要查找的 MAC 地址; (4)源主机收到这个 ARP 响应数据包后,将得到的目的主机的 IP 地 址和 MAC 地址添加到自己的 ARP 列表中,并利用此信息开始数据的传输。 如果源主机一直没有收到 AR

25、P 响应数据包,表示 ARP 查询失败; 8 第 3 章 Sniffer 软件简介 3.1 Sniffer 概述 Sniffer 软件是 NAI 公司推出的功能强大的协议分析软件。该软件支 持的协议很丰富,而且能够进行快速解码分析。本软件开发过程中使用的 Sniffer Pro 4.6 可以运行在各种 Windows 平台上。但是 Sniffer 软件比 较大,运行时需要的计算机内存比较大,因此对计算机性能的要求比较高, 否则运行会比较慢。 3.2 Sniffer 功能简介 Sniffer 的功能主要是以下四个方面: (1)利用专家分析系统诊断问题; (2)实时监控网络活动; (3)收集网络利

26、用率和错误; (4)捕获网络数据包进行详细分析。 由于毕业设计的需求,本文将对 Sniffer 中报文的封装、捕获功能进 行详细的介绍。 在进行包捕获之前首先选择网络适配器,确定从计算机的哪个网络适 配器上接收数据。只有选择网络适配器后才能正常工作。 3.2.1 Sniffer 封装功能介绍 Sniffer 软件报文发送功能比较弱,发送前需要在报文编辑窗口(见 图 3-1 所示)先编辑报文发送的内容。首先要指定数据帧发送的长度,然 后从链路层开始,一个一个将报文填充完成。也可以将捕获到的报文直接 转换成发送报文,然后发送该数据包。也可以修改一下捕获到的报文内容 将其发送出去。 9 发送模式有两

27、种:连续发送和定量发送。可以设置发送间隔,如果为 0,则以最快的速度进行发送。 图 3-1 报文编辑窗口 3.2.2 Sniffer 捕获功能介绍 报文捕获功能可以在报文捕获面板中完成。在捕获报文之前要设置捕 获条件。 捕获条件有以下几种: (1)基本捕获条件 基本捕获条件有链路层捕获和 IP 层捕获。其中链路层捕获是按源 MAC 和目的 MAC 地址进行捕获,输入方式为十六进制连续输入,如: 00E0FC123456。而 IP 层捕获是按源 IP 和目的 IP 进行捕获。输入方式为点 间隔方式,如:10.107.1.1。如果选择 IP 层捕获条件则 ARP 等报文将被过 滤掉。 (2)高级捕

28、获条件 在“Advance”页面下,可以根据自己所需要的协议编辑捕获条件。 (3)任意捕获条件 10 在 Data Pattern 下,可以编辑任意捕获条件。用这种方法可以实现复 杂的报文过滤,但很多时候是得不偿失,有时截获的报文就不多,还不如 自己看看来得快。 在本程序中使用的是设置高级捕获条件,在“Advance”页面下,选择 的 ARP 协议,这样捕获到的数据包就是 ARP 数据包了。 Sniffer 软件提供了强大的分析能力和解码功能,如图 3-2 所示。对 于捕获的报文提供了一个 Expert 专家分析系统进行分析,还有解码选项及 图形和表格的统计信息。 图 3-2 Expert 专

29、家分析系统 其中专家分析系统提供了一个智能的分析平台,对网络上的流量进行 了一些分析,对于分析出的诊断结果可以查看在线帮助获得。对于某项统 计分析可以通过用鼠标双击此条记录可以查看详细统计信息且对于每一项 都可以通过查看帮助来了解起产生的原因。 图 3-3 是对捕获报文进行解码的显示,通常分为三部分,包括当前捕 11 获的报文、报文解码和报文二进制内容。目前大部分此类软件结构都采用 这种结构显示。 图 3-3 解码分析图 对于解码主要要求分析人员对协议比较熟悉,这样才能看懂解析出来 的报文。使用该软件是很简单的事情,要能够利用软件解码分析来解决问 题关键是要对各种层次的协议了解的比较透彻。工具

30、软件只是提供一个辅 助的手段。 12 第 4 章 网络编程工具 4.1 Winpacp 概述 Winpcap 是一个免费公开的软件系统。它用于 Windows 系统下的直接 的网络编程。大多数网络应用程序访问网络是通过广泛使用的套接字。这 种方法很容易实现网络数据传输,因为操作系统负责底层的细节(比如协 议栈,数据流组装等)以及提供了类似于文件读写的函数接口。但是有时, 简单的方法是不够的。因为一些应用程序需要一个底层环境去直接操纵网 络通信。因此需要一个不使用协议栈支持的原始的访问网络的方法。 Winpcap 的主要功能在于独立于主机协议(如 TCP/IP)而发送和接收 原始数据报。也就是说

31、,Winpcap 不能阻塞,过滤或控制其他应用程序数 据报的发收,它仅仅只是监听共享网络上传送的数据报,因此,它不能用 于 QoS 调度程序或个人防火墙8。 Winpcap 适用于下面的开发者: (1)捕获原始数据包。不管这个包是发往本地机,还是其他机器之间 的交换包; (2)在数据包被发送到应用程序之前,通过用户定义的规则过滤; (3)向网络发送原始数据包; (4)对网络通信量做出统计。 这些功能依赖于 Win32 系统内核中的设备驱动以及一些动态链接库。 Winpcap 提供了一个强大的编程接口,它很容易地在各个操作系统之 间进行移植,也很方便程序员进行开发。 什么样的程序需要使用 Win

32、pcap,很多不同的工具软件使用 Winpcap 于网络分析、故障排除、网络安全监控等方面。Winpcap 特别适用于下面 13 这几个经典领域: (1)网络及协议分析; (2)网络监控; (3)通信日志记录; (4)traffic generators; (5)用户级别的桥路和路由; (6)网络入侵检测系统(NIDS) ; (7)网络扫描; (8)安全工具。 Winpcap 有些方面不能做。它不依靠主机的诸如 TCP/IP 协议去收发数 据包。这意味着它不能阻塞,不能处理同一台主机中各程序之间的通信数 据,它只能“嗅探”到物理线路上的数据包。因此它不适用于 traffic shapers,Q

33、oS 调度,以及个人防火墙。 Winpcap 内部结构:Winpcap 是一个 Win32 平台下用于抓包和分析的系 统。包括一个内核级别的 packet filter,一个底层的 DLL(packet.dll) 和一个高级的独立于系统的 DLL(Wpcap.dll) 。 Network NPF Device Driver Kernel Level User Level Application Wpcap.dll Packet.dll Packets 14 图 4-1 packet.dll 和一个高级的独立于系统的 DLL(Wpcap.dll) (1)捕获系统要能得到网络上原始传输数据必须绕过

34、协议栈。这就需 要一个模块运行于操作系统内核,与网络设备驱动接口直接打交道。这一 部分极端依赖系统,也被认为是一种设备驱动。现有版本有 Windows85,98,ME,NT4,2000,Xp。这些驱动提供一些如数据包的捕获 与发送这些基本功能,还提供一些高级的可编程的过滤系统和监控引擎。 过滤系统可以约束只捕获特定的数据包(比如,只捕获特定主机发送的 ARP 报文) 。监控引擎提供了一种强大但简单的使用机制去获得网络通信的 统计荷载数据。 (2)捕获系统要让用户程序使用内核提供的功能必须要有一个编程接 口。Winpcap 提供了两个不同的库:packet.dll 和 wpcap.dll。pac

35、ket.dll 提供一个底层的 API,通过这个 API 可直接访问网 络设备驱动,而独立于 Microsoft OS。wpcap.dll 是一个高层的强大捕获 程序库,与 Unix 下的 libpcap 兼容。它独立于下层的网络硬件和操作系统。 4.2 WinPcap 的结构 从硬件支持的角度讲,WinPcap 的实现需要将网络接口卡设置为混杂模 式(promiscuous) ,才能接收到共享网段内所有的数据包。 WinPcap 的基本实现思想就是对底层的捕获设备或其它机制按照操作 系统层上的读写文件的操作来实现。主要流程如图 4-2 所示: 15 图 4-2 WinPcap 的基本实现流程

36、图 以下介绍几个在抓包中要用的基本函数: (1)建立 Winpcap 捕捉句柄 pcap_t *pcap_ open_live(char *device,int snaplen,int promisc, int to_ms,char *ebuf)9; (2)编译过滤规则串 int pcap_compile(pcap_t *p,struct bpf_program *fp,char *str,int optimize,_bpf_u_int32 netmask) ; (3)设置过滤规则 int pcap_setfifer(pcap_t *p,struct bpf_program* fp) ; (4

37、)循环,开始抓包10 Int pcap_loop(pcap_t *p,int cnt,pcap_handler callback,u_char* user) ; 与此相似的还有以下这个用来采集和处理包的函数: int pcap_dispatch(pcap_t *p,int cnt,pcap_handler callback,u_c har* user) ; (5)抓包结束,关闭 void pcap_close(pcap_t *p)11; (6)下面的函数允许通过 WinPcap 代替 WindowsAPI 向网络发送原始 数据包 int pcap_sendpacket(pcap_t *p ,u

38、_char *buf,int size) ; 实际上,WinPcap 的底层核心也是基于原始套接字的,它的协议驱动 提供了健全的抓包机制,所以在直接调用它所提供的函数库进行包的发送 和接收,而不必去管底层是如何进行端到端的通信的。 16 4.3 Winpcap 的安装使用方法 (1)到 http:/winpcap.polito.it 下载 winpcap 的安装包和程序员 开发包; (2)执行安装包,这样机子就能运行 winpcap 程序了; (3)解压开发包,在 VC 的 option 的 include 和 lib 中加入 winpcap 的 include 和 lib; (4)在程序中加

39、入#include ,#include,然 后在工程的 setting 中加入预定义宏:WPCAP,HAVE_REMOTE,导入 wpcap.lib 库; (5)就可以编写 wpcap 程序了。 17 第 5 章 软件开发 5.1 需求规格说明 5.1.2 引言 本软件是一个教学辅助软件,主要用于辅助网络协议教学工作,在软 件设计中注重对 ARP 协议和 WinPcap 网络工具的理解。 本小节将着重描写该软件的功能及其实现模块,详细说明软件设计过 程中使用到的数据的特点和软件的功能要求,并且列举软件中使用到的专 业术语。 相关专业术语定义: (1)ARP 协议:ARP 协议是一个位于 TCP

40、/IP 协议栈中的低层协议,它 工作在数据链路层,用于将网络中的协议地址(当前网络中大多是 IP 地址) 解析为本地的硬件地址(MAC 地址) 。 (2)WinPcap:Winpcap 是一个免费公开的软件系统,它用于 windows 系统下的直接的网络编程。 (3)Sniffer:Sniffer 软件是 NAI 公司推出的功能强大的协议分析 软件。其功能包括捕获网络流量进行详细分析、利用专家分析系统诊断问 题、实时监控网络活动、收集网络利用率和错误等。 5.1.2 数据描述 (1)静态数据 硬件类型 HW_Type:以太网类型是 1; 上层协议类型 Prot_Type:对 IPv4 协议,这

41、个值是 080016; 18 MAC 地址长度 HW_Addr_Len:6; IP 地址长度 Prot_Addr_Len:4; 本机 ip:sip; 本机 mac:smac。 (2)动态数据 目的 ip:Targ_Prot_Addr4; 目的 mac:Targ_HW_Addr6; 操作数 Flag:1 表示请求,2 表示应答; 校验码:CRC。 5.1.3 功能需求 1功能划分 (1)arp 数据包的封装功能; (2)arp 数据包的发送功能; (3)捕获 arp 数据包的功能; (4)解析 arp 数据包的功能; (5)将数据包内容显示在标准输出上,并同时写入日志文件的功能。 2功能描述 (

42、1)arp 数据包的封装、发送功能 首先定义 arp 数据包的包结构,使用 ARPPacket FillPacket(unsigned char *dip,unsigned char *dmac,int flag_packet)封装包内容,返回一个封装好的数据包对象,再使用函数 void SendARPPacket(const unsigned char *arppkt)将数据包发送出去。 (2)arp 数据包的捕获与解析功能 首先以混杂模式打开网卡,以接收所有的帧,实现此功能的函数为 pcap_open_live(d-name,1000,1,300,errbuf),然后使用函数 19 pca

43、p_compile(adhandle,&fcode, packet_filter,1,netmask)编译过滤 器,再设置过滤器 pcap_setfilter(adhandle,&fcode) ,使得网卡只捕获 arp 数据包,最后一定要释放资源 pcap_freealldevs(alldevs)9,即获 得的设备列表。 5.2 概要设计说明 1本课题的工作任务和预期目标是 (1)构造 ARP 包,选择并打开网卡,将 ARP 包发送出去; (2)获取网络中的 ARP 数据包; (3)解析数据包的内容,将结果显示在标准输出上,并同时写入日志 文件; (4)与 Sniffer 做对比,测试和评价该

44、软件。 2运行环境 本程序在 Windows xp 操作系统下,使用 Visual C+6.0 和 WinPcap 网 络编程工具完成软件的实现。 5.3 详细设计说明 1封装功能 (1)功能描述 定义 arp 数据包的包结构,使用 ARPPacket FillPacket(unsigned char *dip,unsigned char *dmac,int flag_packet)封装包内容,返回一 个封装好的数据包对象。 (2)输入项目 目的 Ip:dip; 目的 mac:dmac; 操作数:flag_packet; 注:当在 IP ADDRESS 控件中输入目的 ip 时,表示要封装的数

45、据包为 arp 请求包,此时 flag_packet=1,dip 的值为从 IP ADDRESS 控件中得到 20 的数据,由于是 arp 请求包,所以目的 mac 为全 f,通过函数 memset(dmac,0xff, sizeof(dmac) )初始化为全 f 的。 在捕获 arp 数据包时,如果捕获到的数据包中的目的 ip 为本机 ip 时, 本主机要发送给源主机一个 arp 应答包,所以 flag_packet=2,此时参数 中的 dip 指向捕获到的数据包中的 ARP 帧结构中的源 IP,参数中的 dmac 指向捕获到的数据包中的 ARP 帧结构中的源 MAC。 (3)输出项目 返回

46、封装好的数据包结构对象 arppkt。 (4)程序逻辑 图 5-1 封装数据包流程图 (5)测试要点 21 本功能的主要测试要点是通过用 sniffer 抓包后查看测试封装的数据 包的内容的正确性。 2发送功能 (1)功能描述 将封装好的数据包 arppkt 通过函数 SendARPPacket(const unsigned char*)&arppkt)发送出去。 (2)输入项目 指向数据包的指针:&arppkt。 (3)输出项目 通过 pcap_sendpacket(adhandle,arppkt,sizeof(ARPPacket) )将数 据包发送出去。 (4)程序逻辑 22 图 5-2

47、发送数据包流程图 (5)测试要点 本功能的测试要点是通过 sniffer 抓包,以测试是否把包发送出去。 3捕获功能 (1)功能描述 通过函数 pcap_open_live(d-name,1000,1,300,errbuf)将网卡以混 杂模式打开以接收所有的帧,然后再通过函数 pcap_compile(adhandle, &fcode,packet_filter,1,netmask)和 pcap_setfilter(adhandle, &fcode)分别编译过滤器和设置过滤器,使程序只捕获到所需要的 arp 数 据包。 (2)输入项目 一次捕获数据包的个数:m_CatchNumber。 (3)

48、输出项目 在 CList 控件中输出捕获到的数据包的内容。 (4)程序逻辑 23 图 5-3 捕获数据包流程图 (5)测试要点 本功能的测试要点是查看捕获数据包的内容。 4解析功能 (1)功能描述 将数据包内容通过这个函数 AddListItem(&arppkt)显示在 CList 控 件上;并通过函数 fopen(“LogText.txt“,“a“)打开日志文件,然后 通过 fwrite(str,232,1,fp)写入日志文件;通过下列循环语句来判断捕 获到的请求包中的目的 Ip 是否为本机 ip, for(int i=0;iarpFrame.Targ_Prot_Addri) ) break

49、; 如果是,则通过函数 FillPacket(arph- arpFrame.Targ_Prot_Addr,arph-arpFrame.Send_HW_Addr,2)封装 arp 应答包,再通过函数 SendARPPacket(const unsigned char*) &arppkt)将数据包发送出去。 (2)输入项目 目的 ip:arph-arpFrame.Send_Prot_Addr; 目的 mac:arph-arpFrame.Send_HW_Addr; 指向数据包的指针:&arppkt。 (3)输出项目 返回封装好的数据包结构对象 arppkt。 (4)程序逻辑 24 其程序流程图见图 5-4。 (5)测试要点 本功能的测试要点是观察显示到 CList 控件上的数据包内容是否正确, 并查看数据包的内容是否正确的写入日志文件(主要的是由网络字节向向 主机字节的转换) ,由于在解析时需要发送 arp 应答包,所以也需要测试封 装之后的 arp 应答包内容的正确性。 图 5-4 解析数据包的程序流程图 25 5.4 代码实现 由于本软件主要应用于网络协议编程技术教学工作,其软件的编程实 现也非常的重要,通过该节可以了解软件的实现过程中用到的函数的使用 方法,这也是网络协议软件

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1