1、厦门大学软件学院毕业设计(论文)开题报告 学生姓名 班级 学号 指导教师姓 名 职称 所在单位 毕业设计 (论文 )题目 基于流量分析的网络监控系统 毕业设计 (论文 )目标 : 基于 Winpcap 开发基于流量分析的网络监控系统 。 系统能动态检测子网内的网络流量,实现针对不同网络协议和不同网络服务的相关数据包流量的实时分析,并将检测数据保存到数据库。 系统 具体功能如下: 1.实现 原始数据包的捕获 2.实现对数据包的简单分析 3.实现动态检测子网内的网络流量 4.实现针对不同网络协 议和不同网络服务的相关数据包流量的实时分析 5.实现对分析数据的流量统计并保存到数据库中 实现方法: 基
2、于 Windows 系统上的主要采用 C+和 VC+编程实现,其中涉及到的数据库问题初步确定采用 Mysql 或者 SQL SERVER 实现,但最终还要在编程的过程中视情况而定。 什么是 Winpcap,它的 特 性和应用领域 Winpcap 是一个免费公开的软件系统。它用于 windows 系统下的直 接的网络编程。大多数网络应用程序访问网络是通过广泛使用的套接字 , 这种方法很容易实现网络数据传输,因为操作系统负责底层的细节( 比如协议栈,数据流组装等)以及提供了类似于文件读写的函数接口。但是有时,简单的方 法是不够的 , 因为一些应用程序需要一个底层环境去直接操纵网络通信 , 因此需要
3、一个不需要协议栈支持的原始的访问网络的方法。 winpcap 适用于下面的开发者: a.捕获原始数据包 不管这个包是发往本地机,还是其他机器之间的交换包。 b.在数据包被发送到应用程序之前,通过用户定义的规则过滤。 c.向网络发送原始数据包。 d.对网络通信量做出统计。 这些功能依赖于 Win32 系统内核中的设备驱动以及一些动态链接库。Winpcap 提供了一个强 大的编程接口,它很容易地在各个操作系统之间进行移植,也很方便程序员进行开发 什么样的程序需要使用 Winpcap呢? 很多不同的工具软件使用 Winpcap于网络分析,故障排除,网络安全监控等方面。 Winpcap 特别适用于下面
4、这几个经典领域: 1.网络及协议分析 2.网络监控 3.通信日志记录 4.traffic generators 5.用户级别的桥路和路由 6.网络入侵检测系统( NIDS) 7.网络扫描 8.安全工具 WinPcap 包括三个部分 :第一个模块 NPF(Netgroup Packet Filter),是一个虚拟设备驱动程序文件。它的功能是过滤数据包,并把这些数据包原封不动地传给用户态模块,这个过程中包括了一些操作系统特有的代码。第二个模块 packet.dll为 win32 平台提供了一个公共的接口。不同版本的 Windows 系统都有自己的内核模块和用户层模块。 Packet.dll 用于解
5、决这些不同。调用 Packet.dll 的程序可以运行在不同版本的 Windows 平台上,而无需重新编译。 第三个模块 Wpcap.dll是不依赖于操作系统的。它提供 了更加高层、抽象的函数。 图 1 winpcap 的内部结构 捕获系统要让用户程序使用内核提供的功能必须要有一个编程接口 Winpcap提供了两个不同的库: packet.dll 和 wpcap.dll。 packet.dll 提供一个底层的 API,通过这个 API 可直接访问网络设备驱动,而独立于 Microsoft OS. wpcap.dll是一个高层的强大捕获程序库,与 Unix 下的 libpcap 兼容 , 它独立
6、于下层的网络硬件和操作系统。 WinPcap 的优势提供了一套标准的抓包接口,与 libpcap 兼容,可使得原来许多 UNIX 平台下的网络分析工具快速移植过来便于开发各种网络分析工具,充分考虑了各种性能和效率的优化,包括对于 NPF 内核层次上的过滤器支持,支持内核态的统计模式,提供了发送数据包的能力。 网络数据包捕获的原理 以太网( Ethernet)具有共享介质的特征,信息是以明文的形式在网络上传输,当网络适配器设置为监听模式(混杂模式 , Promiscuous)时,由于采用以太网广播信道争用的方式,使得监听系统与正常通信的网络能够并联连接,并可以捕获任何一个在同一冲突域上传输的数据
7、包。 IEEE802.3 标准的以太网采用的是持续 CSMA 的方式,正是由于以太网采用这种广播信道争用的方式,使得各个站点可以获得其他站点发送的数据。运用这一原理使信息捕获系统能够拦截的我们所要的信息,这是捕获数据包的物理基础。 以太网是一种总线型的网络,从逻辑上来看是由一条总线和多个连接在总线上的站点所组成各个站点采用上面提到的 CSMA/CD 协议进行信道的争用和共享。每个站点(这里特指计算机通过的接口卡)网卡来实现这种功能。网卡主要的工作是完成对于总线当前状态的探测,确定是否进行数据的传送,判断每个物理数据帧目的地是否为本站地址,如果不匹配,则说明不是发送到本站的而将它丢弃。如果是的话
8、,接收该数据帧,进行物理数据帧的 CRC 校验,然后将数据帧提交给 LLC 子层。 图 2 捕获数据包的结构图 其中 NDIS 是 Network Driver Interface Specification 的简称 , Microsoft Windows 和 MS-DOS 的系统中,网卡通信时的性能指标。由 3Com 最先提案并且标准化。在网络通信中,像网卡之类的物理媒体不同,各自的标准也不同。NDIS 是将这些机能模拟,并与上层网络协议统一,可以将所有的网络设备制作出一个统一的规格,便于使用。 利用 winpcap 实现数据包捕获的 设计步骤 根据用 Windows 分组捕获库 WinPc
9、ap 提供功能首先要初始化两个结构体,一个是适配器的结构体 LpAdapter, 一个是存放接收到的数据包的结构体 RecvPacket,并 使用 Packet.dll 动态连接库编写源代码 数据包捕获实现的步骤主要 如下: (1) 获 取 适配器列表。 (2) 获 取 系统中网络适配器的名字。 (3) 从适配器列表中选择一个默认的 0 号适配器。 (4) 将所选择的适配器 lpAdapter 设置为混杂模式。 PacketSetHwFilter(lpAdapter, NDIS_PACKET_TYPE_PROMISCUOUS) (5) 设置 BPF 内核中包过滤的过滤器的代参政。利用这个函数右
10、以完成 对于原始数据包的初始的过滤处理,如根据其中端口号、 IP 地址等。 PacketSetBpf( LpAdapter AdapterObject, structbpf_program*fp) (6) 设置缓冲池为字节。 PacketSetBuff(lpAdapter, 512000); (7) 分配一个数据包对象,并连接已分配的缓冲。 PacketInitPacket(lpPacket, (char*)bufferReceive, 512000); (8) 捕获多个数据包。从网卡 lpAdapter 接 收数据包,并将数据包放入 lpPacket 所指向的数据包结构体中,若接收成功返回
11、TRUE,否则返回 FALSE。 PacketReceivePacket(lpAdapter, lpPacket, TRUE); (9) 通过触发回调函数,把捕获符合过滤器规则的数据包转发给网络协议分析模块 进行分析处理。 (10)结束接收数据包,释放数据包对象。 (11)关闭网卡设备,将网卡恢复到正常接收状态。 数据包捕获技术是网络管理系统的关键技术 。 如果在一个繁忙的网络上进行截获,而不设置任何过滤,那得到的数 据包是非常多的,可能在一秒钟内得到上千的数据包。如果应用程序不进行必要的性能优化,那么将会大量的丢失数据包。对捕包性能的优化必不可少,考虑采用多线程来处理数据包。若在程序中建立一
12、个公共的数据包缓冲池,这个缓冲池是一个 LILO 的队列。于是在程序中使用三个线程进行操作:一个线程只进行捕获操作,它将从驱动程序获得的数据包添加到数据包队列的头部;另一个线程只进行过滤操作,它检查新到的队尾的数据包,检查其是否满足过滤条件,如果不满足则将其删除出队列;最后一个线程进行数据包处理操作,象根据接收的数据包发送新数据包这样的 工作都由它来进行。考虑尽可能少丢失数据包的条件,应该是进行捕获操作的线程的优先级最高,这样就可以得到更高的捕包性能。 根据上面原理 设计 以下 相关的子系统功能 并完成最终系统 a.基于 Winpcap 的网络 数据 包捕获; b.基于网络 数据 包的分析和统计; c.数据的存储; 时间进度安排: 2 月 26 日 -3 月 31 日 阅读文献资料,理解任务,完成开题报告 4 月 1 日 -4 月 30 日 提交流量分析系统的设计方案 5 月 1 日 -5 月 20 日 完成网络监控系统 各子系统的 开发 5 月 21 日 -5 月 31 日 提交完整系统 6 月 1 日 -6 月 15 日 论文撰写,论文答辩 指导教师审核意见: 指导教师签名: 年 月 日