基于tcpip的协议分析器设计毕业论文(编辑修改稿)内容摘要:

c a p 图 21 程序与 winpcap 的依赖关系 1. NPF 模块 在 winpcap 中,与操作系统密切相关的是名为 NPF(Netgroup Packet Filter)的设备驱动程序。 NPF 能够执行许多操作,包括数据包捕获、数据包发送、网络统计及数据包转储到磁盘等,其中,最重要的功能是执行数据包的捕获。 在一个捕获过程中, NPF 驱动程序利用网络接口卡捕获数据包,然后将捕获到的 数据包完整无缺地传送给 上层处理 程序 进行处理。 数据包的捕获过程依赖于下列两个组件 [6]: 1) 数据包过滤器 数据包过滤器决定是否将到来的数据包接收并复制到一个应用程序中。 数据包过滤器实际上是一段代码,它的返回值为一个布尔型的函数。 对于一个数据包而言,如果 该 函数的返回值为 TRUE,则把数据包复制到应用层中,如果返回值是 FALTE,则将数据包丢弃。 NPF 驱动采用的过滤系统来源于 BSD Packet Filter, 而且 这个 数据包过滤器 拥有强大的 功能,因为它不仅 要 决定数据包是否应该被保存,而且还得决定要保存的字 节数。 2) 环形缓冲区 为避免数据包的丢失, NPF 使用一个环形缓冲区用来保存 捕获到的 数据包。 每一个 保存在缓冲区的数据包都带有一个数据包头,它包括如时间戳、数据包大小等消息。 为了使配置更具灵活性,在运行的时候,内核与用户控件缓冲区的设置也能够被改变,而 与 库则提供了实现该功能的接口函数。 当一个新的数据包到来时,如果缓冲区已满,该数据包将被丢弃,就会造成丢包。 2. 动态链接库模块 是一个动态链接库,并提供了一些低层的函数,用来实现以下功能: 基于 TCP/IP 的协议分析器设计 7  安 装、 启动、设置和停止 NPF 设备驱动程序;  设置 NPF 驱动程序 实现数据包的 发送和接收;  获取已连接 的网络适配器列表;  获取适配器的不同列表的所有地址信息;  查询 /设置一个低层的适配器参数。 提供了对 winpcap 的低层函数的访问,这种访问依赖于系统。 并且它还输出一个可以在所有 Windows 操作系统中通用的 API,这样,操作系统和库就可以在所有的Windows 操作系统下重新编译运行。 3. 动态链接库模块 动态链接库模块 层次在 之上。 它 是一个包含了公共 winpcap API的动态链接库,它输出了一组依赖于系统 、 用来捕获和分析网络流量的函数 , 但是它的调用不依赖于操作系统,它提供了更加高层的、抽象的函数。 库中的接口函数分为两部分:一部分是与 libpcap 库兼容,另一部分 与 libpcap 库 是 不兼容 的。 因为 winpcap是以 libpcap 为基础 设计的,所以它继承了 libpcap 的一些函数,又开发出一些其他高层的函数,而且这些函数的调用方法不变。 在网络安全工具开发的过程中,程序员有两类的 API可以使用:一类是 中 的原始函数 ;另一类是 中提供的高层函数,这些函数为用户提供了功能更加强大的调用。 一般情况下, 能自动调用 的函数,所以程序员可以直接使用 动态链接库的函数。 winpcap 的主要函数及相关功能 本次毕业设计中用到的主要函数如表 22 所示: 1) pcap_open。 用于打开本地主机的网络适配器,并且可进行网络数据包的捕获。 2) pcap_lookupdev。 获得本机的网络接口。 3) pcap_freealldevs_ex。 用于释放打开函数 pcap_openxxx 所获得的相关资源。 4) pcap_dispatch 或 pcap_loop;用于接收一组数据包。 5) pcap_next_ex;用于从一个网络适配器设备或从一个脱机文件中读取一个数据包。 6) pcap_pile;用于将一个用高级语言描述的过滤表达式编译成一个能够被过滤虚拟机所执行的低层字字节。 7) pcap_setfilter;用于将一个过滤的字节码与一个内核捕获示例相关联。 8) pcap_datalink;获取数据链路层类型,如 10Mbps 以太网基于 TCP/IP 的协议分析器设计 8 第三章 TCP/IP 协议分析模块 TCP/IP 分析过程 TCP/IP 模型 网络协议通常 要 分 不同的 层次进行开发, 而且每一层所 负责通信功能 不同, TCP/IP 协议簇就 是一组不同层次上的多个协议的组合。 在 TCP/IP 协议栈中,驻留有两个不同的协议,即无连接的 UDP 和面向连接的 TCP 协议 [12], TCP/IP 并不完全符合 OSI 的七层协议体体系结构。 OSI 是开放系统互连基本参考模型的简称,是一种七层协议的体系结构, 该模型的目的是使各 种硬件在相同的层次上互相通信, 这七层协议由下至上分别为物 理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 而 TCP/IP 通信协议通常被认 为是一种四层协议系统,它包含应用层、运输层、网际层、网络接口层; 每一层分别负责不同的功能 [13]: 1) 应用层负责处理特定的应用程序细节。 应用层直接为用户的进程提供服务。 在因特网中的应用层协议很多,几乎各种不同的 TCP/IP 实现都会提供下面这些通用的应用程序:  Tel 远程登录。  FTP 文件传输协议。  SMTP 简单邮件传送协议。  SNMP 简单网络管理协议。 2) 运输层的任务即使负责向两个主机上的应用程序提供端到端的通信。 在 TCP/IP 协议簇中,有两个互不相同的传输协议: TCP(传输控制协议)和 UDP(用户数据报协议)。 3) 网际层负责为分组交换网上的不同主机提供通信服务。 在 TCP/IP 协议簇中,网络层协议包括 IP 协议, ICMP 协议( Inter 互联网控制报文协议),以及 IGMP 协议( Inter 组管理协议)。 4) 网络接口层通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。 它们一起处理与传输介质的物理接口细节。 TCP/IP 的协议 簇分层结构如图 31 所示。 基于 TCP/IP 的协议分析器设计 9 应 用 进 程应 用 进 程 应 用 进 程 应 用 进 程U D PT C PI C M P I P I G M PA R P硬 件 接 口R A R P媒 体网 络 接 口 层网 际 层运 输 层应 用 层 图 31 TCP/IP 协议簇中不同层次的协议 数据包的封装与分用 当应用层的应用程序将数据传送给传输层的 TCP 或 UDP 时,数据就被送入协议栈中。 协议栈的每一层对收到的数据报都要进行再处理,主要是增加所在层的首部信息(有时还要增加尾部信息),直到数据转化为一串二进制比特流送入网络,这个过程称为数据的封装 [14]。 当需要发送数据时 就要进 行 封装,该过程如图 32 所示。 数据封装的过程还 是在在 TCP/IP 协议栈中进行。 首先,根据 TCP 或 UDP 协议封装的数据 要 传给 IP,然后 根据IP 协议 将数据报 封装并传给网络接口层 ,此时的 数据单元 被 称作 IP 数据报。 而 IP 数据报需要在以太网上传输,所以要将其封装成以太网帧,通过以太网传输的比特流就可以通过物理介质发送数据了。 当以太网帧到达目的主机时,数据又被送入协议栈,每层的协议盒根据报文首部中的协议标识来确定接收该数据的上层协议的类型,这个过程称作数据包的分用。 此时,数据包就开始从协议栈中由数据链路层至应用层,同时 去掉各层协议加上的报文首部。 最后将数据交给上层的应用程序处理。 图 33 显示了该过程是如何发生的。 基于 TCP/IP 的协议分析器设计 10 传输层首部 应用程序数据应用层数据应用程序数据传输层首部传输层首部应用程序数据网络层首部网络层首部以太网首部 以太网首部 以太网帧IP数据报TCP/UDP数据报封装过程 解析过程 图 32 数据进入协议栈时的封装过程 应 用 程 序 应 用 程 序 应 用 程 序 应 用 程 序T C PU D PI C M PI G M PI PA R PR A R P以 太 网驱 动 程 序进 入 的 帧根 据 以 太 网帧 首 部 分 用根 据 I P 首 部分 用根 据 端 口号 分 用 图 33 以太网数据帧的分用过程 主要协议数据包格式 1) 以太网帧格式 在 TCP/IP 的世界中,由于历史的原因,以太网 IP 数据报的封装产生了两种标准:一种是在 RFC894 中定义的,称为 标准;另一种是在 RFC1042 中定义的,其中,最常使用的封装格式是 RFC894 定义的格式 [13]。 其物理帧格式如图 34 所示。 基于 TCP/IP 的协议分析器设计 11 目 的 地 址 源 地 址 类 型 数 据C R C6 字 节6 字 节 2 字 节 4 6 ~ 1 5 0 0 字 节 4 字 节 图 34 以太网帧的数据结构 以太网中的类型字段的值定义了后续数据的上层协议类型。 由于 标准规定的类型字段的有效值均大于 数据的最大长度 1500,所以,可以根据这个来判断接收到的以太网帧是否为常用的 RFC894 的封装格式。 该类型字段的值与对应的上层协议类型表如表 31 所示。 表 31 类型字段对照表 类型字段值 上层协议类型 0x0080 IP 0x0806 ARP 0x0835 RARP 0x86dd IPv6 2) ARP 信息格式 地址解析协议 ARP 就是将计算机中的 IP 地址转换 成物理地址,而且地址解析只能在本地网络中进行。 ARP 中规定了两种信息的基本类型:请求 (Request)和应答 (Response)。 ARP的格式如图 35 所示。 硬 件 地 址 类 型 协 议 地 址 类 型硬 件 地 址 长 度 协 议 地 址 长 度 操 作 类 型发 送 方 硬 件 地 址 ( 前 3 2 位 )发 送 方 硬 件 地 址 ( 后 1 6 位 )发 送 方 硬 件 地 址 ( 后 1 6 位 )接 收 方 硬 件 地 址 ( 前 1 6 位 )发 送 方 协 议 地 址 ( 前 1 6 位 )发 送 方 协 议 地 址 ( 后 3 2 位 )接 收 方 协 议 地 址接 收 方 硬 件 地 址 ( 后 3 2 位 ) 图 35 ARP 信息 格式 3) IP 数据报的格式 网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一,也是最重要的因特网标准协议之一。 IP 数据报的结构类型如图 36 所示。 基于 TCP/IP 的协议分析器设计 12 版 本 报 头 长 度 服 务 类 型 ( T O S ) 总 长 度信 息 包 标 志 标 志 分 段 偏 移 量生 命 周 期 ( T T L ) 协 议 校 验 和源 I P 地 址目 的 I P 地 址I P 选 项 与 填 充 符 图 36 IP 数据报结构 不管是 运输层 协议还是 ICMP 和 IGMP 协议,它们 都要向 IP 传送数据 ,因此 网际层必须在生成的 IP 首部中加入某种标识,以表明数据属于哪一个协议。 该标识 存储在 IP 数据结构的协议 域,分别是用数值 1 表示 ICMP 协议, 数值 2 表示 IGMP 协议, 数值 6 表示 TCP协议, 数值 17 表示 UDP 协议。 4) ICMP 数据报格式 ICMP 是一种差错报告 机制,它允许路由器向其他路由器或主机发送差错或控制报文以便更有效地转发 IP 数据报和提高交付成功地机会。 ICMP 的数据报格式如图 37 所示。 类 型 代 码 校 验 和( 不 同 类 型 和 代 码 有 不 同 的 内 容 ) 图 37 ICMP 数据报格式 5) TCP、 UDP 数据报格式 传输控制协议 (TCP)定义了两台计算机之间进行可靠的传输 和 数据 的交换,并且 确认信息的格式。 这 是计算机为确保数据的正确到达而采取的措施。 TCP 数据报的格式如图 38所示。 其中码元比特为 TCP 的标志比特。 该字段的每一位置 1 时的意义如下列出:  URG:紧急指针有效。  ACK:确认序号有效。  PSH:接收方应该尽快将这个报文交给应用层。  RST:重建连接。  SYN:同步序号用来发起一个连接。  FIN:发端完成发送任务。 基于 TCP/IP 的协议分析器设计 13 源 端 口窗 口序 列 号确 认 序 列 号头 部 长 度确 认 序 列 号保 留 码 元 比 特目 的 端 口校 验 和 紧 急 指 针可 选 项 填 充 位数 据 区 图 38 TCP 数据报格式 为了在给定的主机上能识别多个目的地址,同时允许多个应用程序在同一台主机上工作并能独立地进行数据报的发送和接收,在 TCP/IP 协议簇中设计了用户数据报协议 UDP。 UDP 数据包格式如图 39 所示。 源 端 口 目 的 端 口报 文 长 度 校 验 和数 据 区 图 39 UDP 数据报格式。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。