已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
兰州交通大学博文学院毕业设计 论文 I 摘要摘要 基于数据链路层的网络计费方式中关键的技术在于链路层数据包的捕获及分析 首 先 本文介绍了用于数据包捕获的网络嗅探技术的工作原理 并给出应用 winpcap 实 现数据包获取类的设计 然后在介绍了分层网络数据包的类型及结构的基础上 给出 数据包分析处理类的设计 分析出的有用信息存于参数类中记录入数据库 供计费模 块所用 关键词 包捕获 网络嗅探器 winpcap 包分析 兰州交通大学博文学院毕业设计 论文 II Abstract The key technology of net charging based on data link Layer is the capture and analysis of data frame Firstly the paper introduces the principle of sniffer technology to capture data packets and presents the design of packet capture class Then It introduces the types and structures of packets and presents the design of packet analysis class Being adopted in the net charging module the useful information in parameter class are stored into the database system Key words Capture Sniffer Winpcap Analysis 兰州交通大学博文学院毕业设计 论文 III 目录目录 1 绪论 1 1 1 问题的提出 1 1 2 网络计费方式 1 1 3 本文研究内容 3 1 4 本文的组织 3 2 网络嗅探的工作原理 4 2 1 基础知识 5 2 1 1 以太网络的工作原理 5 2 1 2 以太网卡工作模式及原理 6 2 1 3 HUB 工作原理 6 2 1 4 局域网如何工作 7 2 2 Sniffer 原理 8 3 数据包的分析 10 3 1 分层协议 10 3 1 1 数据链路帧 11 3 1 2 ARP 数据包 12 3 1 3 IP 数据报 13 3 1 4 TCP 数据报 14 3 1 5 UDP 数据报 16 3 1 6 ICMP 报文 16 3 2 系统中数据包处理的实现 17 4 基于 Winpcap 的数据包获取实现 18 4 1 BPF 18 4 1 1 Libpcap 19 4 1 2 Libpcap 函数库框架 19 4 2 Winpcap 20 4 2 1 winpcap 结构分析 20 4 2 2 wpcap dll 库函数介绍 22 结论 23 致谢 24 兰州交通大学博文学院毕业设计 论文 IV 参考文献 25 兰州交通大学博文学院毕业设计 论文 1 1 1 绪论绪论 1 11 1 问题的提出问题的提出 面对世界新科技革命的挑战和我国经济发展对科技不断增长的需求 我国作出了 加快科技进步 实施科教兴国的重大战略决策 在这一重大决策的指导下 协调推进 工业化与信息化的发展就成为历史的必然 按照协调推进工业化和信息化的要求 那 就是要在全社会广泛应用信息技术 提高计算机和网络的普及应用程度 加强信息资 源的开发利用 政府行政管理 社会公共服务 企业生产经营都要运用数字化 网络 化技术 加快信息化步伐 当前 随着政府上网和企业上网工程的全面展开 各个政 府部门及企事业单位 Internet 应用越来越走向深入 在初期的宽带网络建设中 从重量级的电信企业到房地产商都投身到这场意图改 变中国百姓生活的信息化建设中 但人们逐渐认识到 在这场没有硝烟的战争中 宽 带应用才是真正的主宰者 于是人们纷纷寻找适合宽带网络的应用支撑技术 宽带给 互联网带来了新的一页 带来了更多精彩的多媒体应用 当宽带接入的收费与拨号的 费用相差无几的时候 宽带接入代替了原有大部分的拨号接入 宽带接入的发展 给 人们带来了无穷无尽的资源 可以在信息高速公路上尽情驰骋 网上办公 可视听在 线会议 远程炒股 在线欣赏影视大片 和远方的朋友交流 宽带让人们的生活越 来越丰富多彩 但是在享受丰富的网络生活的同时 引发的宽带计费问题也越来越突 出 各单位除了建网的一次性投资外 更多面临的是日常网络使用费的问题 这其中 除专线月租费 端口费 IP 地址费等固定费用外 长期 不确定的费用便是 ISP 收取 的专线网络数据流量费 由于 ISP 通常不提供上网流量统计查询手段 而是每月提供 一张收费单 因此在收到 ISP 的流量收费清单之前 专线用户单位往往不清楚自己的 网络使用及费用情况 无法控制每月的网络使用费用 另外 即使是包月收费 专线用户单位也应该对其内部各个部门或各台机器的网 络使用情况做到心中有数 如此看来 按照 谁使用 谁付费 的原则 建立自己的 网络统计计费系统 随时掌握本单位各个部门及用户的网络使用情况 收取适当的网 络使用费用 将有利于加强网络管理 保证网络的合理 有效利用 1 21 2 网络计费方式网络计费方式 网络计费系统通常包括数据采集 数据处理 费用计算 计费信息查询 计费规 则管理和用户管理等模块 当前 根据流量数据采集方式的不同 网络计费系统大体 可划分为以下几种类型 12 1 基于路由器的网络计费系统 兰州交通大学博文学院毕业设计 论文 2 当网络达到一定程度或者说要求统计相当大的一个网段的流量 路由器必须用作 整个网络的通向广域网的出路 所以路由器可作为流量统计的硬件位置 现在 路由 器也的确提供这种流量统计功能 能够给出类似于日志的流量统计的结果 因此基于 路由器的网络计费系统定时读取路由器 MIB 管理信息库中的 IP 计费表 并将这些采集 到的数据处理后装入数据库中 在此数据库基础上进行统计计费等管理工作 但为路 由器增加流量统计任务必然会加重其工作负载 而且 与计费相关的数据变量如不及 时读取就会溢出 造成数据丢失 因此数据采集周期要求很短 这样 越是网络流量 大的路由器就越是频繁传递采集数据 如此会使网络带宽更为拥挤 而且直接对路由 器访问影响整个系统的安全 此外 由于这种计费方式是按 IP 地址统计流量 对于在公共网络机房上网的用户 就无法统计其流量 另外 在采用 DHCP 进行 IP 地址动态分配时 无法分辨是哪台机 器或哪个用户产生的流量 并且它是基于第三层 IP 的包统计与网上实际的流量本身 就有一定的差距 2 基于代理服务器的网络计费系统 由于代理服务器负责整个局域网对外部网络的访问工作 凡是通向局域网以外的 所有包都由服务器转发 所以利用它进行流量统计相当方便 现在大多数代理服务器 软件产品具有登记内部网用户访问外部网的日志记录 有些产品还可以直接将日志记 录到数据库中 日志记录包括用户标志 客户机 IP 地址 建立连接的时间 传送字节 数 请求连接远程站点的 URL 等信息 根据日志记录文件或数据库 可以统计内部网 每个用户的网络流量以及上网时间 甚至可以按服务网络类型 如 HTTP SMIP FTP 等 分 别进行统计 当然 基于代理服务器的数据流量统计方法同样也适用于局域网拨号上 网的情况 但这种方法只适合于小型局域网 网络一旦达到一定程度 就不是一台代 理服务器能解决的问题了 3 基于网桥的网络计费系统 这个方法是在 1997 年提出的 其核心思想是将一台 PC 机设计成网桥放在局域网 的出口 负责转发所有的帧 在转发的同时将其记录下来 再设计程序进行统计 这 种方法在思路上有所突破 但 PC 机的负担太重 它负责整个网段的所有数据的转发 同时进行统计 一旦网络出现大量突发数据 可能会影响这个网络的工作 统计也会 受影响 而且人们一般关心的是出入整个子网的流量特别是分别统计出流向国外和国 内的数据量 如果一个子网不得不包含几个网桥 则每个网桥受到的数据可能重叠 在流量统计时可能会出现一些错误 兰州交通大学博文学院毕业设计 论文 3 4 基于防火墙的网络计费系统 有些防火墙产品带有流量统计功能 因此也可以利用防火墙的监控记录进行流量 统计 进而实现计费管理 实现专线网络计费有多种方式 选择何种方式应该根据各 单位的实际情况 总的说来 网络计费系统应该结合各单位的网络结构整体设计 以上几种方法各有 利弊 不免有些缺憾 由此提出了一种新的方案 基于数据链路层的网络流量计费方案 为了增加流量统计的精确度 被统计的对象 应尽量接近于 ISO 7 层模型的低层 数据链路层 第二层 是合理的位置 这种方法利 用了以太网的广播传输特性 使以太网卡 NIC 工作在混杂模式 以捕获局域网上每个 以太网数据帧 通过分析每一帧 将表示帧长度的字段抽取出来 进而统计以太网上 各个 IP 地址的网络流量 当然也可统计 IPX 协议或其他网络协议的流量 实现网络计 费 这种方法要求以太网数据帧捕获采集工作站与网络出口路由器或边界路由器必须处 在同一网段上 即必须将路由器 LAN 端口与数据帧捕获采集工作站连接在同一个共享 式集线器上 这种获取数据帧的技术被称之为而 sniffer 嗅探器技术 此方法只接收 不发送 因此不占用网络带宽 不增加路由器的工作负荷 对网络和路由器工作无任 何影响 是一种比较好的方案 1 31 3 本文研究内容本文研究内容 本论文为实现基于数据链路层的网络计费系统 主要研究系统中数据采集使用的 sniffer 网络嗅探器技术 详细介绍用于实现此技术的 winpcap 函数库 基于 1ibpcap 函数库 并给出基于 winpcap 的数据包获取的实现 同时实现对数据包的分析处理 提取用于计费的有用信息 如获取包的时间 源 目的地址 数据长度等 1 41 4 本文的组织本文的组织 第一章 绪论 阐述当前宽带计费方式 引出基于数据链路层的宽带计费方式 再 给出本文所研究的主要内容 第二章 讲述网络嗅探器的工作原理 第三章 对捕获的数据包进行分析处理 提取用于计费的有用信息 第四章 讲解实现网络嗅探器的函数库 并给出基于此的实现 结 论 对全文的工作做一个研究总结 并指出了今后的工作和研究方向 兰州交通大学博文学院毕业设计 论文 4 2 2 网络嗅探的工作原理网络嗅探的工作原理 sniffer 网络嗅探器 是一种常用的收集有用数据方法 这些数据可以是用户的帐 号和密码 可以是一些商用机密数据等等 ISS 为 sniffer 这样定义 sniffer 是利用 计算机的网络接口截获目的地为其他计算机的数据报文的一种工具 它几乎和 internet 有一样长久的历史了 最早是给系统管理员提供的一个分析网络和查明哪里 有错误发生的工具 在网络安全界从事网络安全的技术人员和相当一部分准黑客 指那 些使用现成的黑客软件进行攻击而不是根据需要去自己编写代码的人 都不会对网络嗅 探器 sniffer 感到陌生 网络嗅探器无论是在网络安全还是在黑客攻击方面均扮演了 很重要的角色 网络嗅探手段可以有效的捕获到在网络上传输的数据包 再加以对这 些数据包的分析 网络管理员可以清楚的了解网络的运行状况 有效的维护网络的安 全与稳定 随着网络技术的普及 网络嗅探器也被相当一部分黑客所利用 他们或自 己编写代码或利用现成的网络嗅探工具软件将网卡设置为混杂模式 对网络上传输的 数据包进行捕获与分析 从中获取有价值的信息后对网络发动进一步的攻击 虽然网 络嗅探器技术被黑客利用后会对网络安全构成一定的威胁 但嗅探器本身的危害并不 是很大 主要是用来为其他黑客软件提供网络情报 真正的攻击主要是由其他黑客软 件来完成的 而在网络安全方面 网络嗅探手段可以有效地探测在网络上传输的数据 包信息 通过对这些信息的分析利用是有助于网络安全维护的 可见 嗅探器实际是一把双刃剑 sniffer 的正当用处主要是分析网络的流量 以 便找出所关心的网络中潜在的问题 例如 假设网络的某一段运行得不是很好 报文 的发送比较慢 而我们又不知道问题出在什么地方 就可以用网络嗅探器来作出精确 的问题判断 在合理的网络中 sniffer 的存在对系统管理员是至关重要的 系统管理 员通过 sniffer 可以诊断出大量的不可见模糊问题 这些问题涉及两台乃至多台计算 机之间的异常通讯有些甚至牵涉到各种协议 借助于 sniffer 网络管理员可以方便的 确定出多少流量属于哪个网络协议 占主要通讯协议的主机是哪一台 大多数通讯目 的地是哪台主机 报文发送占用多少时间 或者相互主机的报文传送间隔时间等等 这为管理员判断网络问题 管理网络区域提供了非常宝贵的信息 通过以上分析 可以得知网络嗅探器也同样可以为我们进行网络计费所用 在本 系统中 我们就采用 sniffer 技术来获取网络数据包 通过对数据包的分析来确定各 机的网络流量 将数据存入数据库后供计费模块进行统计计费 为了对以太网中 sniffer 的工作原理有一个深入的了解 我们先了解一下以太网的工作原理以及 HUB 与 网卡的原理 兰州交通大学博文学院毕业设计 论文 5 2 12 1 基础知识基础知识 2 1 12 1 1 以太网络的工作原理以太网络的工作原理 1979 年初 施乐和 DEC 讨论共同建造以太网 LAN 的设想 结果却制定出将以太网 转变成产业标准的计划 以太网技术被转到标准化组织 位于华盛顿特区的美国标准 化局 NBS 其后 Intel 的加入更是加速了以太网的发展 施乐提供技术 DEC 是以 太网硬件的强有力的供应商 具有雄厚的技术力量 Intel 提供以太网芯片构件 1980 年 9 月 30 日 DEC Intel 和施乐公布了第三稿的 以太网 一种局域网 数据链路层 和物理层规范 1 0 版 这就是现在著名的以太网蓝皮书 也称为 DIX 版以太网 1 0 规范 DIX 最初规定在 20MbPs 下运行 最后降为 10Mbps 在以后两年里 DIX 重新定义 该标准 并在 1982 年公布了以太网 2 0 版规范 并作为终结 在 DIX 开展以太网标准化工作的同时 世界性专业组织 IEEE 组成一个定义与促进 工业 LAN 标准的委员会 并以办公室环境为主要目标 该委员会名叫 802 工程 DIX 集 团虽已推出以太网规范 但还不是国际公认的标准 所以在 1981 年 6 月 IEEE802 工 程决定组成 802 3 分委员会 以产生基于 DIX 工作成果的国家公认标准 一年半以后 即 1982 年 12 月 19 日 19 个公司宣布了新的 IEEE802 3 草稿标准 1983 年该草稿最 终以 IEEE10BASE5 而面世 今天的以太网和 802 3 可以认为是同义词 90 年代 802 3 标准中的物理层标准 10Base T 的推出 使得 Ethernet 性能价格 比大大提高 使得以太网成为最为重要的一种局域网建网技术 虽然其它网络技术也 曾经被认为可以取代以太网的地位 但绝大多数网络技术人员认为以太网高度灵活 相对简单 易于实现 所以仍然把以太网作为首选的网络解决方案 通常我们所说的 以太网主要是指以下三种不同的局域网技术 1 以太网 IEEE802 3 采用同轴电缆作 为网络媒体 传输速率达到 10Mbps 2 100Mbps 以太网 又称快速以太网 采用双 绞线作为网络媒体 传输速率达到 100Mbps 3 1000Mbps 以太网 又称为千兆以太 网 采用光缆或双绞线作为网络媒体 传输速率达到 IO00Mbps IGbps 14 Ethernet 的核心技术就是载波侦听 冲突检测 CSMA CD carrier sense multiple aeeess with collision deteetion 技术 所谓载波侦听是指在网络中的每个站点都 具有同等的权利 在传输自己的数据时 首先监听信道是否空闲 如果空闲 就传输自 己的数据 如果信道被占用 就等待信道空闲 而冲突检测则是为了防止发生两个站 点同时监侧到网络没有被使用时而产生冲突 以太网采用了 CSMA CD 技术 由于使用 了广播机制 所以 所有与网络连接的工作站都可以看到网络上传递的数据 兰州交通大学博文学院毕业设计 论文 6 2 1 22 1 2 以太网卡工作模式及原理以太网卡工作模式及原理 生产以太网卡的时候 网络设备制造商会在硬件内部写入一个唯一的号码 称为 MAC 地址 MAC 地址也叫物理地址 硬件地址或链路地址 它在计算机里以二进制表示 为 48 位 6 个字节 通常表示为 12 个 16 进制数 每 2 个 16 进制数之间用冒号隔开 如 08 00 20 0A 8C 6D 就是一个 MAC 地址 其中前 6 位 16 进制数 08 00 20 代表网络 硬件制造商的编号 它由 IEEE 分配 而后 3 位 16 进制数 OA 8C 6D 代表该制造商所制 造的某个网络产品 如网卡 的系列号 只要不去更改自己的 MAC 地址 那么这个 MAC 地址在世界上就是惟一的 网卡的 MAC 地址与 IP 地址之间的转换是通过 ARP RARP 来 解析与反解析的 用 ipconfig ifconfig 可以查看到这个 MAC 地址 在网卡实际工作时 当收到传输来的数据 网卡内的单片程序先接收数据头的目 的 MAC 地址 根据计算机上的网卡驱动程序设置的接收模式判断该不该接收 认为该 接收就在接收后产生中断信号通知 CPU 认为不该接收就丢弃不管 所以不该接收的数 据网卡就被截断了 计算机根本就不知道 CPU 得到中断信号产生中断 操作系统就根 据网卡驱动程序中设置的网卡中断程序地址调用驱动程序接收数据 驱动程序接收数 据后放入信号堆栈让操作系统处理 13 以太网卡在完成收发数据包的工作中 有两种接收模式 一种为混杂模式 不管数 据帧中的目的地址是否与自己的地址匹配 都接收下来 另一种为非混杂模式 只接收 目的 MAC 地址与自己相匹配的数据帧 以及广播数据包 和组播数据包 通常情况下 以太网卡都工作在非混杂模式 只接收这样的包 即目标 MAC 地址与自己相匹配的数 据帧 我们为了实现网络计费 需要监听网络上的流量 就必须将网卡的工作模式设 置为混杂 2 1 32 1 3 HUBHUB 工作原理工作原理 由于以太网等很多网络 常见共享 HUB 连接的内部网 是基于总线方式 物理上是 广播的 就是当一台机器发给另外一台机器的数据 共享 HUB 先收到然后把它接收到 的数据再发给其他的 来的那个机器不发了 每一台机器 所以在共享 HUB 下面同一网 段的所有机器的网卡都能接收到发来的数据 交换式 HUB 的内部单片程序能记住每台机器的网卡的掀 C 地址 以后该哪台机器 接收就发往哪台机器 而不是像共享 HUB 那样发向所有的机器 所以交换 HUB 下只有 该接收数据的机器的网卡能接收到数据 当然广播包还是发往所有机器 显然共享 HUB 的工作模式使得两台机器传输数据的时候其他机器的网卡也被占用了 所以共享 HUB 决定了同一网段同一时间内只能有两台机器进行数据通信 而交换式 HUB 两台机器传 兰州交通大学博文学院毕业设计 论文 7 输数据的时候别的网卡没有被占用 所以别的网卡之间也可以同时传输 这就是共享 HUB 与交换阴 B 不同的两个地方 共享 HUB 是同一时间只能一台机器发送数据并且所有 的机器都可以接收 而只要不是广播数据 交换现 B 同一时间可以有多对机器进行数 据传输并且数据是私有的 13 2 1 42 1 4 局域网如何工作局域网如何工作 数据在网络上是以很小的称为帧 Frame 的单位传输的 帧由几部分组成 不同的 部分执行不同的功能 例如 以太网的前 12 个字节存放的是源和目的的地址 这些 位告诉网络 数据的来源和去处 以太网帧的其他部分存放实际的用户数据 TCP 工 P 的报文头或 IPX 报文头等等 帧通过特定的网络驱动程序进行成型 然后通过网卡发送到网线上 通过网线到 达它们的目的机器 在目的机器的一端执行相反的过程 接收端机器的以太网卡捕获 到这些帧 并告诉操作系统帧的到达 然后对其进行存储 通常在局域网 LAN 中同一个网段的所有网络接口都有访问在物理媒体上传输的所 有数据的能力 同时 每个网络至少也有一个广播地址 代表所有的接口地址 在正 常情况下 一个合法的网络接口应该只响应这样的两种数据帧 1 目标机具有和本地 网络接口相匹配的硬件地址 2 帧的目标机具有 广播地址 在接受到上面两种情况的数据包时 网卡通过 cpu 产生一个硬件中断 该中断能 引起操作系统注意 然后将帧中所包含的数据传送给系统进一步处理 当采用共享 HUB 用户发送一个报文时 这些报文就会发送到 LAN 上所有可用的机 器 在一般情况下 网络上所有的机器都可以侦听到通过的流量 但对不属于自己的 报文则不予响应 常见的共享式网络示意图 2 1 如下 兰州交通大学博文学院毕业设计 论文 8 图 2 1 正常情况下 工作站 A 不会捕获属于工作站 B 和 C 的数据 而是简单的忽略这些 数据 但如果我们将局域网中某台机器 如 A 的网络接口处于混杂 promiscuous 模式 即网卡可以接收其收到的所有数据包 那么它就可以捕获网络上所有的报文和帧 它被配置成这样的方式 包括其软件 就具有了嗅探器的功能 B C 工作站处于同等的 地位 如果将它们网卡设置为混杂模式 也同样成为了嗅探器 2 22 2 SnifferSniffer 原理原理 有了前面的网络基本知识和以太网 网卡及 HUB 的工作原理后 下面来详细讲讲 sniffer 首先 要知道 sniffer 要捕获的东西必须是要物理信号能收到的报文信息 显然只要通知网卡接收其收到的所有包 也就是将网卡设置为混杂 promiscuous 模式 指网卡对总线上传送的所有数据进行侦听 而不仅仅是与自己的地址相匹配的数据 在共享 HUB 下就能接收到这个网段的所有包 但是交换 HUB 下就只能是自己的包加上 广播包 要想在交换 HUB 下接收到发往别的机器的包 那就要让其发往想收到数据包的机 器所在的网卡 交换 HUB 记住一个网卡的 MAC 是通过接收来自这个网卡的数据后并记 住其源 MAC 就像一个机器的 IP 与 MAC 对应的 ARP 列表 交换 HUB 维护一个物理口 就 是 HUB 上的网线插口 这之后提到的所有 HIJB 口都是指网线插口 与 MAC 的表 所以 可以欺骗交换 HUB 的 可以发一个包设置源做 C 是你想接收的机器的撇 C 那么交换 HUB 就把你机器的网线插的物理口与那个 MAC 对应起来了 以后发给那个 MAC 的包就发 往你的网卡了 也就是你的网卡可以 sniffer 到了 注意这物理口与 MAC 的表与机器 兰州交通大学博文学院毕业设计 论文 9 的 ARP 表一样是动态刷新的 那台机器发包后交换 HUB 就又记住他的口了 所以实际 上是两个网卡在争 这只能应用在只要收听少量包的场合 内部网基于 IP 的通信可以用 ARP 欺骗别人机器让其发送给你的机器 如果要想不 影响原来两方的通信 可以欺骗两方 让其都发给你的机器再由你的机器转发 相当 于做中间人 这用 A 即加上编程很容易实现 并且现在很多设备支持远程管理 有很 多交换 HUB 可以设置一个口监听别的口 不过这需要管理权限 利用这一点 可以将一台计算机的网络连接设置为接受所有以太网总线上的数据 从而实现 Sniffer Sniffer 就是一种能将本地网卡状态设成 混杂 状态的软件 当 网卡处于这种 混杂 模式时 该网卡具备 广播地址 它对遇到的每一个帧都产生 一个硬件中断以便提醒操作系统处理流经该网卡上的每一个数据包 绝大多数的网卡具 备置成混杂模式的能力 可见 sniffer 工作在网络环境中的底层 它会拦截所有的正在网络上传送的数据 并且通过相应的软件处理 可以实时分析这些数据的内容 进而分析所处的网络状态 和整体布局 所以我们在设计网络计费系统时 可以采用嗅探技术来获取网络上传送 的数据包 进而对此进行分析 得到需要的计费信息 兰州交通大学博文学院毕业设计 论文 10 3 3 数据包的分析数据包的分析 从包获取类中捕获的数据包是数据链路层的帧 而数据在网络中传递时是分层依 次封装的 因此需要从链路层协议开始进行分析 一直到应用层的协议 首先我们来 看看互联网协议分层模型 3 13 1 分层协议分层协议 ISO 的 OSI 开放系统互联模型 是分层的 各层功能分离 对其他层次是透明 可 独立设计 实现和测试的 通过 SAP Service Access Point 为上层提供服务 OSI 分 7 层 其它具体的协议栈都与 OSI 相对应 下表 3 1 所示为 OSI 七层协议与 TCP IP 栈 各层功能对应 OSI 模型各层功能总结 TCP IP 各层功能总结 表 3 1 通常 数据在协议栈中传递时 每一层在把数据传送到低一层之前都往头部加入 一些附加信息 因此 在网络中传输的帧包含了一系列嵌套的头部 数据在协议栈中 的传输过程图示如下 应用层在程序之间传递信息 表示层处理文本格式化 显示代码转 换 会话层建立 维持 协调通信 传输层确保数据正确发送 网络层决定传输路由 处理信息传递 数据链路层编码 编址 传输信息 物理层管理硬件连接 应用层 Telnet SNMP FTP HTTP SNTP 传输层 TCP UDP 网络层 IP ICMP IGMP 链路层 Ethernet ARP RARP 兰州交通大学博文学院毕业设计 论文 11 图 3 1 在通常的以太网络中 使用 TCP IP 协议栈 下面我们依次介绍封装的各层信息 3 1 13 1 1 数据链路帧数据链路帧 在数据链路层 可以获得以太网的头部 以太网的头部长度为 14 字节 分别由 6 字节的目的以太网地址 琳 C 地址 6 字节的源以太网地址及 2 字节的帧类型组成 如 表 3 2 同步字 8 目的 MAC 6 源 MAC 6 类型 2 数据 46 1500 CRC 4 表 3 2 其中同步字与 CRC 由硬件产生 由此可定义帧结构为 define ETH ALEN 6 以太网地址位数 Struct ether header unsigned char h dest ETH ALEN 目的地址 unsigned ehar h source ETH ALEN 源地址 unsigned short h Proto 帧类型 帧类型给出了该数据帧中所包含的协议类型 如 ARP RARP IP IPX 等 它们对 应的协议号分别为 十六进制 0806 8035 0800 8137 其中 ARP 与 RARP 为数据链 路层协议 而 IP 和 IPX 为网络层协议 在本系统中 将对这些协议进行识别 但主要 对 IP 0800 和 ARP 0806 协议做进一步的分析 兰州交通大学博文学院毕业设计 论文 12 3 1 23 1 2 ARPARP 数据包数据包 ARP 协议用于将 IP 地址转换为 MAC 地址 RFC826 给出的 ARP 标准只描述了 ARP 消 息的通用形式 并规定了对每类网络硬件怎样确定细节 之所以要使 A 即消息适合于 硬件 是由于 ARP 消息含有硬件地址域 ARP 的设计者意识到他们无法为硬件地址域选 择一个固定的尺寸 因为新的网络技术不断涌现 使它们的地址尺寸越来越大 所以 在设计 ARP 消息的开始处引入了一个固定大小的域 这一域对消息所使用的硬件地址 尺寸做了规定 例如 当在以太网中使用 ARP 时 硬件地址长度定为六个字节 因为 一个以太网地址是 48 位长 为了增加 ARP 的通用性 设计者同硬件地址一样为协议地 址引入一个地址长度域 因此 ARP 不限于 IP 地址或特定的物理地址一从理论上说 该 协议也可以用于一个任意的高层地址和一个任意的硬件地址的联编 但实际上 ARP 的 通用性并没有充分使用 大部分 ARP 用于 IP 地址和以太网地址的联编 0 15 31 硬件地址空间协议地址空间 硬件地址长度协议地址长度操作代码 表 3 3 这 8 个字节即为了通用而定义的地址类型位 下面接着为源硬件地址 协议地址 目的硬件地址 协议地址 操作代码域规定了此消息是请求 值为 l 还是应答 值为 2 10 由此定义 ARP 包结构如下 Struct arphdr unsigned short ar hrd format of hardware address unsigned short ar pro format of protocol address unsigned char ar hln length of hardware address unsigned char ar pln length of protocol address unsigned short ar op ARP opcode command Struct ether arp struct arphdr ea hdr fixed size header u char arp sha ETH ALEN sender hardware address u char arp spa 4 sender protocol address 兰州交通大学博文学院毕业设计 论文 13 u char arp tha ETH ALEN target hardware address u char arp tpa 4 target protocol address define arp hrd ea hdr ar hrd define arp pro ea hdr ar pro define arp hln ea hdr ar hln define arp p1n ea hdr ar pln define arp op ea hdr ar op 3 1 33 1 3 IPIP 数据报数据报 根据 RFC791 里的定义 没有选择项时 1P 包头的长度为 20 字节 主要包含以下 内容 源 IP 地址 目的 IP 地址 分片标志和偏移 及 IP 负载的协议类型 长度为 l 字 节 IP 包内的协议类型指明该 IP 包负载的协议类型 即 TCP UDP 或 ICMP 其协议 号分别为 6 17 和 1 IP 协议格式如下 0 15 31 版本 4头长 4服务类型 8总长 16 标识 16标志 3片偏移 13 生存周期 8协议 号 8头标校验和 16 源 IP 地址 32 目的 IP 地址 32 数据选择项 可变 0 32填充项 数据 表 3 4 IP 数据报头部里的每个域都有固定的大小 数据报以 4 位的协议版本号 当前版 本号 4 和 4 位的头部长度开始 头部长度指出以 32 位字长为单位的头部长度 服务类 型 SERVICE TYPE 域包含的值指明发送方是否希望以一条低延迟的路径或是以一条高 吞吐率的路径来传送该数据报 当一个路由器知道多条通往目的地的路径时 就可以 靠这个域对路径加以选择 总长 TOTAL LENGTH 域为 16 位的整数 说明以字节计的数 据报总长度 包括头部长度和数据长度 标识 IDENTIFICATION 域用于标识数据单元 的地址即分片号 由发送方入 当一个路由器对一个数据报分段时 就会将这一标识 数复制到每一段中 接收方就可利用收到的段的标识数和 IP 源地址来确定该段属于那 个数据报 标志域 3 位 用了 2 位 标识数据源是否分片 片是否结束 0 片未完 1 不分片 2 不用 另外 段偏移 FRAGMENT OFFSET 域可以告诉接收方各段的次序 生存周期 TIME TO LIVE 域用来阻止数据报在一条包含环路的路径上永远地传送 当 软件发生故障或管理人员错误地配置路由器时 就会产生这样的路径 发送方负责初 兰州交通大学博文学院毕业设计 论文 14 始化生存时间域 这是一个从 1 到 255 之间的整数 每个路由器处理数据报时 会将 头部里的生存时间减 1 如果达到 0 数据报将被丢弃 一个出错消息被发回给源主机 头部校验和 HEADER CHECKSUM 域确保头部在传送过程中不被改变 发送方对除了校验 和域的头部数据每 16 位对 1 求补 所有结果累加 并将和的补放入头部校验和域中 接收方进行同样计算 但包括了校验和域 如果校验和正确 则结果应该为 0 数学上 1 的求补是一个逆加 因此将一个值加到它自身的补上将得到零 10 由此我们可定义 IP 头结构 struct iphdr u char ip hl 4 头长 ip v 4 版本 u char ip tos 服务类型 short ip len 总长 u short ip id 标识 short ip off 段偏移 define IP RF 0 x8000 reserved fragment flag define IP DF 0 x4000 dont fragment flag define IP MF 0 x2000 more fragments flag define IP OFFMASK Oxlfff mask for fragmenting bits u char ip ttl 生存周期 u char ip p 协议 u short ip sum 校验和 struct in addr ip src ip dst 源 目的 IP 地址 3 1 43 1 4 TCPTCP 数据报数据报 TCP 协议对应于 150 051 参考模型的第 4 层即 传输层 实现端对端即主机到主 机的通信 它是 TCP 1P 协议系列中主要的传输协议 为应用程序提供了一个可靠的 可流控的 全双工的流传输服务 在请求 TCP 建立一个连接之后 一个应用程序能使 用这一连接发送和接收数据 TCP 确保数据按序传递而无重复 最终 当两个应用结束 使用一个连接时 它们请求终止连接 TCP 对所有的消息采用了一种简单的格式 包括携带数据的消息 确认以及三次握 兰州交通大学博文学院毕业设计 论文 15 手中用于创建和终止一个连接的消息 TCP 使用段 segment 来指明一个消息 RFC793 文档里定义的段格式如下 0 15 31 源端口 16目的端口 16 序号 32 确认号 32 偏移 4保留 6代码位 6窗口 16 校验和 16紧急指针 16 数据选择项 可变 0 32填充项 数据 表 3 5 当一台计算机发送一个段的时候 确认号 ACKNOWLEDGMENT NUMBER 和窗口 WINDOW 域指的是输入的数据 确认号指定了收到数据的序号 窗口指定了还剩多少缓 冲区空间 序号 SEQUENCE NUMBER 域指的是输出数据 它给出了段中携带数据的序号 接收方利用这一序号来重排乱序到达的段并利用这一序号计算确认号 目的端口 DESTINATIONPORT 域指出接收方计算机上的哪一个应用程序负责接收数据 源端口 SOURCE PORT 域指明发送数据的应用程序 最后 校验和 CHECKSUM 域含有一个 TCP 段头和数据的校验和 10 代码位有六个标志 从左到右为 URG ACK PSH RST SYN FIN 它们很好地反 应了 TCP 连接的状态 比如 TCP 连接总是通过在通信双方交换 SYN 包来开始建立新连 接 而通过 FIN RST 来终止一个连接 根据 TCP 包的源和目的端口号可以得到该包的 应用类型 比如 TELNET 的应用端口为 23 EMAIL 的端口为 25 等 由此我们可定义 TCP 头结构 struct tcphdr u short th sport source port u short th dport destination port long th seq sequence number long th ack acknowledgement number u char th off 4 data offset th x2 4 unused u char th flags define TH FIN 0 x01 兰州交通大学博文学院毕业设计 论文 16 define TH SYN 0 x02 define TH RST 0 x04 define TH PSH 0 x08 define TH ACK 0 x10 define TH URG 0 x20 u short th win window u short th sum checksum u short th urp urgent pointer 3 1 53 1 5 UDPUDP 数据报数据报 UDP User Datagram Protocol 是面向无连接的传输协议 RFC768 里定义 UDP 报头 结构如下 0 15 31 源端口目的端口 长度校验和 表 3 6 从 UDP 的端口号中也可以看出对应的应用层服务 如 DNS 对应端口号为 53 定义 UDP 报头结构如下 struct udphdr unsigned short source unsigned short Best unsigned short len unsigned short check 3 1 63 1 6 ICMPICMP 报文报文 ICMP Internet Control Message Protocol 是专门用于发送差错报文的协议 ICMP 使用 IP 来传送每一个差错报文 当路由器有一个 ICMP 报文要传递时 它会创建 一个 IP 数据报并将 ICMP 报文封装其中 也就是说 ICMP 报文被置于 IP 数据报的数据 区中 在我们的计费系统中 记录 ICMP 报文的意义不大 所以在本文中不再做具体叙 述 兰州交通大学博文学院毕业设计 论文 17 3 23 2 系统中数据包处理的实现系统中数据包处理的实现 为了计费的需要 我们对数据包进行分析处理 提取必须的信息 存入数据库 供计费子模块调用 在进行处理之类 我们先定义一参数类 Tsnifflnfo 用于存储提 取的信息 参数类 Tsnifflnfo 的成员如下 模 式成员及函数说 明 publicTsniffInfo 构造函数 public TsniffInfo 析构函数 publicTime t StartTime获包时间 publicChar DestMac 目的 MAC 地址 publicChar SourMac 源 MAC 地址 publicChar DestIp 目的 IP 地址 publicChar SourIp 源 IP 地址 publicvInt DestPort 目的端口号 publicInt SourPort 源端口号 publicChar ProtType 协议类型 publicInt flux 数据大小 流量 表 3 7 处理模块也封装为类 包处理 Thandle 类的主要成员及函数如下 模 式成员及函数说 明 public THandle const struct pcap pkthdr pkthdr const u char packet 构造函数 public THandle 析构函数 public void StartHandle 开始处理 public u int16 t handle ethernet 处理以太网帧头 public u char handle ARP 处理 ARP 包 public u char handle IP 处理 IP 包 public u char handle TCP 处理 TCP 数据报 public u char handle UDP 处理 UDP 数据报 public u char handle ICMP 处理 ICMP 包 private TsniffInfo m SniffInfo 信息值 private const u char m packet 嗅探到的包 private const struct pcap pkthdr pkthdr 包描述 表 3 8 兰州交通大学博文学院毕业设计 论文 18 4 4 基于基于 WinpcapWinpcap 的数据包获取实现的数据包获取实现 Winpcap 是一个重要的抓包工具 它是 libpcap 的 Windows 版本 利用它所提供的 库函数可以很方便的实现数据链路层的数据帧的获取 在给出 winpcap 之前 先来介 绍一下 libpcap 及包过滤基础 BPF 4 14 1 BPFBPF BPF 是 BSD Packet Filter 的简称 它是基于系统内核的包过滤器 可以将系统要 获取的数据包按照用户事先设定的规则进行过滤 这样可以极大地提高系统获取数据 包的效率 减少丢包现象的发生 通常网卡驱动程序接收到一个数据包后 将其提交给系统的协议栈 如果有进程 用 BPF 进行网络侦听 网卡驱动程序会先调用 BPF 复制一份数据给 BPF 的过滤器 过 滤器则根据用户定义的规则决定是否接收此数据包 再判断这个数据包是否是发给本 机的 如果不是发给本机的 则网卡驱动程序从中断返回 继续接收数据 如果这个数 据包是发给本机的 驱动程序会再把它提交给系统的协议栈 然后返回 BPF 工作机制 如图 4 1 所示 用户空间 内核 内核 网络 图 4 1 BPF 结构原理 UNIX 系统严格区分核心地址空间和用户地址空间 用户的应用进程不能访问核心 地址空间 由于网络监测器作为用户层进程运行 而网卡驱动程序工作在核心地址空 BPF 网络监测 器 过滤器 缓冲区 过滤器 其他应 用 缓冲区 过滤器 TCP IP 等 网络协议栈 缓冲区 网络应用Libpcap 数据链路层驱 动程序 数据链路层驱 动程序 兰州交通大学博文学院毕业设计 论文 19 间中 所以要提供用户层的接口就要把数据从核心地址空间复制到用户地址空间 这 样做系统负担很大 当网络太忙或机器速度太慢时会发生丢包 为改进性能出现了包 缓冲和包过滤机制 在 SunOS 的 NIT 中 收集来的数据包先复制到过滤器的缓冲区中 再进行过滤 故不论用户进程是否需要 每个数据包至少要作一次内存复制 Linux 的 SOCK PACKET 不作任何缓冲 且无内核过滤 在网络负载较大时效率很低 BPF 在核心设置了过滤器 在核心中及早对数据包进行过滤 只将用户需要的数据提交给用户进程 减少了数据 传送量 每个 BPF 都有一个缓冲区 如果过滤器判断接收某个数据包 BPF 就将它复制 到相应的缓冲区中暂存起来 等收集到足够多的数据后再一起提交给用户进程 这样 就减少了 read 系统调用 提高了效率 BPF 还改进了过滤方式 目前基本的过滤规则表达方式有两种 一种是布尔表达树 另一种是 BPF 使用的有向无圈控制流图 Directed Acyclic Control Flow Graph 简称 CFG 树型过滤器的设计是围绕一个基于栈的过滤求值程序 它把控制规则布尔表达 式及相关数据先
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年律师面试法律案例分析题及答案
- 2026年中国铁建校园招聘面试全攻略及模拟题集
- 2026年职场沟通与表达能力进阶试题
- 2026年废旧光伏组件回收利用技术题库
- 2026年农村柴草垛规整堆放知识考核
- 湖北中石化2026秋招新能源岗高频考点
- 员工异地办公协调服务细则
- 2026年小象理货员岗位考试商品系统录入与信息核对题
- 临床用血应急预案管理制度
- 2026年资深架构师竞聘系统设计能力知识问答
- 环氧富锌底漆施工工艺标准及注意事项
- 舰艇战伤伤员转运护理规范
- 深圳市2025年生地会考试卷及答案
- 2025《 化工企业变更管理实施规范》解读
- 个人简历模版(三页)带封面(可编辑)自我评价
- 成考专升本英语词汇必背3500词
- 2025年恒丰银行校园招聘笔试模拟试题及答案解析
- 教改项目答辩课件
- 火电精益管理办法
- 卡西欧手表5123机芯中文使用说明书
- DB64∕T 1696-2020 宁夏1:2000地理信息要素规范
评论
0/150
提交评论