欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于Winpcap的网络嗅探器的实现.docx

    • 资源ID:22896906       资源大小:250.98KB        全文页数:48页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于Winpcap的网络嗅探器的实现.docx

    1、基于Winpcap的网络嗅探器的实现课程设计设计报告题 目: 基于Winpcap的网络嗅探器的实现 学 号: 姓 名: 学 院: 专业班级: 指导教师: 设计时间: 目 录1 概述 31.1 课程设计的目的 31.2 设计任务与要求 31.3 开发环境 32系统设计的基本概念与原理 32.1 IP协议基本知识 32.2 TCP协议基本知识 72.3 UDP协议基本知识 92.4 winpcap基本知识 92.5 winpcap基本原理 142.6 MFC编程框架 173 基于Winpcap的单文档网络嗅探器的设计与分析 203.1 系统设计实现的基本原理与过程 203.2 系统功能设计 223

    2、.3 系统架构设计 223.4 子系统与模块设计 233.4.1 网络嗅探器设置模块 233.4.2 网络数据包的捕获模块 243.4.3 解析和显示模块 244 系统详细设计与实现 244.1 数据结构的设计 244.2 全局变量与函数的声明 254.3 嗅探器界面设计 264.4 嗅探器捕获模块的设计与实现 264.5 网络数据包捕获模块的设计与实现 314.6 解析和显示模块的设计与实现 324.6.1 列表视图初始化设置 324.6.2 从读取离线数据包并在列表视图中显示 334.6.2 响应用户鼠标消息,解析对应行的数据包信息。 365 系统调试与运行 385.1 winpcap函数

    3、库的安装 385.2 sniffer网络嗅探器的测试与运行 386 课程设计总结 39参考文献 401 概述1.1 课程设计的目的目的:设计一个GUI程序,实现IP、TCP、UDP数据包的捕获和解析。通过编程了解各类数据报的结构,掌握网络编程的基本原理和方法。1.2 设计任务与要求本课程设计的基本内容是捕获IP,TCP,UDP数据包,通过解析数据包,理解和掌握各类数据包的结构(1)设计一个GUI程序,完成局域网数据包的捕获和IP、TCP、UDP数据包的解析;(2)捕获几个网络数据报,给出实例并分析各数据包各字段的含义;(3)说明基于Winpcap编程的基本原理、程序的总体框架,绘制每个函数的详

    4、细设计流程图。1.3 开发环境标准PC机,Windows操作系统,vs2008集成开发环境,Winpcap函数库。2系统设计的基本概念与原理2.1 IP协议基本知识(1) IP协议介绍IP是英文Internet Protocol(网络互连的协议)的缩写,中文简称为“网协”,也就是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守 IP协议就可以与因特网互连互通。(2) IP协议的网络互连实现各个厂家生产的网络系统和设备,如以太网、分组交换网等,它们相互

    5、之间不能互通,不能互通的主要原因是因为它们所传送数据的基本单元(技术上称之为“帧”)的格式不同。IP协议实际上是一套由软件程序组成的协议软件,它把各种不同“帧”统一转换成“IP数据包”格式,这种转换是因特网的一个最重要的特点,使所有各种计算机都能在因特网上实现互通,即具有“开放性”的特点。(3) IP数据报TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报(IP Datagram)。这是一个与硬件无关的虚拟包, 由首部和数据两部分组成,其格式如图2.1所示:数据报的数据区数据报首部 图2.1 IP数据报一般格式IP数据报的详细格式如图2.2所示: 0 3 7 15 31版本首部长度服

    6、务类型总长度 标识标志片偏移生存时间协议头校验和源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

    7、字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。 (3)区分服务占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。 (4)总长度总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。 在IP层下面的每一种数据链路层都

    8、有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。 (5)标识(identification)占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确

    9、地重装成为原来的数据报。 (6)标志(flag)占3位,但目前只有2位有意义。 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。 标志字段中间的一位记为DF(Dont Fragment),意思是“不能分片”。只有当DF=0时才允许分片。 (7)片偏移占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。 (8)生存时间占8位,生存时间字段常用的的英文缩写是

    10、TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。 (9)协议占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。 (10)首部检验和占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器

    11、都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。 (11)源地址占32位。 (12)目的地址占32位。IP数据报可选部分字段含义:IP首部的可变部分就是一个可选字段。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。某些选项项目只需要1个字节,它只包括1个字节的选项代码。但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。2.2 TCP协议基本知识(1)TCP协议介绍TCP:Transmissio

    12、n Control Protocol (传输控制协议)TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层通信协议。在OSI/RM模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。(2)TCP协议的作用在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的运输层。 应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP

    13、层。TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。首先,TCP建立连接之后,通信双方都同时可以进行数据的传输,其次,他是全双工的;在保证可靠性上,采用超时重传和稍待确认机制。在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。在拥塞控制上,采用慢启动算法。(3) TCP报文段格式两台机器上的T

    14、CP软件之间传送的数据单元称为报文段。两台机器通过报文段的交互来建立连接、传送数据、发送确认、通告窗口大小及关闭连接。每个报文段分为两个部分:首部和数据。TCP报文格式如图2.3:0 4 10 16 24 31源端口目的端口序号确认序号首部长度保留代码比特窗口校验和紧急指针选项填充数据 图2.3 TCP报文段详细格式TCP报文字段说明:源端口号(16位),标识主机上发起传送的应用程序;目的端口(16位)标识主机上传送要到达的应用程序。序号:占32比特。用来标识从TCP源端向TCP目标端发送的数据字节流,它表示在这个报文段中的第一个数据字节。 确认序号:占32比特。只有ACK标志为1时,确认号字

    15、段才有效。它包含目标端所期望收到源端的下一个数据字节。 首部长度:占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、和:占16比特。对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,并由目标端进行验证。 紧急指针:占16比特。它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。 选项、填充:占32比特。可能包括窗口扩大因子、时间戳等选项。2.3 UDP协议基本知识(1) UDP协议介绍UDP协议的全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包。在OSI模型中,在第四层传输层,处于IP协议的上一层。UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。 UDP用来支持那些需要在计算机之间传输数据的网络应用。

    17、包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。(2) UDP报文格式UDP报文段首部只有8个字节;详细格式见图2.40 1 3 5 7源端口目的端口长度校验和数据 图2.4 UDP报文详细格式2.4 winpcap基本知识(1) winpcap简介(1) Winpcap简介大多数Unix操作系统提供了一套允许应用程序直接与网络相互联系的系统调用。这些指令对于那些需要通过网络捕获连续的包数据而不用内核进行过多的干

    18、预的包捕获应用程序非常有用。在Windows环境下,WinPcap就是这样一类工具。WinPcap是一个在Windows操作系统下的免费、公开的用于直接访问网络的开发工具包(编程API)。大多数Windows网络应用程序都是通过Winsock API(Windows套接口)这类高级编程接口访问网络的。这种方法允许在网络上进行简单的数据传送,因为操作系统的TCP/IP协议栈实现软件会处理底层细节(协议操作、流程重组等等),并提供一个类似于读写文件的函数接口。然而,有时候“简便方法”并不能满足实际需要。有些程序希望绕过TCP/IP协议栈,直接处理底层网络中的通信数据,它们需要对网络进行底层进行直接

    19、访问,即在没有类似协议栈(TCP/IP协议栈)的实体介入条件下对网络进行原始访问。基于Winsock API编程,应用程序是通过调用操作系统提供的编程接口访问TCP/IP协议栈实现网络通信的。基于WinPcap编程,网络程序实际上是绕开操作系统的TCP/IP协议栈直接通过底层网络发送数据,因此,网络程序可以实现一些更低级、更灵活的功能。 (2) Winpcap的目的和用途开发WinPcap的目的是为Win32应用程序提供一种直接访问底层网络的能力。通过WinPcap,网络应用程序可以实现如下功能:捕获原始数据包,包括发送到本主机以及在共享网络上的数据包。数据过滤。在将数据包发送给应用程序之前按

    20、照用户的规定对捕获的数据包进行过滤。发送原始数据包。向网络发送原始数据包。数据包统计。对网络通信进行统计。上述功能都通过一个设备驱动(这个驱动程序安装在Win32内核的网络部分)和一组动态连接库(DLL)获得。所有这些功能部件都通过一个强大的编程接口来实现,应用程序能易于开发并且能移植到各种操作系统中。(3) 基于Winpcap可开发的网络应用程序基于WinPcap可以开发很多网络应用程序,典型的包括: 网络和协议分析软件 网络监听软件 网络通信量记录软件 网络数据生成软件 用户机网桥和路由器 网络入侵探测系统 网络扫描软件 网络安全工具Winpcap的局限性:WinPcap可以独立于主机的协

    21、议(如TCP/IP协议)进行接收和发送数据包。这意味着WinPcap不能阻塞、过滤或处理本机上其它程序产生的数据。它仅仅能嗅探在网线上传输的数据包。因此,WinPcap不能在traffic shapers、QoS schedulers和个人防火墙这类应用程序中使用。Winpcap的开发和运行环境:目前,winpcap主要的开发和运行环境是windows NT/2000/XP。由于winpcap的用户中只有很小一部分使用windows 95/98/Me,并且微软也已经放弃了对win9x的开发和支持。实际上,winpcap中的面向9x系统的概念和NT系统的非常相似,只是在某些实现上有点差异,比如说

    22、9x只支持ANSI编码,而NT系统则提倡使用Unicode编码。 Winpcap的组成与结构:WinPcap由一个数据包监听设备驱动程序(NPF)、一个底层的动态连接库(packet.dll)和一个高层的不依赖于操作系统的静态库(wpcap.dll)共三个部分构成,如图2.5所示。这里,NPF在操作系统的内核级,packet.dll、wpcap.dll在用户级。1)数据包监听设备驱动程序技术实现上,为了实现抓包,系统必须绕过操作系统的协议栈来访问在网络上传输的原始数据包(raw packet)。这就要求WinPcap的一部分运行在操作系统核心内部,直接与网络接口驱动交互。由于这个部分是系统依赖

    23、(system dependent)的,在Winpcap的解决方案中它被视为是一个设备驱动,称作NPF(Netgroup Packet Filter)。Winpcap开发小组针对Windows95,Windows98,WindowsME,Windows NT 4,Windows2000和WindowsXP提供了不同版本的驱动(在Windows95/98/ME中是VXD文件,在WindowsNT/2000中是SYS文件)。这些驱动不仅提供了基本的特性(例如抓包、发送原始数据包注入数据包),还有更高级的特性(例如可编程的过滤器系统和监视引擎)。前者可以被用来约束一个抓包会话只针对网络通信中的一个子

    24、集(例如,只捕获特殊主机产生的ftp通信数据包),后者提供了一个强大而简单的统计网络通信量的机制(例如,获得网络负载或两个主机间的数据交换量)。2)底层的动态连接库(packet.dll)和高层静态库(wpcap.dll)为了方便编程,WinPcap必须提供一个编程接口(API),这就是WinPcap的底层的动态连接库(packet.dll)和高层静态库(wpcap.dll)。这里,packet.dll提供了一个底层API,伴随着一个独立于Microsoft操作系统的编程接口,这些API可以直接用来访问驱动的函数;wpcap.dll导出了一组更强大的与libpcap一致的高层抓包函数库(cap

    25、ture primitives),这些函数使得数据包的捕获以一种与网络硬件和操作系统无关的方式进行。底层动态链接库运行在用户层,它将应用程序和数据包监听设备驱动程序隔离开来,使得应用程序可以不加修改地在不同的WINDOWS系统上运行。高级的静态链接库和应用程序编译在一起,它使用低级动态链接库提供的服务,向应用程序提供完善的监听接口。Winpcap的技术细节:1)NPF驱动网络数据包过滤器(Netgroup Packet Filter,简称NPF)是Winpcap的核心部分,它是Winpcap完成困难工作的核心组件。NPF负责处理网络上传输的数据包,并向上层提供各种服务,包括数据包的捕获(cap

    26、ture)、发送(injection)和分析性能(analysis capabilities)。2)NPF和NDISNDIS(Network Driver Interface Specification)是Windows环境下的一个定义网络适配器(或者说成是管理网络适配器的驱动程序)与协议驱动(例如TCP/IP的实现)之间通信的规范,如图2.2。基于NDIS,顶层应用(例如TCP/IP协议)可以发送和接收网络(LAN或WAN)上的数据包而不必关心特定的适配器硬件或特定的Win32操作系统版本。NDIS支持三种类型的网络驱动: 网络接口卡或NIC驱动(Network interface card

    27、 or NIC drivers)。NIC驱动直接管理着网络接口卡(NIC)。NIC驱动接下边与硬件连接,从上边表现为一个接口,该接口允许高层发送数据包到网络上,处理中断,重置NIC,停止NIC,查询和设置驱动的运行特征。NIC驱动可以是小端口(miniport)或完全的NIC驱动(full NIC driver)。Miniport驱动仅仅实现了管理NIC的必要操作,包括在NIC上发送和接收数据。对于所有最底层的NIC驱动的操作由NDIS提供,例如同步(synchronization)。小端口(miniport)不直接调用操作系统函数,它们对于操作系统的接口是NDIS。完全NIC驱动(Full

    28、NIC driver)完成硬件细节的操作和所有由NDIS完成的同步和查询操作。例如,完全NIC驱动维持接收到的数据的绑定信息。 中间层驱动(Intermediate drivers)中间层驱动位于高层驱动(例如协议驱动)和小端口之间。对于高层驱动,中间层驱动看起来像是小端口;对于小端口,中间层驱动看起来像协议驱动。一个中间层协议驱动可以位于另一个中间层驱动之上,尽管这种分层可能对系统性能带来负面影响。 传输驱动或协议驱动(Transport drivers or protocol drivers)协议驱动实现了网络协议栈。在协议驱动的上面,它为应用层客户程序服务;在它的下面,它与一个或多个NI

    29、C驱动或中间层NDIS驱动连接。3)NPF在Windows系统中的位置如图2.6,NPF是一个协议驱动。从性能方面来看,这不是最好的选择,但是它合理地独立于MAC层并且有权使用原始通信(raw traffic)。可以看出,NPF在NDIS之上,它与TCP/IP协议栈的实现在同一层次。因此,应用程序不通过Winsock也可以实现数据的发送和接受。2.5 winpcap基本原理抓包是WinPcap的基本功能,也是NPF最重要的操作。在抓包的时候,驱动(例如NIC Driver)使用一个网络接口监视着数据包,并将这些数据包完整无缺地投递给用户级应用程序。如图2.7,WinPcap的NPF抓包主要依靠

    30、两个组件。1)数据包过滤器(filter)。数据包过滤器决定是否接收进来的数据包并把数据包拷贝给监听程序。数据包过滤器是一个有布尔输出的函数。如果函数值是true,抓包驱动拷贝数据包给应用程序;如果是false,数据包将被丢弃。NPF数据包过滤器更复杂一些,因为它不仅决定数据包是否应该被保存,而且还决定要保存的字节数。应用程序采用用户自定义的过滤器并使用wpcap.dll将它们编译进BPF程序。然后,应用程序使用BIOCSETF IOCTL写入核心态的过滤器。这样,对于每一个到来的数据包该程序都将被执行,而满足条件的数据包将被接收。与传统解决方案不同,NPF不解释(interpret)过滤器,

    31、而是执行(execute)它。由于性能的原因,在使用过滤器前,NPF提供一个JIT编译器将它转化成本地的80x86函数。当一个数据包被捕获,NPF调用这个本地函数而不是调用过滤器解释器,这使得处理过程相当快。 2)循环缓冲区(Buffer)。NPF的循环缓冲区用来保存数据包以免丢失(如果一个包符合过滤器的要求,就被复制到循环缓冲区)。一个保存在缓冲区中的数据包有一个头,它包含了一些主要的信息,例如时间戳和数据包的大小,注意:它不是协议头。另外,循环缓冲区以队列插入的方式来保存数据包,提高数据的存储效率。程序员可以以组的方式将数据包从NPF缓冲区拷贝到应用程序,这样就提高了性能,因为它降低了读的次数。如果一个数据包到来的时候缓冲区已经满了,那么该数据包将被丢弃,这时就发生了丢包现象。3)Network Tap是一个用于探听网络中所有数据流的函数。4)数据统计如图2.7,为了提高数据处理的速度,WinPcap将统计和监听功能移到内核中,这样避免了将任何数据都传递给用户。WinPc


    注意事项

    本文(基于Winpcap的网络嗅探器的实现.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开