毕业设计(论文)-简论网络流量监控工具的实现.doc_第1页
毕业设计(论文)-简论网络流量监控工具的实现.doc_第2页
毕业设计(论文)-简论网络流量监控工具的实现.doc_第3页
毕业设计(论文)-简论网络流量监控工具的实现.doc_第4页
毕业设计(论文)-简论网络流量监控工具的实现.doc_第5页
免费预览已结束,剩余17页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

简论网络流量监控工具的实现简论网络流量监控工具的实现 摘摘 要要 互联网迅速发展的同时,网络安全问题日益成为人们关注的焦点,病毒、 恶意攻击、非法访问等都容易影响网络的正常运行,多种网络防御技术被综合 应用到网络安全管理体系中,流量监控系统便是其中一种分析网络状况的有效 方法,它从数据包流量分析角度,通过实时地收集和监视网络数据包信息,来 检查是否有违反安全策略的行为和网络工作异常的迹象。 在研究网络数据包捕获、 tcp/ip 原理的基础上,采用面向对象的方法进 行了需求分析与功能设计。该系统在 visualc+6.0 环境下进行开发,综合采用 了 socket-raw、注册表编程和 ip 助手 api 等 vc 编程技术,在系统需求分析的 基础上,对主要功能的实现方案和技术细节进行了详细分析与设计,并通过测 试,最终实现了数据包捕获、流量监视与统计主要功能,达到了预定要求,为 网络管理员了解网络运行状态提供了参考。 关键词关键词:网络管理;数据采集;流量统计;winsock2 the design and implementation of monitoring and analyzing tool for network traffic abstract with the rapid development of internet, network safety has become peoples concern, virus, vigorous attack, illegal visit and so on can easily affect the normal network performance. various kinds of network defending technology have been comprehensively applied into the management system of network safety. network traffic system is one of the effective measures to analysis network condition. from the angle of analyzing packet traffic, it can examine the safety violation and the abnormal performance of network by timely collecting and monitoring packets information. by using the way of object-oriented, this design makes a needs analysis and ability designing based on the study of network packet collecting and tcp/ip theory. under the environment of visual c+6.0, this system adopts vc program technologies of socket-raw, windows register and iphelper api. on the basis of system analysis, it makes a deliberate analysis and test of plans and details to implement packets collecting, traffic monitoring and statistics. so this meets our needs and makes a reference for managers to get to know the network conditions. key words: network management; data collection; traffic analysis; winsock2 目目 录录 论文总页数:22 页 1引言1 1.1课题背景1 1.2网络安全管理的现状与需求1 1.3网络流量监控的引入1 1.4本文的目的与任务2 1.5论文结构安排2 2相关的概念与技术2 2.1osi 参考模型与 tcp/ip 体系结构2 2.1.1osi 参考模型2 2.1.2tcp/ip 体系结构.3 2.1.3osi 模型与 tcp/ip 体系结构的区别4 2.2传输层的编程接口windows 套接字编程技术 .4 2.2.1windows 套接字的概念 .4 2.2.2套接字类型5 2.2.3涉及的几个基本概念5 2.3原始套接字5 3网络数据的采集技术分析6 3.1windows 下原始数据包捕获的实现 .6 3.2原始数据包捕获的关键函数7 4网络流量监控系统各模块的设计与实现9 4.1开发背景介绍9 4.2总体结构设计9 4.3流程图设计10 4.4各模块功能概述与实现11 4.4.1数据包采集中各类的关系11 4.4.2数据包捕获与分析模块11 4.4.3流量获取模块13 4.4.4数据统计模块17 4.4.5常见攻击分析功能18 5系统测试19 5.1测试环境19 5.1.1硬件环境19 5.1.2操作系统及软件运行环境19 5.2测试步骤19 5.3测试结果评价19 结 论19 参考文献20 第 2 页 共 22 页 1 1 引言引言 1.11.1 课题背景课题背景 随着构建网络基础技术和网络应用的迅速发展以及用户对网络性能要求的 提高,使得网络管理成为迫切需要解决的问题,有效的网络管理能够保证网络 的稳定运行和持续发展,更重要的是,随着网络规模的扩大和黑客技术的发展, 入侵和攻击的案例日益增多,对稳定的网络服务、信息安全、互联网秩序都提 出了严峻的挑战,网络安全管理在整个网络管理系统里扮演起更为重要的角色。 1.21.2 网络安全管理的现状与需求网络安全管理的现状与需求 目前,在网络应用不断深入和技术频繁升级的同时,非法访问、恶意攻击 等安全威胁也在不断推陈出新,愈演愈烈。防火墙、vpn、ids、防病毒、身份 认证、数据加密、安全审计等安全防护和管理系统在网络中得到了广泛应用。 从网络安全专业管理人员的角度来说,最直接的需求就是根据分类在统一的界 面中监视网络中各种运行性能状态,获取相关数据信息、日志信息和报警信息 等,并进行分类汇总、分析和审计;同时完成攻击事件报警、响应等功能。因 此,用户的网络管理需要不断健全整体网络安全管理解决方案,从统一安全管 理平台总体调控配置到多层面、分布式的安全系统,实现对各种网络安全资源 的集中监控、策略管理、审计及多种安全功能模块之间的互动,从而有效简化 网络安全管理工作,提升网络的安全水平和可用性、可控制性、可管理性。 1.31.3 网络流量监控的引入网络流量监控的引入 网络安全管理体系中,流量监控和统计分析是整个管理的基础。 流量检测主要目的是通过对网络数据进行实时连续的采集监测网络流量, 对获得的流量数据进行统计计算,从而得到网络主要成分的性能指标。网络管 理员根据流量数据就可以对网络主要成分进行性能分析管理,发现性能变化趋 势,并分析出影响网络性能的因素及问题所在。此外,在网络流量异常的情况 下,通过扩展的流量检测报警系统还可以向管理人员报警,及时发现故障加以 处理。在网络流量检测的基础上,管理员还可对感兴趣的网络管理对象设置审 查值范围及配置网络性能对象,监控实时轮询网络获取定义对象的当前值,若 超出审查值的正常预定值则报警,协助管理员发现网络瓶颈,这样就能实现一 定程度上的故障管理。而网络流量检测本身也涉及到安全管理方面的内容。 由此可见,对于一个有效的网络安全管理系统来说,功能的实现都或多或 少的依赖于流量信息的获取。因此网络流量信息的采集可以说是网络安全管理 系统得以实现的核心基石。它的应用可以在一定程度上检测到入侵攻击,可以 第 3 页 共 22 页 有效地帮助管理人员进行网络性能管理,并利用报警机制协助网管人员采取对 应的安全策略与防护措施,从而减少入侵攻击所造成的损失。 1.41.4 本本文的目的与任务文的目的与任务 该网络流量监控及分析工具主要用途是通过实时连续地采集网络数据并对 其进行统计,得到主要成分性能指标,结合网络流量的理论,通过统计出的性 能指数观察网络状态,分析出网络变化趋势,找出影响网络性能的因素。 本设计题目是教师自拟项目,前期任务主要是设计并完成系统的初步框架, 实现网络数据的捕获,并解决相应问题,后期主要是通过一些 api 函数完成对 各类数据信息的统计。 本系统实现以下功能: (1)采用 winsock 编写原始套接字 socket-raw 对数据包进行采集捕获, 并可实现分类及自定义范围进行捕获; (2)对捕获的数据包进行一定的解析; (3)访问操作系统提供的网络性能参数接口,得到网卡总流量、输入流量 和输出流量; (4)系统提供了多种方式显示结果,如曲线图、列表等; (5)使用 ip 帮助 api 获取网络统计信息; (6)实现对部分常见威胁的预警,可继续开发扩展其报警功能。 1.51.5 论文结构安排论文结构安排 本论文围绕 winsock 标准套接字网络编程的各项实践内容展开。具体内容 安排如下:第一章是引言,简要介绍开发背景、设计任务和论文结构安排;第 二章介绍网络基础理论研究、数据包捕获与流量检测的技术原理;第三章介绍 如何使用原始套接字实现数据捕获;第四章重点介绍网络流量监测工具的设计 与实现过程,并且详细阐述了从系统功能总体设计、详细设计、具体实现的全 部过程;第五章介绍了软件测试情况。 2 2 相关的概念与技术相关的概念与技术 2.12.1 osiosi 参考模型与参考模型与 tcp/iptcp/ip 体系结构体系结构 2.1.12.1.1 osiosi 参考模型参考模型 开放系统互联参考模型 osi 是由国际标准化组织 iso 制定的标准化开放式 的计算机网络层次结构模型,其结构如图 1 所示。 可以看出,该结构共有七层,各层主要实现如下功能: (1)物理层,利用传输介质实现相邻节点间的物理连接,主要对机械、电 气、功能和规程四个方面及信号传输速率方面进行规定; 第 4 页 共 22 页 (2)数据链路层,完成管理数据的传输,提供差错检测和恢复,并且提供 流量控制,最终实现向上一层提供无差错、高可靠性的传输链路; (3)网络层,执行路由算法和流量控制算法,完成数据分组传输,它是通 信子网的最高层; (4)传输层,提供端到端的无差错传输,同时,它也提供属于局通信网络 接口,比如 socket; (5)会话层,完成用户之间会话的组织、协调、分配用户名等; (6)表示层,解决数据格式问题,规定编码方式; (7)应用层,osi 的最高层,利用应用进程提供网络访问手段。 2.1.22.1.2 tcp/iptcp/ip 体系结构体系结构 由于 tcp/ip 比其之前的 osi 模型更具体实现,随着互联网的不断发展,遵 循 tcp/ip 结构的网络不断普及,因此现在通常采用 tcp/ip 代表 internet 体系 结构。tcp/ip 的目的是在网络标准不同的情况下解决互联问题,可以说,网络 互联是 tcp/ip 的核心。tcp/ip 的体系结构如图 2 所示。 图 2 osi 参考模型与 tcp/ip 结构 图 1 osi 参考模型 第 5 页 共 22 页 tcp/ip 在设计时重点并没有放在具体通信的实现上,所以对最后两层没有 做出具体规定,同时表明它允许不同类型的通信网络参与通信。它的四个层次 功能如下。 (1)应用层,提供常用的应用程序及自定义的应用程序,数据传输时用 tcp/ip 协议来进行; (2)传输层,提供端到端的应用程序之间的通信,可以使用传输控制协议 tcp(transmission control protocol)或用户数据报协议 udp(user datagram protocol)协议,前者提供可靠传输,传送单位是报文段,后者提供 不可靠服务,传输单位是数据报,即分组。此外,传输层另外一个功能就是区 别应用程序; (3)网际层,负责计算机之间的通信,采用的协议是 ip 协议,数据传送 单位是分组,向上提供不可靠的传输服务; (4)网络接口层,负责接收数据报,并实现发送,或者接收帧,提取 ip 数据报,交给互联网层。 2.1.32.1.3 osiosi 模型与模型与 tcp/iptcp/ip 体系结构的区别体系结构的区别 从前面的分析可以看出 osi 模型和 tcp/ip 体系有许多不同之处,主要体现 在问题的处理上面,例如: (1)tcp/ip 一开始就考虑的是异构网络的互联问题,并将 ip 看作是整个 体系的重要组成部分,而 iso 并没有认识到网际协议 ip 的重要性,导致最后只 能单独划分一个子层来完成 ip 的作用; (2)osi 最开始只注意到了面向连接的服务,而 tcp/ip 一开始就注意了 面向连接和无连接的并重。相比起来,tcp/ip 更注重了数据传输的效率,而 osi 则注重了传输的可靠性; (4)tcp/ip 虽然分层,但是调用关系并不像 osi 那样严格,减少了不必 要的开销,提高了传输效率。 2.22.2 传输层的编程接口传输层的编程接口windowswindows 套接字编程技术套接字编程技术 2.2.12.2.1 windowswindows 套接字的概念套接字的概念 windows 套接字socket,是为windows 系统开发的一套标准通用支持网络 协议数据通信的 api,它是网络通信的基础,即 tcp/ip 的网络编程接口,1994 年被定为网络编程标准后,主要经历了 winsock1.1 和winsock2.0 两种版本,它 产生最终目的是可以适应应用程序开发者、网络服务商的需求,进程通过套接 字的通信域来完成通信。需要指出的是,套接字主要负责控制数据的输入与输 第 6 页 共 22 页 出,主要在传输层和网络层,屏蔽了数据链路层和物理层2。 2.2.22.2.2 套接字类型套接字类型 根据通信性质把套接字主要分为流式套接字和数据报套接字两种。它们的 区别在于流式套接字提供双向、有序、无重复的数据流服务,但相对于数据报 套接字来说系统开销较大。数据报套接字也支持双向数据流,但并不注重传输 可靠性、无重复性和有序性,但它保留了记录边界,由于数据报传输效率较高, 所以还是得到了比较广泛的应用。 2.2.32.2.3 涉及的几个基本概念涉及的几个基本概念 (1)字节顺序,不同的计算机采用不同的自己顺序存储数据,所以在这些 数据进行通信时需要进行字节顺序的转换,所有传送给网络上套接字函数的 ip 地址和端口号均按照网络顺序安排,主要由 sockaddr_in 这个结构规范。特别 要注意的是,应用程序建立地址结构之前,用户输入需要将主机序列转换为网 络序列(使用 htons 函数,反之使用 ntohs 函数) 。 (2)阻塞与非阻塞,套接字有同步阻塞和异步非阻塞两种方法,阻塞模式 时,套接字需要等待操作全部完成才结束,而当套接字处于非阻塞模式时,套 接字以是否有新数据到达作为阻塞的标志。阻塞方式套接字简单、方便,但是 效率比较低,而非阻塞模式使用复杂点,但效率很高。但是仍需强调一点, winsock 提供了几种 i/o 模型来解决异步问题,如“选择” 、 “重叠” 、 “事件选 择” 、 “异步选择”等3。 2.32.3 原始套接字原始套接字 从用户的角度来看,标准的流式套接字和数据报套接字这两类套接字似乎 涵盖了 tcp/ip 应用的全部,因为基于 tcp/ip 的应用,从协议栈的层次(如图 3 所示)上讲,在传输层的确只可能建立于 tcp 或 udp 协议之上,而流式套接 字和数据报套接字又分别对应于 tcp 和 udp,所以几乎所有的应用都可以用这 两类套接字实现。但是,当需要自定义数据包发送时或者需要分析所有经过网 络的数据包的时候,就必须面临一种不同于前两者的方式raw socket,即原 始套接字,程序员可以用它来发送和接收 ip 层以上的原始数据包, 如 icmp,tcp, udp 等,不仅这样,它还可以实现如伪装本地 ip、发送 icmp 包等 功能。 第 7 页 共 22 页 raw socket 广泛应用于高级网络编程,也是一种广泛的黑客手段。著名的 网络 sniffer、拒绝服务攻击(dos) 、ip 欺骗等都可以以 raw socket 实现。 raw socket 与标准套接字(sock_stream、sock_dgram)的区别在于前者直接 置“根“于操作系统网络核心(network core) ,而 sock_stream、sock_dgram 则 “悬浮”于 tcp 和 udp 协议的外围,如图 4 所示。 3 3 网络数据的采集技术分析网络数据的采集技术分析 3.13.1 windowswindows 下原始数据包捕获的实现下原始数据包捕获的实现 网络上的数据包捕获机制主要依赖于所使用的操作系统,不同的操作系统 下有不同的实现途径。在 windows 环境下,可通过网络驱动程序接口规范 (ndis) ,winsock 的 sock_raw 或虚拟设备驱动技术(vxd)等技术实现网络数 据包的捕获功能。 图 4 标准套接与原始套接字的关系 图 3 协议栈层次 第 8 页 共 22 页 前面已经介绍到了,使用原始套接字可以绕过 socket 提供的功能,对底层 的协议进行使用与开发,可以根据自己的需要生成想要的数据报文等,下面开 始介绍使用原始套接字对数据包捕获进行开发的相关技术知识。 第一,使用套接字前,需要了解网卡接收数据的工作原理: 在正常情况下,网络接口只响应两种数据帧,一种是与自己的硬件相匹配 的数据帧,另一种四向所有计算机广播的数据帧。在系统中,数据帧的收发由 网卡完成,网卡程序接收从网络发来的数据包,根据其硬件地址去判断是否与 本机的硬件地址匹配,若匹配就通知 cpu 产生中断进行响应,然后调用驱动程 序设置的网卡中断程序地址调用驱动程序接收数据,然后放入堆栈进行系统相 关处理,若不匹配则直接丢弃该数据包3。 对于网络接口,它一般具有 4 种数据接收模式:广播、组播、直接和混杂 模式,只有当把接口设置为混杂模式时,网络接口才能接收所有的数据,无论 地址是否匹配,所以在做本设计的时候一定要设置为混杂模式才能实现数据的 采集。 第二,需要了解套接字的工作程序和使用方法: 一般来说,采用套接字开发网络程序需要经历以下几个基本步骤: 启动、创建、绑定、监听(接受连接) 、连接、发送/接收数据、关闭、卸 载等。 第三,具体到 windows 下利用原始套接字捕获网络数据可以这样设计: (1)启动套接字; (2)创建一个原始套接字; (3)将套接字与本地地址绑定; (4)设置操作参数; (5)设置网络接口为混杂模式; (6)启动监听线程,开始接收数据; (7)退出关闭套接字。 3.23.2 原始数据包捕获的关键函数原始数据包捕获的关键函数 (1)启动函数 wsastartup int pascal far wsastartup (dword wversionrequested , lpwsadata lpwsadata); 每一个套接字应用程序都必须调用该函数进行一系列初始化工作,并且只 有调用成功返回后,才能开始使用套接字,其中参数 wversionrequested 是版 本号,高字节是次版本号、低字节是主版本号,参数 lpwsadata 是指向 wsadata 结构的指针。 第 9 页 共 22 页 (2)套接字创建函数 socket socket socket (int af , int type , int protocol); 所有的通信在建立之前都必须创建一个套接字,socket 函数的功能就是创 建套接字,其中参数 af 指协议地址族(address family) ,当建立的套接字是 依赖于 udp 或 tcp 的话,需要设置 af 为 af_inet,表示采用 ip 协议。参数 type 是指协议的套接字类型,采用流式套接字时用 sock_stream,采用数据报套接 字时用 sock_dgram,采用原始套接字时用 sock_raw。参数 protocol 是协议字 段,默认情况下可直接设置为 0。 (3)绑定函数 bind int bind ( socket s , struct sockaddr_in* name , int namelen); 成功创建套接字后的下一步工作就是将本地网络接口与套接字进行绑定, 其中参数 s 是创建的套接字,参数 name 是需要绑定的通信对象的信息结构体指 针,namelen 是该结构的长度。需要注意的是 sockaddr_in 结构: struct sockaddr_in short sin_family; /地址族,设置为 af_inet unsigned short sin_port; /指定的端口号 struct in_addr sin_addr; /ip 地址 char sin_zero8; ; 由于主机序列与网络序列的关系,在程序中需要使用 htons 等函数进行转 换工作。 (4)设置接口模式函数 wsaioctl int wsaapi wsaioctl(socket s, dword dwiocontrolcode, lpvoid lpvinbuffer, dword cbinbuffer, lpvoid lpvoutbuffer, dword cboutbuffer, lpdword lpcbbytesreturned, lpwsaoverlapped lpoverlapped, lpwsaoverlapped_completion_routine lpcompletionroutine); 其中,s 为一个套接口的句柄,dwiocontrolcode 为操作控制代码, lpvinbuffer 为输入缓冲区的地址,cbinbuffer 为输入缓冲区的大小, lpvoutbuffer 为输出缓冲区的地址, cboutbuffer 为输出缓冲区的大小,lpcbbytesreturned 为输出实际字节数 的地址,lpoverlapped 为 wsaoverlapped 结构的地址,lpcompletionroutine 第 10 页 共 22 页 为一个指向操作结束后调用的例程指针。 调用成功后,wsaioctl 函数返回 0,否则的话,将返回 invalid_socket 错误,应用程序可通过 wsagetlasterror 来获取错误代码。 (5)数据接收函数 recv int recv (socket s , char* buf ,int len , int flags); 4 4 网络流量监控系统各模块的设计与实现网络流量监控系统各模块的设计与实现 4.14.1 开发背景介绍开发背景介绍 本设计开发平台采用 microsoft visualstudio6.0,它是目前使用比较广 泛的 winsock 开发平台,因此具有较强的适应性,能够在很多的操作系统平台 上运行,设计后具有直观的简洁的操作界面,稳定性也比较高。 4.24.2 总体结构设计总体结构设计 通过收集与分析简单网络流量监控软件的用户需求,总结出以下特征: (1)需要实现对网络接口数据包的尽可能多的捕获,将网卡设置为混杂模 式,然后进行数据包的采集; (2)数据包的内容要进行一定的解析,对数据包的协议类型、源目地址、 数据包截获时间、数据包内容需要进行分析; (3)根据用户不同的要求能够依照特定地址范围、特定协议类型相关包等 条件进行自定义监视; (4)监视结果输出有实时流量图、列表等显示; (5)实现日志记录,便于日后分析; (6)对某些常见的攻击进行发现分析。 总合以上系统要求与综合分析,本系统总体设计如下,采用 vc+6.0 编写, 系统具有三个主要功能部分:数据捕获与显示模块、流量信息统计模块、流量 绘制模块,如图 5 所示。 数据采集模块:完成网络接口数据的捕获、解析和显示,可以根据用户定 义条件组合来进行捕获,如只监视采用 tcp 或 udp 协议的数据包,也可以监视 图 5 系统总体设计结构图 流量监控分析系统 数据采集模块信息统计模块流量绘制模块 第 11 页 共 22 页 用户希望关注的相关 ip 地址的数据包,同时完成数据封包日志记录,提高了系 统的灵活性。同时,在对数据包的解析过程中对一些常见入侵攻击特征进行判 断,发出预警。该模块采用编写原始套接字开发。 信息统计模块:完成统计功能,如统计 ip 要实现统计接收到的数据报数量、 接收到的数据中协议出错的数量、正在请求传输的数量、路由表中可用路由数 量、丢弃的数量、需要重组/成功重组的数量等,统计 icmp 需要完成发送/接收 的消息数量、满足超过 ttl 的数量、重定向数量、时间戳请求/应答数量等;采 用 ip 助手函数完成。 流量绘制模块:完成总流量、输入流量、输出流量、瞬时流量值、最高流 量值的显示;采用访问注册表网络性能数据完成有关数据的获取,通过流量图 显示。 4.34.3 流程图设计流程图设计 根据上面对各个功能模块的划分,进行更进一步的分析和设计,得到数据 采集、注册表网络性能块访问大致的工作流程图,如图 6 与图 7 所示。 图 6 数据捕获处理流程 第 12 页 共 22 页 4.44.4 各模块功能概述与实现各模块功能概述与实现 4.4.14.4.1 数据包采集中各类的关系数据包采集中各类的关系 4.4.24.4.2 数据包捕获与分析模块数据包捕获与分析模块 4.4.34.4.3 流量获取模块流量获取模块 (1)设计说明 设计思路:实际编程时,windows 系统内提供了一个系统性能的接口,只 需要访问这个接口就可以得到网络性能相关的数据,如流量;根据这个想法, 设计出了本功能模块的子功能模块如下: 访问性能数据子模块:负责对注册表进行访问,获取流量数据; 显示子模块:负责将数据绘制在窗口中; 框架子模块:负责消息映射和消息处理; 本模块中,将使用到一个注册表访问函数 regqueryvalueex,它根据开放 的注册表键值与名字查找相关的类型和数据。它的函数原型如下: long regqueryvalueex(hkey hkey , lpctstr lpvaluename , lpdword lpreserved , lpdword lptype , lpbyte lpdata , lpdword lpcbdata); 参数说明: hkey 为预定的注册表系统键值; lpvaluename 为需要查询的目标键值的名字; lpreserved 保留,但是必须为 null; lptype 为键值类型; lpdata 输入/输出接收键值的数据; lpcbdata 输入/输出接收键值的缓冲大小标志。 在 windowsnt 下,当调用 regqueryvalueex 时,若 hkey 被设置为 hkey_performance_data 返回的数据并不是直接显示被请求的数据对象。所以 程序需要遍历整个数据块,数据块中的逻辑结构如图 11 所示。 图 7 网络性能数据块访问流程 第 13 页 共 22 页 参照图 4-6 可以很容易地确定性能数据块的查询过程,从数据块的性能数 据结构 perf_data_block 开始,然后索引到 perf_object_type 结构,而 perf_counter_definition 结构可以通过 perf_object_type 的成员 headerbytelength 找到位置偏移,每一个 perf_object_type 的成员 definitionlength 都能确定一个对应的 perf_instance_definition 结构, perf_instance_definition 结构决定着 perf_counter_block 结构3。 下面列出了获得网络接口流量的部分关键代码: /得到当前的接口名字 interfacename = interfaces.getat(pos); /开辟性能数据缓冲 unsigned char *data = new unsigned char default_buffer_size; /从 regqueryvalueex 返回的值:本例中忽略改变量 /从网络对象(索引是 510)查询性能数据 regqueryvalueex(hkey_performance_data, “510“, null, 下面详细说明,注册表数据性能块访问过程的实现: /枚举链表中第一个对象 perf_object_type *objectptr = firstobject(datablockptr); /遍历链表 for(int a=0 ; anumobjecttypes ; a+) char namebuffer255; /判断是否是网络对象索引号是 510 if(objectptr-objectnametitleindex = 510) /偏移变量 dword processidoffset = ulong_max; 图 11 注册表网络性能数据块逻辑结构 第 14 页 共 22 页 /找到第一个计数器 perf_counter_definition *counterptr = firstcounter(objectptr); /遍历链表 for(int b=0 ; bnumcounters ; b+) /判断接收的数据类型是否是我们需要的 if(int)counterptr-counternametitleindex = currenttraffictype) processidoffset = counterptr-counteroffset; /下一个计数器 counterptr = nextcounter(counterptr); /数据类型不是我们需要的 if(processidoffset = ulong_max) delete data; return 1; /找到第一个实例(instance) perf_instance_definition *instanceptr = firstinstance(objectptr); /遍历整个实例 for(b=0 ; bnuminstances ; b+) wchar_t *nameptr = (wchar_t *) (byte *)instanceptr + instanceptr-nameoffset); /得到这个实例的 perf_counter_block perf_counter_block *counterblockptr = getcounterblock(instanceptr); /现在得到了接口的名字 char *pname = widetomulti(nameptr, namebuffer, sizeof(namebuffer); position pos = totaltraffics.findindex(b); if(pos!=null) fulltraffic = *(dword *) (byte *)counterblockptr + processidoffset); totaltraffics.setat(pos,fulltraffic); /如果当前的接口就是我们选择的接口 if(interfacename = iname) 第 15 页 共 22 页 traffic = *(dword *) (byte *)counterblockptr + processidoffset); /判断处理的接口是否是新的 if(currentinterface != interfacenumber) lasttraffic = acttraffic; trafficdelta = 0.0; currentinterface = interfacenumber; else trafficdelta = acttraffic - lasttraffic; lasttraffic = acttraffic; delete data; return(trafficdelta); /下一个实例 instanceptr = nextinstance(instanceptr); /下一个对象 objectptr = nextobject(objectptr); delete data; return 0; catch(.) return 0; (2)界面设计(见图 12) 第 16 页 共 22 页 4.4.44.4.4 数据统计模块数据统计模块 (1)可以利用微软的 ip 助手中的 api 函数实现 ip 的统计,网络管理员通 过统计的数据可以在一定程度上发现网络性能瓶颈。涉及到的函数有 getudpstatistic,gettcpstatistic,geticmpstatistic,getistatistic,需要 注意的是工程中要加载 iphelpapi.lib 库。函数调用结果通过列表可以直观显 示出来,网络管理人员可以通过其中统计数量的变化监视网络性能。 (2)界面设计(见图 13) 图 12 流量监视模块界面 第 17 页 共 22 页 4.4.54.4.5 常见攻击分析功能常见攻击分析功能 本设计中对部分常见的攻击行为进行了分析,在类 csockhelper 中包解析 过程中加入了常见攻击行为数据包的判断和报警,比如 land、ping of death 等攻击,部分实现代码如下: if(pipheader-sourceip=pipheader-destip) pd=1; else if(pipheader-total_len65535) pd=2; switch(pd) case 1:afxmessagebox(“数据包源目的地址相同,疑是 land 攻击“); sprint

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论