网络流量监控及分析工具的设计与实现教学提纲.doc
《网络流量监控及分析工具的设计与实现教学提纲.doc》由会员分享,可在线阅读,更多相关《网络流量监控及分析工具的设计与实现教学提纲.doc(25页珍藏版)》请在咨信网上搜索。
精品文档 十几年的学校教育让我们大学生掌握了足够的科学文化知识,深韵的文化底子为我们创业奠定了一定的基础。特别是在大学期间,我们学到的不单单是书本知识,假期的打工经验也帮了大忙。 为了解目前大学生对DIY手工艺品制作的消费情况,我们于己于人2004年3月22日下午利用下课时间在校园内进行了一次快速抽样调查。据调查本次调查人数共50人,并收回有效问卷50份。调查分析如下: §8-2购物环境与消费行为 2004年3月20日 300元以下□ 300~400元□ 400~500□ 500元以上□ 调研结论:综上分析,我们认为在学院内开发“DIY手工艺品”商店这一创业项目是完全可行的。 (二)创业弱势分析 “碧芝”的成功归于他的唯一,这独一无二的物品就吸引了各种女性的眼光。 四、影响的宏观环境分析 还有一点就是beadwork公司在“碧芝自制饰品店”内设立了一个完全的弹性价格空间:选择饰珠的种类和多少是由顾客自己掌握,所以消费者可以根据自己的消费能力进行取舍;此外由于是顾客自己制作,所以从原料到成品的附加值就可以自己享用。 十字绣□ 编制类□ 银饰制品类□ 串珠首饰类□ 网络流量监控及分析工具的设计与实现 摘 要 互联网迅速发展的同时,网络安全问题日益成为人们关注的焦点,病毒、恶意攻击、非法访问等都容易影响网络的正常运行,多种网络防御技术被综合应用到网络安全管理体系中,流量监控系统便是其中一种分析网络状况的有效方法,它从数据包流量分析角度,通过实时地收集和监视网络数据包信息,来检查是否有违反安全策略的行为和网络工作异常的迹象。 在研究网络数据包捕获、 TCP/IP原理的基础上,采用面向对象的方法进行了需求分析与功能设计。该系统在VisualC++6.0环境下进行开发,综合采用了Socket-Raw、注册表编程和IP助手API等VC编程技术,在系统需求分析的基础上,对主要功能的实现方案和技术细节进行了详细分析与设计,并通过测试,最终实现了数据包捕获、流量监视与统计主要功能,达到了预定要求,为网络管理员了解网络运行状态提供了参考。 关键词:网络管理;数据采集;流量统计;Winsock2 精品文档 目 录 论文总页数:22页 1 引言 1 1.1 课题背景 1 1.2 网络安全管理的现状与需求 1 1.3 网络流量监控的引入 1 1.4 本文的目的与任务 2 1.5 论文结构安排 2 2 相关的概念与技术 2 2.1 OSI参考模型与TCP/IP体系结构 2 2.1.1 OSI参考模型 2 2.1.2 TCP/IP体系结构 3 2.1.3 OSI模型与TCP/IP体系结构的区别 4 2.2 传输层的编程接口—Windows套接字编程技术 4 2.2.1 Windows套接字的概念 4 2.2.2 套接字类型 5 2.2.3 涉及的几个基本概念 5 2.3 原始套接字 5 3 网络数据的采集技术分析 6 3.1 Windows下原始数据包捕获的实现 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 致 谢 21 声 明 22 1 引言 1.1 课题背景 随着构建网络基础技术和网络应用的迅速发展以及用户对网络性能要求的提高,使得网络管理成为迫切需要解决的问题,有效的网络管理能够保证网络的稳定运行和持续发展,更重要的是,随着网络规模的扩大和黑客技术的发展,入侵和攻击的案例日益增多,对稳定的网络服务、信息安全、互联网秩序都提出了严峻的挑战,网络安全管理在整个网络管理系统里扮演起更为重要的角色。 1.2 网络安全管理的现状与需求 目前,在网络应用不断深入和技术频繁升级的同时,非法访问、恶意攻击等安全威胁也在不断推陈出新,愈演愈烈。防火墙、VPN、IDS、防病毒、身份认证、数据加密、安全审计等安全防护和管理系统在网络中得到了广泛应用。从网络安全专业管理人员的角度来说,最直接的需求就是根据分类在统一的界面中监视网络中各种运行性能状态,获取相关数据信息、日志信息和报警信息等,并进行分类汇总、分析和审计;同时完成攻击事件报警、响应等功能。因此,用户的网络管理需要不断健全整体网络安全管理解决方案,从统一安全管理平台总体调控配置到多层面、分布式的安全系统,实现对各种网络安全资源的集中监控、策略管理、审计及多种安全功能模块之间的互动,从而有效简化网络安全管理工作,提升网络的安全水平和可用性、可控制性、可管理性。 1.3 网络流量监控的引入 网络安全管理体系中,流量监控和统计分析是整个管理的基础。 流量检测主要目的是通过对网络数据进行实时连续的采集监测网络流量,对获得的流量数据进行统计计算,从而得到网络主要成分的性能指标。网络管理员根据流量数据就可以对网络主要成分进行性能分析管理,发现性能变化趋势,并分析出影响网络性能的因素及问题所在。此外,在网络流量异常的情况下,通过扩展的流量检测报警系统还可以向管理人员报警,及时发现故障加以处理。在网络流量检测的基础上,管理员还可对感兴趣的网络管理对象设置审查值范围及配置网络性能对象,监控实时轮询网络获取定义对象的当前值,若超出审查值的正常预定值则报警,协助管理员发现网络瓶颈,这样就能实现一定程度上的故障管理。而网络流量检测本身也涉及到安全管理方面的内容。 由此可见,对于一个有效的网络安全管理系统来说,功能的实现都或多或少的依赖于流量信息的获取。因此网络流量信息的采集可以说是网络安全管理系统得以实现的核心基石。它的应用可以在一定程度上检测到入侵攻击,可以有效地帮助管理人员进行网络性能管理,并利用报警机制协助网管人员采取对应的安全策略与防护措施,从而减少入侵攻击所造成的损失。 1.4 本文的目的与任务 该网络流量监控及分析工具主要用途是通过实时连续地采集网络数据并对其进行统计,得到主要成分性能指标,结合网络流量的理论,通过统计出的性能指数观察网络状态,分析出网络变化趋势,找出影响网络性能的因素。 本设计题目是教师自拟项目,前期任务主要是设计并完成系统的初步框架,实现网络数据的捕获,并解决相应问题,后期主要是通过一些API函数完成对各类数据信息的统计。 本系统实现以下功能: (1)采用Winsock编写原始套接字Socket-Raw对数据包进行采集捕获,并可实现分类及自定义范围进行捕获; (2)对捕获的数据包进行一定的解析; (3)访问操作系统提供的网络性能参数接口,得到网卡总流量、输入流量和输出流量; (4)系统提供了多种方式显示结果,如曲线图、列表等; (5)使用IP帮助API获取网络统计信息; (6)实现对部分常见威胁的预警,可继续开发扩展其报警功能。 1.5 论文结构安排 本论文围绕Winsock标准套接字网络编程的各项实践内容展开。具体内容安排如下:第一章是引言,简要介绍开发背景、设计任务和论文结构安排;第二章介绍网络基础理论研究、数据包捕获与流量检测的技术原理;第三章介绍如何使用原始套接字实现数据捕获;第四章重点介绍网络流量监测工具的设计与实现过程,并且详细阐述了从系统功能总体设计、详细设计、具体实现的全部过程;第五章介绍了软件测试情况。 2 相关的概念与技术 2.1 OSI参考模型与TCP/IP体系结构 2.1.1 OSI参考模型 开放系统互联参考模型OSI是由国际标准化组织ISO制定的标准化开放式的计算机网络层次结构模型,其结构如图1所示。 可以看出,该结构共有七层,各层主要实现如下功能: (1)物理层,利用传输介质实现相邻节点间的物理连接,主要对机械、电气、功能和规程四个方面及信号传输速率方面进行规定; (2)数据链路层,完成管理数据的传输,提供差错检测和恢复,并且提供流量控制,最终实现向上一层提供无差错、高可靠性的传输链路; (3)网络层,执行路由算法和流量控制算法,完成数据分组传输,它是通信子网的最高层; (4)传输层,提供端到端的无差错传输,同时,它也提供属于局通信网络接口,比如SOCKET; (5)会话层,完成用户之间会话的组织、协调、分配用户名等; (6)表示层,解决数据格式问题,规定编码方式; (7)应用层,OSI的最高层,利用应用进程提供网络访问手段。 图1 OSI参考模型 2.1.2 TCP/IP体系结构 由于TCP/IP比其之前的OSI模型更具体实现,随着互联网的不断发展,遵循TCP/IP结构的网络不断普及,因此现在通常采用TCP/IP代表Internet体系结构。TCP/IP的目的是在网络标准不同的情况下解决互联问题,可以说,网络互联是TCP/IP的核心。TCP/IP的体系结构如图2所示。 图2 OSI参考模型与TCP/IP结构 TCP/IP在设计时重点并没有放在具体通信的实现上,所以对最后两层没有做出具体规定,同时表明它允许不同类型的通信网络参与通信。它的四个层次功能如下。 (1)应用层,提供常用的应用程序及自定义的应用程序,数据传输时用TCP/IP协议来进行; (2)传输层,提供端到端的应用程序之间的通信,可以使用传输控制协议TCP(Transmission Control Protocol)或用户数据报协议UDP(User Datagram Protocol)协议,前者提供可靠传输,传送单位是报文段,后者提供不可靠服务,传输单位是数据报,即分组。此外,传输层另外一个功能就是区别应用程序; (3)网际层,负责计算机之间的通信,采用的协议是IP协议,数据传送单位是分组,向上提供不可靠的传输服务; (4)网络接口层,负责接收数据报,并实现发送,或者接收帧,提取IP数据报,交给互联网层。 2.1.3 OSI模型与TCP/IP体系结构的区别 从前面的分析可以看出OSI模型和TCP/IP体系有许多不同之处,主要体现在问题的处理上面,例如: (1)TCP/IP一开始就考虑的是异构网络的互联问题,并将IP看作是整个体系的重要组成部分,而ISO并没有认识到网际协议IP的重要性,导致最后只能单独划分一个子层来完成IP的作用; (2)OSI最开始只注意到了面向连接的服务,而TCP/IP一开始就注意了面向连接和无连接的并重。相比起来,TCP/IP更注重了数据传输的效率,而OSI则注重了传输的可靠性; (4)TCP/IP虽然分层,但是调用关系并不像OSI那样严格,减少了不必要的开销,提高了传输效率。 2.2 传输层的编程接口—Windows套接字编程技术 2.2.1 Windows套接字的概念 Windows套接字—SOCKET,是为Windows系统开发的一套标准通用支持网络协议数据通信的API,它是网络通信的基础,即TCP/IP的网络编程接口,1994年被定为网络编程标准后,主要经历了Winsock1.1和Winsock2.0两种版本,它产生最终目的是可以适应应用程序开发者、网络服务商的需求,进程通过套接字的通信域来完成通信。需要指出的是,套接字主要负责控制数据的输入与输出,主要在传输层和网络层,屏蔽了数据链路层和物理层[2]。 2.2.2 套接字类型 根据通信性质把套接字主要分为流式套接字和数据报套接字两种。它们的区别在于流式套接字提供双向、有序、无重复的数据流服务,但相对于数据报套接字来说系统开销较大。数据报套接字也支持双向数据流,但并不注重传输可靠性、无重复性和有序性,但它保留了记录边界,由于数据报传输效率较高,所以还是得到了比较广泛的应用。 2.2.3 涉及的几个基本概念 (1)字节顺序,不同的计算机采用不同的自己顺序存储数据,所以在这些数据进行通信时需要进行字节顺序的转换,所有传送给网络上套接字函数的IP地址和端口号均按照网络顺序安排,主要由sockaddr_in这个结构规范。特别要注意的是,应用程序建立地址结构之前,用户输入需要将主机序列转换为网络序列(使用htons函数,反之使用ntohs函数)。 (2)阻塞与非阻塞,套接字有同步阻塞和异步非阻塞两种方法,阻塞模式时,套接字需要等待操作全部完成才结束,而当套接字处于非阻塞模式时,套接字以是否有新数据到达作为阻塞的标志。阻塞方式套接字简单、方便,但是效率比较低,而非阻塞模式使用复杂点,但效率很高。但是仍需强调一点,Winsock提供了几种I/O模型来解决异步问题,如“选择”、“重叠”、“事件选择”、“异步选择”等[3]。 2.3 原始套接字 从用户的角度来看,标准的流式套接字和数据报套接字这两类套接字似乎涵盖了TCP/IP应用的全部,因为基于TCP/IP的应用,从协议栈的层次(如图3所示)上讲,在传输层的确只可能建立于TCP或UDP协议之上,而流式套接字和数据报套接字又分别对应于TCP和UDP,所以几乎所有的应用都可以用这两类套接字实现。但是,当需要自定义数据包发送时或者需要分析所有经过网络的数据包的时候,就必须面临一种不同于前两者的方式—Raw Socket,即原始套接字,程序员可以用它来发送和接收 IP 层以上的原始数据包, 如 ICMP,TCP, UDP等,不仅这样,它还可以实现如伪装本地IP、发送ICMP包等功能。 图 3 协议栈层次 Raw Socket广泛应用于高级网络编程,也是一种广泛的黑客手段。著名的网络sniffer、拒绝服务攻击(DOS)、IP欺骗等都可以以Raw Socket实现。Raw Socket与标准套接字(SOCK_STREAM、SOCK_DGRAM)的区别在于前者直接置"根"于操作系统网络核心(Network Core),而SOCK_STREAM、SOCK_DGRAM则“悬浮”于TCP和UDP协议的外围,如图4所示。 图 4 标准套接与原始套接字的关系 3 网络数据的采集技术分析 3.1 Windows下原始数据包捕获的实现 网络上的数据包捕获机制主要依赖于所使用的操作系统,不同的操作系统下有不同的实现途径。在Windows环境下,可通过网络驱动程序接口规范(NDIS),WinSock的SOCK_RAW或虚拟设备驱动技术(VxD)等技术实现网络数据包的捕获功能。 前面已经介绍到了,使用原始套接字可以绕过Socket提供的功能,对底层的协议进行使用与开发,可以根据自己的需要生成想要的数据报文等,下面开始介绍使用原始套接字对数据包捕获进行开发的相关技术知识。 第一,使用套接字前,需要了解网卡接收数据的工作原理: 在正常情况下,网络接口只响应两种数据帧,一种是与自己的硬件相匹配的数据帧,另一种四向所有计算机广播的数据帧。在系统中,数据帧的收发由网卡完成,网卡程序接收从网络发来的数据包,根据其硬件地址去判断是否与本机的硬件地址匹配,若匹配就通知CPU产生中断进行响应,然后调用驱动程序设置的网卡中断程序地址调用驱动程序接收数据,然后放入堆栈进行系统相关处理,若不匹配则直接丢弃该数据包[3]。 对于网络接口,它一般具有4种数据接收模式:广播、组播、直接和混杂模式,只有当把接口设置为混杂模式时,网络接口才能接收所有的数据,无论地址是否匹配,所以在做本设计的时候一定要设置为混杂模式才能实现数据的采集。 第二,需要了解套接字的工作程序和使用方法: 一般来说,采用套接字开发网络程序需要经历以下几个基本步骤: 启动、创建、绑定、监听(接受连接)、连接、发送/接收数据、关闭、卸载等。 第三,具体到Windows下利用原始套接字捕获网络数据可以这样设计: (1)启动套接字; (2)创建一个原始套接字; (3)将套接字与本地地址绑定; (4)设置操作参数; (5)设置网络接口为混杂模式; (6)启动监听线程,开始接收数据; (7)退出关闭套接字。 3.2 原始数据包捕获的关键函数 (1)启动函数WSAStartup int PASCAL FAR WSAStartup (DWORD wVersionRequested , LPWSADATA lpWSAData); 每一个套接字应用程序都必须调用该函数进行一系列初始化工作,并且只有调用成功返回后,才能开始使用套接字,其中参数wVersionRequested是版本号,高字节是次版本号、低字节是主版本号,参数lpWSAData是指向WSADATA结构的指针。 (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_zero[8]; }; 由于主机序列与网络序列的关系,在程序中需要使用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为一个指向操作结束后调用的例程指针。 调用成功后,WSAIoctl 函数返回0,否则的话,将返回INVALID_SOCKET错误,应用程序可通过WSAGetLastError来获取错误代码。 (5)数据接收函数recv int recv (SOCKET s , char* buf ,int len , int flags); 4 网络流量监控系统各模块的设计与实现 4.1 开发背景介绍 本设计开发平台采用Microsoft Visualstudio6.0,它是目前使用比较广泛的Winsock开发平台,因此具有较强的适应性,能够在很多的操作系统平台上运行,设计后具有直观的简洁的操作界面,稳定性也比较高。 4.2 总体结构设计 通过收集与分析简单网络流量监控软件的用户需求,总结出以下特征: (1)需要实现对网络接口数据包的尽可能多的捕获,将网卡设置为混杂模式,然后进行数据包的采集; (2)数据包的内容要进行一定的解析,对数据包的协议类型、源目地址、数据包截获时间、数据包内容需要进行分析; (3)根据用户不同的要求能够依照特定地址范围、特定协议类型相关包等条件进行自定义监视; (4)监视结果输出有实时流量图、列表等显示; (5)实现日志记录,便于日后分析; (6)对某些常见的攻击进行发现分析。 总合以上系统要求与综合分析,本系统总体设计如下,采用VC++6.0编写,系统具有三个主要功能部分:数据捕获与显示模块、流量信息统计模块、流量绘制模块,如图5所示。 流量监控分析系统 数据采集模块 信息统计模块 流量绘制模块 图 5 系统总体设计结构图 数据采集模块:完成网络接口数据的捕获、解析和显示,可以根据用户定义条件组合来进行捕获,如只监视采用TCP或UDP协议的数据包,也可以监视用户希望关注的相关IP地址的数据包,同时完成数据封包日志记录,提高了系统的灵活性。同时,在对数据包的解析过程中对一些常见入侵攻击特征进行判断,发出预警。该模块采用编写原始套接字开发。 信息统计模块:完成统计功能,如统计IP要实现统计接收到的数据报数量、接收到的数据中协议出错的数量、正在请求传输的数量、路由表中可用路由数量、丢弃的数量、需要重组/成功重组的数量等,统计ICMP需要完成发送/接收的消息数量、满足超过TTL的数量、重定向数量、时间戳请求/应答数量等;采用IP助手函数完成。 流量绘制模块:完成总流量、输入流量、输出流量、瞬时流量值、最高流量值的显示;采用访问注册表网络性能数据完成有关数据的获取,通过流量图显示。 4.3 流程图设计 根据上面对各个功能模块的划分,进行更进一步的分析和设计,得到数据采集、注册表网络性能块访问大致的工作流程图,如图6与图7所示。 图 6 数据捕获处理流程 图 7 网络性能数据块访问流程 4.4 各模块功能概述与实现 4.4.1 数据包采集中各类的关系 经过上面的分析与设计,得到该系统的总体功能结构、工作流程,也确定了从编写套接字到最后捕获数据,要经过创建、绑定、设置工作模式、启动线程、接收数据等一系列的处理操作。为了实现处理中的每一步操作,设计了数据捕获的类关系,如图8所示。 图 8 数据包采集中各类的关系 在上图中CSockSupport,CSockHelper ,CPackInterDlg,CBinDataDlg等是封装了各部分主要处理功能的类。且这些类中封装了和这些类的操作相关的方法。将在后面对这些类的功能和实现进行详细介绍。 4.4.2 数据包捕获与分析模块 (1)功能实现说明 该功能模块主要由封装的CSockSupport,CsockHelper ,CpackInterDlg,CbinDataDlg四个类完成,下面将对这些类进行详细说明。 CsockSupport类:主要负责检查Socket是否支持2.0版本,在该类中封装了WSAStartup完成Socket的启动; CsockHelper类:主要实现了从获取本机信息结构、Socket创建、绑定、设置、启动线程、数据接收到协议分析的全部方法,详细处理流程见图9所示。 图 9 CSockHelper类处理流程 GetLocalIP实现获取本机地址操作的方法,LPHOSTENT lphp是定义一个主机信息结构,获取过程由gethostname(szLocname,MAX_HOSTNAME_LAN)与gethostbyname(szLocname)完成;第一个参数是用于放置本机名称的缓冲,第二个参数是缓冲区长度,最后利用inet_ntoa将IP地址转化为“.”式地址。 StartCapture方法完成套接字的创建、绑定、设置操作方式和启动线程;具体完成如下: m_sockCap = socket(AF_INET , SOCK_RAW , IPPROTO_IP);//创建套接字 bind(m_sockCap, (PSOCKADDR)&sa, sizeof(sa));//绑定 setsockopt(m_sockCap, SOL_SOCKET, SO_REUSEADDR, (char*)&bopt, sizeof(bopt)) ;//设置操作 setsockopt(m_sockCap, IPPROTO_IP, IP_HDRINCL, (char*)&bopt, sizeof(bopt)) ;//设置操作 WSAIoctl(m_sockCap,SIO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL);//混杂模式 m_hCapThread = CreateThread(NULL, 0, CaptureThread, this, 0, NULL);//启动线程 线程函数CaptureThread主要完成数据的接收。数据接收后,将缓冲区数据转化为IP数据格式后即可以开始解析过程,协议名称获取如下: for(int i=0; i<MAX_PROTO_NUM; i++) if(ProtoMap[i].ProtoNum==iProtocol) return ProtoMap[i].ProtoText; return “”; ParseIPPack方法完成数据包的解析: int iIphLen = sizeof(unsigned long) * (pIpheader->h_lenver & 0xf) //获取数据包长度 协议解析: switch(iProtocol) { case IPPROTO_TCP : …… case IPPROTO_UDP : …… case IPPROTO_ICMP : …… default :…… } StopCapture完成关闭线程和套接字操作: if(m_hCapThread) {TerminateThread(m_hCapThread, 0); //中断进程 CloseHandle(m_hCapThread); //关闭句柄 m_hCapThread = NULL;} if(m_sockCap) closesocket(m_sockCap); //关闭套接字 CbinDataDlg类主要完成对已捕获数据的存储和显示方法;CpackInterDlg类通过建立CbinDataDlg类和CsockHelper类对象实现数据捕获、解析、显示、存储等,同时它完成对捕获条件设置控件、日志记录控件的编写,在这里就不做详细介绍了。 (2)界面设计(见图10) 图 10 数据捕获模块界面 4.4.3 流量获取模块 (1)设计说明 设计思路:实际编程时,Windows系统内提供了一个系统性能的接口,只需要访问这个接口就可以得到网络性能相关的数据,如流量;根据这个想法,设计出了本功能模块的子功能模块如下: l 访问性能数据子模块:负责对注册表进行访问,获取流量数据; l 显示子模块:负责将数据绘制在窗口中; l 框架子模块:负责消息映射和消息处理; 本模块中,将使用到一个注册表访问函数RegQueryValueEx,它根据开放的注册表键值与名字查找相关的类型和数据。它的函数原型如下: LONG RegQueryValueEx(HKEY hKey , LPCTSTR lpValueName , LPDWORD lpReserved , LPDWORD lpType , LPBYTE lpData , LPDWORD lpcbData); 参数说明: l hKey为预定的注册表系统键值; l lpValueName为需要查询的目标键值的名字; l lpReserved保留,但是必须为NULL; l lpType为键值类型; l lpData输入/输出接收键值的数据; l lpcbData输入/输出接收键值的缓冲大小标志。 在WindowsNT下,当调用RegQueryValueEx时,若hKey被设置为HKEY_PERFORMANCE_DATA返回的数据并不是直接显示被请求的数据对象。所以程序需要遍历整个数据块,数据块中的逻辑结构如图11所示。 图 11 注册表网络性能数据块逻辑结构 参照图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, &type, data, &size) PERF_DATA_BLOCK *dataBlockPtr = (PERF_DATA_BLOCK *)data; 下面详细说明,注册表数据性能块访问过程的实现: //枚举链表中第一个对象 PERF_OBJECT_TYPE *objectPtr = FirstObject(dataBlockPtr); //遍历链表 for(int a=0 ; a<(int)dataBlockPtr->NumObjectTypes ; a++) { char nameBuffer[255]; //判断是否是网络对象索引号是510 if(objectPtr->ObjectNameTitleIndex == 510) { //偏移变量 DWORD processIdOffset = ULONG_MAX; //找到第一个计数器 PERF_COUNTER_DEFINITION *counterPtr = FirstCounter(objectPtr); //遍历链表 for(int b=0 ; b<(int)objectPtr->NumCounters ; 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 ; b<objectPtr->NumInstances ; 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) {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; } }- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络流量 监控 分析 工具 设计 实现 教学 提纲
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文