当前位置:文档之家› 网络流量监控及分析工具的设计与实现

网络流量监控及分析工具的设计与实现

目录1引言 01、1课题背景 01、2网络流量监控的引入 01、3课程设计的目的与任务 (1)2相关的概念与技术 (2)2、1TCP/IP体系结构 (2)2、2原始套接字 (2)3网络数据的采集技术分析 (3)3、1Windows下原始数据包捕获的实现 (3)3、2原始数据包捕获的关键函数 (4)4网络流量监控系统各模块的设计与实现 (5)4、1总体结构设计 (5)4、2流程图设计 (6)4、3各模块功能概述与实现 (6)4、3、1数据包采集中各类的关系 (6)4、3、2数据包捕获与分析模块 (6)4、3、3流量获取模块 (8)4、3、4数据统计模块 (10)5分析工具测试 (10)5、1测试环境 (10)5、2测试步骤 (11)5、3测试结果评价 (11)6结束语 (12)参考文献: (13)1引言1.1课题背景随着构建网络基础技术与网络应用的迅速发展以及用户对网络性能要求的提高,使得网络管理成为迫切需要解决的问题,有效的网络管理能够保证网络的稳定运行与持续发展,更重要的就是,随着网络规模的扩大与黑客技术的发展,入侵与攻击的案例日益增多,对稳定的网络服务、信息安全、互联网秩序都提出了严峻的挑战,网络安全管理在整个网络管理系统里扮演起更为重要的角色。

1.2网络流量监控的引入网络安全管理体系中,流量监控与统计分析就是整个管理的基础。

流量检测主要目的就是通过对网络数据进行实时连续的采集监测网络流量,对获得的流量数据进行统计计算,从而得到网络主要成分的性能指标。

网络管理员根据流量数据就可以对网络主要成分进行性能分析管理,发现性能变化趋势,并分析出影响网络性能的因素及问题所在。

此外,在网络流量异常的情况下,通过扩展的流量检测报警系统还可以向管理人员报警,及时发现故障加以处理。

在网络流量检测的基础上,管理员还可对感兴趣的网络管理对象设置审查值范围及配置网络性能对象,监控实时轮询网络获取定义对象的当前值,若超出审查值的正常预定值则报警,协助管理员发现网络瓶颈,这样就能实现一定程度上的故障管理。

而网络流量检测本身也涉及到安全管理方面的内容。

由此可见,对于一个有效的网络安全管理系统来说,功能的实现都或多或少的依赖于流量信息的获取。

因此网络流量信息的采集可以说就是网络安全管理系统得以实现的核心基石。

它的应用可以在一定程度上检测到入侵攻击,可以有效地帮助管理人员进行网络性能管理,并利用报警机制协助网管人员采取对应的安全策略与防护措施,从而减少入侵攻击所造成的损失。

1.3课程设计的目的与任务该网络流量监控及分析工具主要用途就是通过实时连续地采集网络数据并对其进行统计,得到主要成分性能指标,结合网络流量的理论,通过统计出的性能指数观察网络状态,分析出网络变化趋势,找出影响网络性能的因素。

课程设计开发的工具实现以下功能:(1)采用Winsock编写原始套接字Socket-Raw对数据包进行采集捕获,并可实现分类及自定义范围进行捕获;(2)对捕获的数据包进行一定的解析;(3)访问操作系统提供的网络性能参数接口,得到网卡总流量、输入流量与输出流量;(4)系统提供了多种方式显示结果,如曲线图、列表等;(5)使用IP帮助API获取网络统计信息;(6)实现对部分常见威胁的预警,可继续开发扩展其报警功能。

2相关的概念与技术2.1TCP/IP体系结构由于TCP/IP比其之前的OSI模型更具体实现,随着互联网的不断发展,遵循TCP/IP结构的网络不断普及,因此现在通常采用TCP/IP代表Internet体系结构。

TCP/IP的目的就是在网络标准不同的情况下解决互联问题,可以说,网络互联就是TCP/IP的核心。

TCP/IP的体系结构如图1所示。

图1TCP/IP在设计时重点并没有放在具体通信的实现上,所以对最后两层没有做出具体规定,同时表明它允许不同类型的通信网络参与通信。

它的四个层次功能如下。

(1)应用层,提供常用的应用程序及自定义的应用程序,数据传输时用TCP/IP协议来进行;(2)传输层,提供端到端的应用程序之间的通信,可以使用传输控制协议TCP(Transmission Control Protocol)或用户数据报协议UDP(User Datagram Protocol)协议,前者提供可靠传输,传送单位就是报文段,后者提供不可靠服务,传输单位就是数据报,即分组。

此外,传输层另外一个功能就就是区别应用程序;(3)网际层,负责计算机之间的通信,采用的协议就是IP协议,数据传送单位就是分组,向上提供不可靠的传输服务;(4)网络接口层,负责接收数据报,并实现发送,或者接收帧,提取IP数据报,交给互联网层。

2.2原始套接字从用户的角度来瞧,标准的流式套接字与数据报套接字这两类套接字似乎涵盖了TCP/IP应用的全部,因为基于TCP/IP的应用,从协议栈的层次(如图2、2、1所示)上讲,在传输层的确只可能建立于TCP或UDP协议之上,而流式套接字与数据报套接字又分别对应于TCP与UDP,所以几乎所有的应用都可以用这两类套接字实现。

但就是,当需要自定义数据包发送时或者需要分析所有经过网络的数据包的时候,就必须面临一种不同于前两者的方式—Raw Socket,即原始套接字,程序员可以用它来发送与接收 IP 层以上的原始数据包, 如ICMP,TCP, UDP等,不仅这样,它还可以实现如伪装本地IP、发送ICMP包等功能。

Raw Socket 广泛应用于高级网络编程,也就是一种广泛的黑客手段。

著名的网络sniffer 、拒绝服务攻击(DOS)、IP 欺骗等都可以以Raw Socket 实现。

Raw Socket 与标准套接字(SOCK_STREAM 、SOCK_DGRAM)的区别在于前者直接置"根"于操作系统网络核心(Network Core),而SOCK_STREAM 、SOCK_DGRAM 则“悬浮”于TCP 与UDP 协议外围,如图2、2、2所示。

3 网络数据的采集技术分析3.1 Windows 下原始数据包捕获的实现网络上的数据包捕获机制主要依赖于所使用的操作系统,不同的操作系统下有不同的实现途径。

在Windows 环境下,可通过网络驱动程序接口规范(NDIS),WinSock 的SOCK_RAW 或虚拟设备驱动技术(VxD)等技术实现网络数据包的捕获功能。

前面已经介绍到了,使用原始套接字可以绕过Socket 提供的功能,对底层的协议进行使用与开发,可以根据自己的需要生成想要的数据报文等,下面开始介绍使用原始套接字对数据包捕获进行开发的相关技术知识。

第一,使用套接字前,需要了解网卡接收数据的工作原理:在正常情况下,网络接口只响应两种数据帧,一种就是与自己的硬件相匹配的数据帧,另一种四向所有计算机广播的数据帧。

在系统中,数据帧的收发由网卡完成,网卡程序接收从网络发来的数据包,根据其硬件地址去判断就是否与本机的硬件地址匹配,若匹配就通知CPU 产生中断进行响应,然后调用驱动程序设置的网卡中断程序地址调用驱动程序接收数据,然后放入堆栈进行系统相关处理,若不匹配则直接丢弃该数据包[3]。

对于网络接口,它一般具有4种数据接收模式:广播、组播、直接与混杂模式,只有当把接口设置为混杂模式时,网络接口才能接收所有的数据,无论地址就是否匹配,所以在做本设计的时候一定要设置为混杂模式才能实现数据的采集。

第二,需要了解套接字的工作程序与使用方法:一般来说,采用套接字开发网络程序需要经历以下几个基本步骤:启动、创建、绑定、监听(接受连接)、连接、发送/接收数据、关闭、卸载等。

第三,具体到Windows 下利用原始套接字捕获网络数据可以这样设计:(1)启动套接字;图 2、2、2 标准套接与原始套接字的关系 图 2、2、1 协议栈层次(2)创建一个原始套接字;(3)将套接字与本地地址绑定;(4)设置操作参数;(5)设置网络接口为混杂模式;(6)启动监听线程,开始接收数据;(7)退出关闭套接字。

3.2原始数据包捕获的关键函数(1)启动函数WSAStartupint PASCAL FAR WSAStartup (DWORD wV ersionRequested , LPWSADA TA lpWSAData);每一个套接字应用程序都必须调用该函数进行一系列初始化工作,并且只有调用成功返回后,才能开始使用套接字,其中参数wVersionRequested就是版本号,高字节就是次版本号、低字节就是主版本号,参数lpWSAData就是指向WSADA TA结构的指针。

(2)套接字创建函数socketSOCKET 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)绑定函数bindint bind ( SOCKET s , struct sockaddr_in* name , int namelen);成功创建套接字后的下一步工作就就是将本地网络接口与套接字进行绑定,其中参数s 就是创建的套接字,参数name就是需要绑定的通信对象的信息结构体指针,namelen就是该结构的长度。

需要注意的就是sockaddr_in结构:struct sockaddr_in{short sin_family; //地址族,设置为AF_INETunsigned short sin_port; //指定的端口号struct in_addr sin_addr; //IP地址char sin_zero[8];};由于主机序列与网络序列的关系,在程序中需要使用htons等函数进行转换工作。

(4)设置接口模式函数WSAIoctlint WSAAPI WSAIoctl(SOCKET s, DWORDdwIoControlCode, LPVOID lpvInBuffer, DWORDcbInBuffer, LPVOID lpvOutBuffer, DWORDcbOutBuffer, LPDWORD lpcbBytesReturned,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINElpCompletionRoutine);其中,s为一个套接口的句柄,dwIoControlCode为操作控制代码,lpvInBuffer为输入缓冲区的地址,cbInBuffer为输入缓冲区的大小,lpvOutBuffer为输出缓冲区的地址, cbOutBuffer为输出缓冲区的大小,lpcbBytesReturned为输出实际字节数的地址,lpOverlapped为WSAOVERLAPPED结构的地址,lpCompletionRoutine为一个指向操作结束后调用的例程指针。

相关主题