编辑: hgtbkwd | 2019-09-18 |
3 1.
1 课程设计的目的
3 1.2 设计任务与要求
3 1.3 开发环境
3 2系统设计的基本概念与原理
3 2.1 IP协议基本知识
3 2.2 TCP协议基本知识
7 2.3 UDP协议基本知识
9 2.4 winpcap基本知识
9 2.5 winpcap基本原理
14 2.6 MFC编程框架
17 3 基于Winpcap的单文档网络嗅探器的设计与分析
20 3.1 系统设计实现的基本原理与过程
20 3.2 系统功能设计
22 3.3 系统架构设计
22 3.4 子系统与模块设计
23 3.4.1 网络嗅探器设置模块
23 3.4.2 网络数据包的捕获模块
24 3.4.3 解析和显示模块
24 4 系统详细设计与实现
24 4.1 数据结构的设计
24 4.2 全局变量与函数的声明
25 4.3 嗅探器界面设计
26 4.4 嗅探器捕获模块的设计与实现
26 4.5 网络数据包捕获模块的设计与实现
31 4.6 解析和显示模块的设计与实现
32 4.6.1 列表视图初始化设置
32 4.6.2 从读取离线数据包并在列表视图中显示
33 4.6.2 响应用户鼠标消息,解析对应行的数据包信息.
36 5 系统调试与运行
38 5.1 winpcap函数库的安装
38 5.2 sniffer网络嗅探器的测试与运行
38 6 课程设计总结
39 参考文献
40 1 概述 1.1 课程设计的目的 目的:设计一个GUI程序,实现IP、TCP、UDP数据包的捕获和解析.通过编程了解各类数据报的结构,掌握网络编程的基本原理和方法. 1.2 设计任务与要求 本课程设计的基本内容是捕获IP,TCP,UDP数据包,通过解析数据包,理解和掌握各类数据包的结构 (1)设计一个GUI程序,完成局域网数据包的捕获和IP、TCP、UDP数据包的解析;
(2)捕获几个网络数据报,给出实例并分析各数据包各字段的含义;
(3)说明基于Winpcap编程的基本原理、程序的总体框架,绘制每个函数的详细设计流程图. 1.3 开发环境 标准PC机,Windows操作系统,vs2008集成开发环境,Winpcap函数库. 2系统设计的基本概念与原理 2.1 IP协议基本知识 IP协议介绍 IP是英文Internet Protocol(网络互连的协议)的缩写,中文简称为 网协 ,也就是为计算机网络相互连接进行通信而设计的协议.在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则.任何厂家生产的计算机系统,只要遵守 IP协议就可以与因特网互连互通. IP协议的网络互连实现 各个厂家生产的网络系统和设备,如以太网、分组交换网等,它们相互之间不能互通,不能互通的主要原因是因为它们所传送数据的基本单元(技术上称之为 帧 )的格式不同.IP协议实际上是一套由软件程序组成的协议软件,它把各种不同 帧 统一转换成 IP数据包 格式,这种转换是因特网的一个最重要的特点,使所有各种计算机都能在因特网上实现互通,即具有 开放性 的特点. IP数据报 TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报(IP Datagram).这是一个与硬件无关的虚拟包, 由首部和数据两部分组成,其格式如图2.1所示: 图2.1 IP数据报一般格式 IP数据报的详细格式如图2.2所示:
0 3
7 15
31 版本 首部长度 服务类型 总长度 标识 标志 片偏移 生存时间 协议 头校验和 源IP地址 目的IP地址 选项 填充域 数据部分 图2.2 IP数据报的详细格式 IP数据报固定部分各字段含义: (1)版本 占4位,指IP协议的版本.通信双方使用的IP协议版本必须一致.目前广泛使用的IP协议版本号为4(即IPv4).关于IPv6,目前还处于草案阶段. (2)首部长度 占4位,可表示的最大十进制数值是15.请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节.当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充.因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便.首部长度限制为60字节的缺点是有时可能不够用.但这样做是希望用户尽量减少开销.最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项. (3)区分服务 占8位,用来获得更好的服务.这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过.1998年IETF把这个字段改名为区分服务DS(Differentiated Services).只有在使用区分服务时,这个字段才起作用. (4)总长度 总长度指首部和数据之和的长度,单位为字节.总长度字段为16位,因此数据报的最大长度为216-1=65535字节. 在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit).当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值. (5)标识(identification) 占16位.IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段.但这个 标识 并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题.当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中.相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报. (6)标志(flag) 占3位,但目前只有2位有意义. 标志字段中的最低位记为MF(More Fragment).MF=1即表示后面 还有分片 的数据报.MF=0表示这已是若干数据报片中的最后一个. 标志字段中间的一位记为DF(Don'
t Fragment),意思是 不能分片 .只有当DF=0时才允许分片. (7)片偏移 占13位.片偏移指出:较长的分组在分片后,某片在原分组中的相对位置.也就是说,相对用户数据字段的起点,该片从何处开始.片偏移以8个字节为偏移单位.这就是说,每个分片的长度一定是8字节(64位)的整数倍. (8)生存时间 占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命.由发出数据报的源点设置这个字段.其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源.最初的设计是以秒作为TTL的单位.每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间.若数据报在路由器消耗的时间小于1秒,就把TTL值减1.当TTL值为0时,就丢弃这个数据报. (9)协议 占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程. (10)首部检验和 占16位.这个字段只检验数据报的首部,但不包括数据部分.这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化).不检验数据部分可减少计算的工作量. (11)源地址 占32位. (12)目的地址 占32位. IP数据报可选部分字段含义: IP首部的可变部分就是一个可选字段.选项字段用来支持排错、测量以及安全等措施,内容很丰富.此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目.某些选项项目只需要1个字节,它只包括1个字节的选项代码.但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍. 2.2 TCP协议基本知识 (1)TCP协议介绍 TCP:Transmission Control Protocol (传输控制协议)TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层通信协议.在OSI/RM模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议. (2)TCP协议的作用 在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的运输层. 应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制).之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层.TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收.然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);
如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传.TCP用一个校验和函数来检验数据是否有错误;
在发送和接收时都要计算校验和. 首先,TCP建立连接之后,通信双方都同时可以进行数据的传输,其次,他是全双工的;
在保证可靠性上,采用超时重传和稍待确认机制. 在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传. 在拥塞控制上,采用慢启动算法. (3) TCP报文段格式 两台机器上的TCP软件之间传送的数据单元称为报文段.两台机器通过报文段的交互来建立连接、传送数据、发送确认、通告窗口大小及关闭连接.每个报文段分为两个部分:首部和数据.TCP报文格式如图2.3:
0 4
10 16
24 31 源端口 目的端口 序号 确认序号 首部长度 保留 代码比特 窗口 校验和 紧急指针 选项 填充 数据 图2.3 TCP报文段详细格式 TCP报文字段说明: 源端口号(16位),标识主机上发起传送的应用程序;
目的端口(16位)标识主机上传送要到达的应用程序. 序号:占32比特.用来标识从TCP源端向TCP目标端发送的数据字节流,它表示在这个报文段中的第一个数据字节. 确认序号:占32比特.只有ACK标志为1时,确认号字段才有效.它包含目标端所期望收到源端的下一个数据字节. 首部长度:占4比特.给出头部占32比特的数目.没有任何选项字段的TCP头部长度为20字节;
最多可以有60字节的TCP头部. 预留:由跟在数据偏移字段后的6位构成,预留位通常为0. 代码比特(U、A、P、R、S、F):占6比特.各比特的含义如下: URG:紧急指针(urgent pointer)有效. ACK:确认序号有效. PSH:接收方应该尽快将这个报文段交给应用层. RST:重建连接. SYN:发起一个连接. FIN:释放一个连接. 窗口大小:占16比特.此字段用来进行流量控制.单位为字节数,这个值是本机期望一次接收的字节数. TCP校验和:占16比特.对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,并由目标端进行验证. 紧急指针:占16比特.它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号. 选项、填充:占32比特.可能包括 窗口扩大因子 、 时间戳 等选项. 2.3 UDP协议基本知识 (1) UDP协议介绍 UDP协议的全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层――传输层,处于IP协议的上一层.UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的. UDP用来支持那些需要在计算机之间传输数据的网络应用.包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议.UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议. (2) UDP报文格式 UDP报文段首部只有8个字节;
详细格式见图2.4
0 1
3 5
7 源端口 目的端口 长度 校验和 数据 图2.4 UDP报文详细格式 2.4 winpcap基本知识 (1) winpcap简介 (1) Winpcap简介 大多数Unix操作系统提供了一套允许应用程序直接与网络相互联系的系统调用.这些指令对于那些需要通过网络捕获连续的包数据而不用内核进行过多的干预的包捕获应用程序非常有用.在Windows环境下,WinPcap就是这样一类工具. WinPcap是一个在Windows操作系统下的免费、公开的用于直接访问网络........