资讯详情

【php毕业设计】基于php+mysql+apache的网络数据包分析工具设计与实现(毕业论文+程序源码)——网络数据包...

基于php mysql apache设计和实现网络数据包分析工具(毕业论文) 程序源码)

大家好,今天给大家介绍一下。php mysql apache设计和实现网络数据包分析工具,文章末尾附有毕业设计论文和源码下载地址。

  • 基于php mysql apache设计和实现网络数据包分析工具(毕业论文) 程序源码)
    • 1、项目简介
    • 2、资源详情
    • 3、关键词:
    • 4、毕设简介
    • 5、资源下载

1、项目简介

  1. 选择本系统ubuntu(Linux)、libpcap、apache、mysql和php平台开发、操作系统和软件开发包都是免费开源软件,这也是该系统的一个重要特点。先用这个系统libpcap捕获数据包,然后使用C语言TCP/IP该协议是一个理论基础分析数据包,得的信息存储在mysql数据库中。数据包信息分析模块从mysql在数据库中读取数据,统计分析信息,安全描述网络信息状态。最后通过apache和php显示数据库信息的技术。
  2. 该系统实现了数据包捕获、分析、信息分析和信息显示,为用户了解当前网络数据包状况提供了良好的参考。

2、资源详情

项目难度:中等难度 适用场景:相关题目毕业设计 配套论文字数:12414字30页 内容:整套源码 完整的毕业论文 资源文件目录简图如下:

请添加图片描述


3、关键词:

网络数据包;TCP/IP;数据包分析;数据包信息分析;攻击特征

4、毕设简介

提示:以下是毕业论文的简要介绍,项目源代码和完整的毕业论文下载地址见文末。

引言 1.1 课题背景 省略

面对网络安全的严峻形势,如何判断连接到网络的主机是否安全变得非常重要。主题选择的目的是积极了解当前网络安全的形式,分析常见的网络协议数据包,设计网络数据包捕获、分析、查看数据包信息和数据统计分析工具,深入了解网络协议和安全知识!

1.2 国内外研究现状 典型的网络数据包分析器可以捕获数据包,解码各种协议,并提供易于阅读的结果格式。大多数更完美的分析师还包括一些统计报告功能。管理员可以很容易地判断故障的工作站点及其原因,如查看网络信息分布、了解网络使用和接收连接动态。

1.3 本课题研究的意义 网络安全不再是一个新的话题,也不再是一个深入的话题。网络数据包的分析也有成熟的结构设计,如数据包的捕获和分析,提供易于查看的格式和简单的统计报告。然而,网络的发展日新月异,安全要求也在不断发展。论文主要与模块密切相关并使用MySQL数据库增强了统计报告模块的功能。

1.4 本课题的理论基础 数据包的分析工具是在ubuntu libpcap apach mysql php设计在平台上。libpcap开发包设置网络设备,捕获数据包,按照协议包头格式分析分析模块中获得的数据包,并简单解释,最后放入mysql等待统计分析模块在数据库中的使用。

统计分析模块对数据库中的信息进行分类统计,获取所需的数据信息,并与设置的各种攻击特征进行比较,以便对当前主机的安全状况进行简单的统计分析。此外,如果用户手动分析,该工具提供了一个包头信息页面,可以方便地查询和捕获数据包。用户可以通过手动分析这些数据来判断主机的状态。

整个系统的基础是基于TCP/IP基于协议。TCP/IP协议不完全一致OSI七层参考模型。OSI通信协议的7层抽象参考模型,每层都执行特定任务。TCP/IP通信协议采用四层结构,每层呼叫其下一层提供的网络来满足自己的需求。[3]网络协议IP是TCP/IP心脏也是网络层面最重要的协议。另外还有TCP有连接协议,UDP,ICMP等协议。

2 网络数据包分析系统概述 2.1 网络数据包分析的意义 任何看过经典电影《黑客帝国》并使用过网络数据包分析工具的人都应该有一种操作员的感觉,他们坐在很多控制面板前,解码屏幕上连续滑落的信号,就像水流一样。

电影中的操作员处理生死问题,实际上,数据包分析工具的用户处理同样重要的问题。其维护和检测数据包的能力对网络和依赖网络的行业至关重要。

数据包分析工具的生存期仍然很长,主要是因为7需要有目的地进行×对于24小时网络管理行业,数据包分析工具可以为企业提供更容易接受和消化的网络分析数据。

2.2 网络数据包分析的核心技术基础 数据包分析是一个TCP/IP基于协议TCP/IP就不能不提OSI,TCP/IP协议不完全一致OSI七层参考模型。OSI七层抽象参考模型是一种通信协议,每层都执行一定的任务。

该模型的目的是使各种硬件在上相互通信各种硬件。这7层是:物理层、数据链路层、网络层、传输层、语音层、表示层和应用层。TCP/IP采用通信协议 4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。[3]这4层分别为: 应用层:应用程序间沟通层,如简单的电子邮件传输(SMTP)、文件传输协议(FTP)、远程网络访问协议(Telnet)等。

传输层:在此层中,它提供节点间的数据传输服务,如传输控制协议(TCP)、用户数据报告协议(UDP)等,TCP和UDP将传输数据添加到数据包中,并将其传输到下一层,负责传输数据,并确定数据已被传输和接收。

互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。

网络接口层:定义如何使用实际网络(如管理实际网络媒体)Ethernet、Serial Line等)传输数据。

2.3 网络数据包分析系统的主要功能 软件是为应用程序设计的,所以软件可以提供什么样的功能是非常重要的。网络数据包分析工具应实现数据包捕获、数据包分析、数据包信息分析、数据包信息显示四个功能。数据包的捕获和分析是系统的基本部分,数据包信息的分析和显示是数据处理的部分。四个模块协调分析当前主机的网络数据包。

在设计网络数据包分析工具时,必须考虑网络速度。网络和网络速度的发展给网络监控带来了新的挑战。PC上基于Linux与数据包分析相关的系统在面对高速链路时越显著。因此,如何快速捕获数据包非常重要。数据包分析技术是数据包分析的基础。

分析数据包是基于数据包分析工具解决的核心问题。结构数据包的协议有很多种。应根据结构数据包的协议处理包,正确理解网络中传输的单元,控制网络单元的传输,实现数据包的分析。网络数据包的分析是对捕获解码的数据包信息进行统计分析,是输出结果的一部分。数据包信息的显示是人性化的辅助功能。

3 网络数据包分析系统的设计 整个网络数据报告分析工具采用模块化设计理念,因为许多程序太长或太复杂,很难写在单个单元中。如果将代码分为一个较小的功能单元,则将大大简化编程过程。模块化程序通常比单个程序更容易编写、调试和修改。因此,该系统采用了模块化的设计理念。

模块化编程的优点如下: (1)高效的程序开发: 由于小子程序比大程序更容易理解、设计和测试,因此使用模块化方法可以更快地开发程序。在定义了模块的输入和输出后,程序员可以为模块提供所需的输入 通过检测输出来判断模块的正确性。然后通过连接器连接和定位分立的模块,生成单个绝对地址的可执行程序模块。最后,测试整个模块。

(2)子程序可以重用:为一个程序编写的代码通常可以用于其他程序。这些部分可以保存在模块化编程中,以备将来使用。由于代码可以重置,保存的模块可以连接到任何满足其输入和输出要求的程序。在单个程序编程中,这些部分埋在整个程序中,不易被其他程序使用。

(3)便于调试和修改: 模块化程序通常比单个程序更容易调试。由于程序的模块接口被仔细定义,因此很容易将问题定位为特定的模块。一旦发现了问题模块,就很容易纠正问题。

3.1 系统模块划分 由四个模块组成的网络数据包分析工具 捕获数据包,从网卡获取数据包。 这两个模块是整个分析工具的基本部分,在整个系统中有着重要的作用,三是 捕获信息的分析,此模块主要是对捕获的信息进行统计,并与设定的特征值进行比较,得出简单的分析结论,四是 显示捕获数据包的信息,目的是为使用者提供一个方便进行手工分析的方式。四个模块之间的调用关系如图1。

3.2 数据包捕获模块设计 此模块是先从网卡获取各种数据包信息并复制到缓存,等待解析模块的调用。这个模块的关键部分是快速的捕获数据包,减少丢包的比率。

数据包捕获是以以太网为基础的。以太网(Ethernet)具有共享介质的特征,信息是以明文的形式在网络上传输。IEEE802.3标准的以太网采用的是持续 CSMA 的方式,正是由于以太网采用这种广播信道争用的方式,使得各个站点可以获得其他站点发送的数据。运用这一原理使信息捕获系统能够拦截的我们所要的信息,这是捕获数据包的物理基础。[1]

以太网是一种总线型的网络,从逻辑上来看是由一条总线和多个连接在总线上的站点所组成各个站点采用上面提到的 CSMA/CD 协议进行信道的争用和共享。每个站点(这里特指计算机通过的接口卡)网卡来实现这种功能。网卡主要的工作是完成对于总线当前状态的探测,确定是否进行数据 的传送,判断每个物理数据帧目的地是否为本站地址,如果不匹配,则说明不是发送到本站的而将它丢弃。如果是的话,接收该数据帧,进行物理数据帧的 CRC 校验,然后将数据帧提交给LLC 子层。[1]

3.3 数据包解析存储模块设计 在上一模块实现了数据包的捕获,并复制到缓存。解析模块主要是实现根据数据包的协议包头进行数据信息的解析,并做出适当的解释,最后把数据放入数据库中。等待分析模块读取数据。目前解析的协议有etnernet, LLC, arp/rarp, ip, tcp, udp, icmp, dns, dhcp协议包头进行了解析并把数据包信息存储到数据库中。

数据包头的解析主要是根据数据包协议的格式进行有意义字段的读取。下面以ARP协议报头来说明整个解析的过程。 首先,必须了解ARP/RARP协议的报头格式,格式如图2。

字段含义 硬件类型字段:指明了发送方想知道的硬件接口类型,以太网的值为1;协议类型字段:指明了发送方提供的高层协议类型,IP为0800(16进制);硬件地址长度和协议长度:指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;操作字段:用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;发送方的硬件地址(0-3字节):源主机硬件地址的前3个字节;发送方的硬件地址(4-5字节):源主机硬件地址的后3个字节;发送方IP(0-1字节):源主机硬件地址的前2个字节;发送方IP(2-3字节):源主机硬件地址的后2个字节;目的硬件地址(0-1字节):目的主机硬件地址的前2个字节;目的硬件地址(2-5字节):目的主机硬件地址的后4个字节;目的IP(0-3字节):目的主机的IP地址。[3]

根据协议的格式定义,报头数据结构体(具体定义在后面给出)。进行类型的转化后对数据进行读取,并进行必要的解释。在这里最重要的是数据包的协议格式的定义。如果定义的结构有问题,后面的数据提取将是无意义的。

数据包信息的存储,是把提取的数据包头信息存储到一个地方,等待后面数据包信息分析模块的查询。存储信息要求,存入和提取信息都必须迅速,同时,要提供强大的查询功能来满足分析模块对数据的需求。

3.4 数据包信息分析模块设计 本模块的功能是通过对捕获到的数据包信息,进行简单的统计分析,对当前的网络安全情况做出合理的评价。

通过对数据包的分析,我们可以判断数据包的大小,数据包的包头信息,协议信息,以及数据包的内容等等。对于研究网络安全的人来说,掌握这方面的知识是相当重要的。现在的网络通信中,大部分数据都没有加密,我们可以轻易地从数据包中提取账号,密码之类我们关心的数据。另外,对数据包整体的信息统计也是数据包分析的一个方面。在前面的模块中我们获得了大量的数据包信息,在这个模块中我们要利用这些信息进行分析。把从数据库中查询得到的数据与入侵特征数据进行比较得到现在的网络安全分析结果。

数据包信息分析流程如图3。

3.5 数据包信息显示模块设计 数据包信息显示模块的目的是给使用者提供一个可以查看数据包信息的窗口,原则是尽力合理的显示数据包的有用信息。数据包信息将采用多种不同排列的信息显示方式,比如按IP归类,按端口归类等等。同时信息分析模块的分析结果将生成一个网页类型的文档,可以通过网页的形式来查看最后的分析结果,还应该具备安全特征的输入窗口。

信息的显示并不一定是数据库里的所有信息,主要是提供给使用者最想看的信息。信息的显示方式是表格形式,有利于使用者对数据包的信息有比较直观的了解,以便做出正确合理的判断。

4 网络数据包分析系统的解决方案 整个系统的开发平台是Ubuntu+Libpcap+Apache+Mysql+Php每一个组件都是Free or Open Source Software(免费或者开源软件)。选择这个开发平台是整个系统的一大特色,首先免费软件降低了开发成本,减少不必要的消耗。再次正版软件的使用是系统更加的稳定,具有更好的可靠性,同时也避免了侵权的问题。

这种免费和开源的方式对于用户都具有很强的吸引力,无论企业和个人开发者,尤其是对想得到较好的技术支持但又没有足够的经济支持的开发人员。在互联网方面,不需要为软件的发布支付任何许可证费就可以开发和应用。同时开源社区的潜力更在于资源共享,上百万的志愿开发 者为开源软件贡献自己的力量,保证了技术的不断进步和升级。开源的特性也使企业和开发人员可以随意的修改源程序为我所用,提升专有软件或者商业软 件的限制中所没有的灵活性,放大了项目的衍生性。

系统设计采用模块化的设计思想。因为模块化有很多优点。有效率的程序开发:使用模块化方法可以更快地开发程序,因为较小的子程序比大程序更容易理解、设计和测试。子程序可以重用:为一个程序编写的代码经常可以用于其它的程序。便于调试和修改:模块化程序一般比单块程序易于调试。

Ubuntu操作系统有自己的优点,选择它的原因是:Ubuntu 永远免费,无需支付任何许可费用。可以下载、使用以及与人分享,而绝对无需任何代价。每6个月推出新的桌面版本和服务器版本,这意味着您总是能够享受开源世界所提供的最新、最好的应用程序。Ubuntu 十分注重安全。对于每个桌面和服务器版本,可以获得至少18个月的免费安全升级。如果使用的是长期支持版本(LTS),那么可以获得桌面版本3年、服务器版本5年的支持。LTS 版本并不收取额外的费用,Ubuntu将在相同的免费条件下为每个人提供我们最好的服务。Ubuntu 新版本的升级也总是免费的。

4.1 数据包捕获模块的解决方案 数据包捕获模块要采用libpcap开发包,libpcap是一个与实现无关的访问操作系统所提供的分组捕获机制的分组捕获函数库,用于访问数据链路层。这个库为不同的平台提供了一致的编程接口,在安装了 libpcap 的平台上,以 libpcap 为接口写的程序、应用,能够自由的跨平台使用。操作系统所提供的分组捕获机制主要有三种:

BPF(Berkeley Packet Filter),DLPI(Data Link Provider Interface),及Linux下的SOCK_PACKET类型套接口。基于 BSD 的系统使用 BPF,基于 SVR4 的系统一般使用DLPI。从文献上看BPF比DLPI性能好很多,而SOCK_PACKET更弱。SCO OpenServer 虽然本身没有内核过滤模块 BPF,但有作为可压入内核的 STREAMS 模块 BPF,采用与伯克利 BPF 相一致的概念。但在 ioctl 操作上,SCO 的 BPF 并不完全提供伯克利 BPF 的所有功能。

libpcap 的结构是简单的。分析其结构能使我们对稍大的程序的编写基本思路有一定了解。首先,为了提供跨平台兼容性,源码中并没有 Makefile ,而是要运行一个 configure 脚本来自动生成 Makefile,congfigure 脚本一方面检测系统特征,以确定当前系统及一些相关配置;另一方面读取已写好的 Makefile.in 文件,以此为蓝本,生成一个适用于当前平台的 Makefile。[4]

4.2 数据包解析及存储模块解决方案 数据包解析完全采用自己写的数据结构进行数据的转换,运用结构体的成员进行数据的读取,此处涉及到Ethernet包头,LLC,ARP/RARP,IP,TCP,UDP,DHCP,DNS,ICMP的包头格式,以及机构体的定义。

数据包信息的存储采用mysql 数据库。Mysql的特点如下: (1) MYSQL支持5000万条记录的数据仓库。 (2) MYSQL适应所有平台 这个优点跟选择PHP的理由一样。 (3) MYSQL是开源软件,在版本更新上也会遇到一些从商业角度出发所做出的结论的影响。而开源的东西似乎总是比较实在一点,不会有太多商业化的考虑。 (4) 学起来简单,或许不能这样说,因为大多数数据库都是用的SQL语句。 (5) MYSQL 因为是开源的,所以支持任意修改,也就是说你可以去除你不需要的功能,从而简化MYSQL,提高速度。不得不能说这是一个非常好的功能,任何商业数据库都做不到。

4.3 数据包信息分析模块解决方案 数据包信息分析模块运用C语言与mysql数据库的连接进行数据库数据的查询和统计。数据统计结果与入侵特征的对比运用C语言完成。因为C语言有如下特点:

C语言允许对位、字节和地址这些计算机功能中的基本成分进行操作。C语言程序非常容易移植。可移植性表示为某种计算机写的软件可以用到另一种机器上去。所有的高级语言都支持数据类型的概念。一个数据类型定义了一个变量的取值范围和可在其上操作的一组运算。常见的数据类型是整型、字符型和实数型。 C程序允许几乎所有的类型转换。例如,字符型和整型数据能够自由地混合在大多数表达式中进行运算。这在强类型高级语言中是不 允许的。 C语言的另一个重要特点是它仅有3 2个关键字,这些关键字就是构成C语言的命令。C语言是结构化语言 虽然从严格的学术观点上看,C语言是块结构(block-structured)语言,但是它还是常被称为结构化语言。[6]

4.4 数据显示模块解决方案 数据包信息的显示采用Apache+php的技术来实现,PHP 是一种脚本语言,可以编写包含嵌入式代码的Web 页面,只要访问页面就能执行这些代码,并且这些代码还能生成动态的内容作为输出的一部分发送到客户机的Web 浏览器。

(1) 安全性高,专业的mysql数据库安全性也远远高于其它数据库。 (2) 制作风格简单,只要你会基本的HTML语言和一定的设计技术就能很方便的制作一整套属于自己的论坛风格。 (3) 速度快,当然这一点会被其他很多因素影响,并不是绝对的。 5 网络数据包分析系统的实现 在系统实现的过程中,开发平台选用:Ubuntu(6.10)+Libpcap(0.8)+Apache(2.0)+Mysql+Php5,编辑器使用的是Emacs,编译器是gcc,调试工具是gdb。选用的这些从操作系统到开发包再到编辑,编译工具全部是免费的正版开源工具,为系统的开发成功提供了有利的保障,同时也降低了开发的成本。这也是本系统与其它系统不同的地方之一。

5.1 系统控制模块实现 在第四章叙述了模块化设计的优点,但是如何划分模块仍然是一个重要的问题。如果模块划分的不合理,实现起来就十分的麻烦!本系统是按功能划分的,有四个模块:一是 数据包的捕获,二是 数据包的解析,三是 捕获信息的分析,四是 显示捕获数据包的信息。捕获模块实现用libpcap,数据包解析及存储用C和mysql,数据包信息分析用C语言,数据包信息显示用php。四个模块之间的调用关系如图4。

在模块之间衔接运用到了线程的操作,还有几个重要的全局变量。操作流程如图5。

线程操作的核心代码如下: 打开一个线程并执行程序。

//建立一个线程运行数据包捕获函数
void p_click(GtkWidget * widget,gpointer data)
{ 
        
   pthread_mutex_lock(&mutex);
   stop=1;//捕获条件
   pthread_mutex_unlock(&mutex);
  pthread_create(&p_thread,NULL,panalyzer,NULL);//建立线程
}
//设置stop,停止运行指定线程。
void pexit(GtkWidget * widget,gpointer data)
{ 
        
   pthread_mutex_lock(&mutex);
   stop=0;//捕获条件
   pthread_mutex_unlock(&mutex);}

5.2 数据包捕获模块实现 数据包捕获是有Libpcap开发包中的函数实现的,使用的函数有以下几个。

pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf) 获得用于捕获网络数据包的数据包捕获描述字。device参数为指定打开 的网络设备名。snaplen参数定义捕获数据的最大字节数。promisc指定 是否将网络接口置于混杂模式。to_ms参数指定超时时间(毫秒)。 ebuf参数则仅在pcap_open_live()函数出错返回NULL时用于传递错误消息。

char *pcap_lookupdev(char *errbuf) 用于返回可被pcap_open_live()或pcap_lookupnet()函数调用的网络 设备名指针。如果函数出错,则返回NULL,同时errbuf中存放相关的 错误消息。

int pcap_lookupnet(char *device, bpf_u_int32 *netp, bpf_u_int32 *maskp, char *errbuf) 获得指定网络设备的网络号和掩码。netp参数和maskp参数都是 bpf_u_int32指针。如果函数出错,则返回-1,同时errbuf中存放相 关的错误消息。

int pcap_loop(pcap_t *p, int cnt,pcap_handler callback, u_char *user) 功能基本与pcap_dispatch()函数相同,只不过此函数在cnt个数据包 被处理或出现错误时才返回,但读取超时不会返回。而如果为pcap_open_live()函数指定了一个非零值的超时设置,然后调用 int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask) 将str参数指定的字符串编译到过滤程序中。fp是一个bpf_program结构的指针,在pcap_compile()函数中被赋值。optimize参数控制结果代码的优化。netmask参数指定本地网络的网络掩码。[4]

捕获数据包核心代码:

void panalyzer()
{ 
        
………………
  char *device=pcap_lookupdev(ebuf);//获取网卡
  void catch_packet(u_char *args,const struct pcap_pkthdr *header,u_char *packet);
  pcap_lookupnet(device,&localnet,&netmask,ebuf);//读取网络信息
  ………………
  pcap_t *pd=pcap_open_live(device,BUFSIZ,0,1000,ebuf);//打开网络设备
  starttime();
  while(stop==1)
    { 
        
      pcap_loop(pd,packet_number,catch_packet,NULL);//捕获数据包
    }
  endtime();
  struct pcap_stat stat;
  pcap_stats(pd,&stat);//统计捕获数据包
  ………………
  pcap_close(pd);
  return;}

函数调用关系如图6。

5.3 数据包解析及存储模块实现 解析与数据存储模块使用C 语言完成数据包的解析和数据库的连接。可解析的协议报头有:Ethernet包头,LLC,ARP/RARP,IP,TCP,UDP,DHCP,DNS,ICMP的包头格式。同时存储模块连接mysql 数据库,把解析得到的数据放入到数据库当中。数据库设计到表的建立问题。 整个报头解析的基本过程如图7。

DHCP包头数据结构的定义:

typedef struct _DHCPHdr
{ 
        
#if defined(WORD_BIGENDIAN)
  U_int8_t hops;
  U_int8_t hlen;
  u_int8_t htype;
  u_int8_t op;
 
#else
  U_int8_t op;
  u_int8_t htype;
  u_int8_t hlen;
  u_int8_t hops;
#endif
  u_int32_t xid;
  u_int16_t secs;
  u_int16_t flags;
  u_int32_t ciaddr;
  u_int32_t yiaddr;
  u_int32_t siaddr;
  u_int32_t giaddr;
  unsigned char chaddr[16];
  char sname[64];
  char file[128];
}DHCPHdr;

连接mysql数据库的关键语句:
………………
MYSQL mysql;
  char str[1024];
     mysql_init(&mysql);//初始化数据库
  if(!(mysql_real_connect(&mysql,"localhost","root","159753","packet",0,NULL,0))) //连接数据库
    printf("ERROR!\n");
………………
  if(mysql_query(&mysql,str)) printf("Dhcp insert error!\n");
 //执行插入语句
  mysql_close(&mysql);
//关闭数据库
………………

5.4 数据包信息分析模块实现 数据包信息分析模块主要是对数据包信息进行数据的统计和分析,并且针对常见的入侵方式做特征的对比。涉及到的特征有:Land 攻击,TCP SYN攻击,Ping Of Death攻击,WinNuke攻击,TCP/UDP端口扫描,synscan端口扫描等。函数调用流程如图8。

核心数据查询及对比特征代码:

………………
/*以下代码是连接数据库和进行特征比较的代码,比较的特征是synscan的扫描特征*/
res = mysql_query(&mysql,"select sourceip from ip where ");//生成mysql语句
  if(!(result = mysql_store_result(&mysql)))//返回查询结果
    { 
        
      printf("error!\n");
    }
  Else
    { 
        
      numRecords=mysql_num_rows(result);
      for(count=0;count<numRecords;count++)//提取查询数据
	{ 
        
	  row=mysql_fetch_row(result);
	  if(atoi(row[0])==39426&&atoi(row[1])==1028)//设定特征条件
	    { 
        
	      n++;
	    }
	}
      fputs("<br>",fp);
      if(n>0)
//输出分析结果描述
	fprintf(fp,"主机收到synscan数据包,可能受到synscan端口扫描!\n");
      else
	fprintf(fp,"主机收到数据包未发现synscan端口扫描!\n");
………………

5.5 数据包信息显示模块实现 数据包信息显示模块是用的php技术实现的。一共有十四个页面,以不同的排列顺序来显示数据包的信息。分别是首页,分析规则,分析结果,按捕获顺序显示,按IP源显示,按IP目的显示,按TCP 源端口显示,按TCP目的端口显示,按UDP源端口显示,按UDP目的端口显示,ICMP信息显示,ARP/RAPR信息显示,DNS信息显示,DHCP信息显示。原则是尽可能显示用户想要看到的有用信息。

核心显示代码: /以下代码是查询数据,并构件表格显示数据的核心代码/

………………
<?php
	$conn = new mysqli ('localhost', 'root', '159753', 'packet');//连接数据库
	$conn->query ("SET NAMES 'utf8'");
	$query_str = "SELECT packetnumber,cli_addr,y_addr,n_s_addr,r_a_addr,rou_addr,dns_addr,le_time,re_time,reb_time,cli_id FROM dhcp order by cli_addr";//设置查询语句
	$result = $conn->query ($query_str);
    ………………
//设定输出格式
	<table>
	  <tr>
	    <td>&nbsp;&nbsp;数据包ID</td>
	    <td>&nbsp;&nbsp;客户地址</td>
	    <td>&nbsp;&nbsp;本身地址</td>
	    <td>&nbsp;&nbsp;下一个服务器地址</td>
	    <td>&nbsp;&nbsp;代理地址</td>
	    <td>&nbsp;&nbsp;路由器地址</td>
	    <td>&nbsp;&nbsp;DNS地址</td>
	    <td>&nbsp;&nbsp;IP地址租用时间</td>
	    <td>&nbsp;&nbsp;更新时间</td>
	    <td>&nbsp;&nbsp;重新绑定时间</td>
	    <td>&nbsp;&nbsp;客户ID</td>
	 </tr>
EOM;
	  while(($row_data=@$result->fetch_assoc())!==NULL)
	{ 
        
	echo <<<EOM
	<tr>
		<td>{ 
        $row_data['packetnumber']}</td>
		<td>&nbsp;{ 
        $row_data['cli_addr']}</td>
		<td>&nbsp;&nbsp;{ 
        $row_data['y_addr']}</td>
		<td>&nbsp;&nbsp;&nbsp;&nbsp;{ 
        $row_data['n_s_addr']}</td>
		<td>&nbsp;&nbsp;{ 
        $row_data['r_a_addr']}</td>
		<td>&nbsp;&nbsp;{ 
        $row_data['rou_addr']}</td>
		<td>&nbsp;&nbsp;{ 
        $row_data['dns_addr']}</td>
		<td>&nbsp;&nbsp;{ 
        $row_data['le_time']}</td>
		<td>&nbsp;&nbsp;{ 
        $row_data['re_time']}</td>
		<td>&nbsp;&nbsp;{ 
        $row_data['reb_time']}</td>
		<td>&nbsp;&nbsp;{ 
        $row_data['cli_id']}</td>
		………………

6 网络数据包分析系统的测试分析 6.1 测试方案与测试环境 本课题设计并开发的网络数据包分析系统包括数据包捕获,数据包解析及存储,数据包信息统计分析,数据包信息显示。针对系统的主要功能,制定的测试方案是:数据包捕获测试,数据包解析及存储测试,数据包信息统计分析测试,数据包信息显示测试。

测试是在校园网宿舍进行,主机系统是WindowsXP,XP操作系统上装有VMWARE5.1使用Unbuntu6.10操作系统,XP操作系统相当于网关。

网络数据包分析系统:Ubuntu6.10+libpcap0.8+mysql+apach2.0+php5.0 网络环境:校园网10M以太网。 计算机硬件:AMD1.6+512M+8G+100M网卡。

6.2 测试结果 6.2.1 数据包捕获 测试目的是验证系统是不是可以捕获到达网卡上的数据包。 测试要求是打开本系统,在主机上进行正常的网络操作来产生必要的网络数据包,观测捕获结果。

测试结果发现系统显示捕获数据的时候,所有数据连在一起,不容易区分和查看。经改进在数据前加上分割符号,以及数据包的ID,使数据看起来很清晰。改进后系统顺利完成数据包的捕获,并在终端显示捕获的结果如图6-1。

6.2.2 数据包解析及存储 测试的目的是验证系统是不是可以解析捕获的数据包,并把解析到的数据信息存储的数据库中。

测试要求是打开本系统,在主机上进行正常的网络操作来产生必要的网络数据包,正常情况下可能无法产生多个类型的数据包,这时需要进行一些特殊的操作来产生不同协议的数据包。观测终端中的捕获结果,打开mysql数据库查看是否有数据。解析的截图如图9。

通过测试发现系统可完成大部分常见的网络数据包的解析及存储,目前可解析的数据包有:Ethernet包头,LLC,ARP/RARP,IP,TCP,UDP,DHCP,DNS,ICMP。存在的问题是由于本人知识有限,系统并不能解析所有的协议包头,希望通过以后的进一步学习在以后的学习中完善本系统。

6.2.3 数据包信息简单分析 测试目的是验证分析结果的正确性和合理性。 测试要求是打开本系统,在主机上进行正常的网络操作来产生必要的网络数据包,等待数据包捕获完毕后,点击分析数据包信息,分析模块会在apach目录下生成一个html文档来显示结果。然后通过apachh+php网页查看数据包信息的分析结果。

通过测试发现数据包信息分析模块可以对常见的网络攻击进行一定的检测,可检测的异常有Land 攻击,TCP SYN攻击,Ping Of Death攻击,WinNuke攻击,TCP/UDP端口扫描,synscan端口扫描等,但是这些判断比较简单,缺乏敏感度,同时对于依赖于主机工作类型及环境的主机,需要提供准确的系统正常状态下的工作特征数据。分析结果如图10。

6.2.4 数据包信息显示 测试目的是观察显示模块是不是可以正常并合理的显示捕获并解析的数据包信息,还有分析结果的显示。

测试要求是打开本系统,在主机上进行正常的网络操作来产生必要的网络数据包,等待数据包捕获完毕后,点分析数据包信息,通过网页查看数据包信息的解析信息以及分析结果,一共十四个页面。

测试发现十四个页面均可正常显示数据包解析后的信息及信息分析结果,显示信息的原则是尽量合理的显示使用者经常用到的信息。显示的数据并非数据库中的所有信息,因为数据库中信息太多,并非所有的数据都是经常有用的。页面只对查看频率比较高的信息进行了显示。显示结果如图11。

结 论 本文主要介绍了本人对网络数据包分析工具的设计、实现、测试。另外本文也对相关的理论知识及开发工具等进行了介绍。 首先,本文介绍了网络数据包分析的意义和作用;然后介绍网络数据包分析系统的基本结构和实现过程中常用的技术,主要有介绍了libpcap, apach, mysql, php等技术。

其次,本论文的核心部分系统的设计和实现,主要运用libpcap实现数据包的捕获,对etnernet, LLC, arp/rarp, ip, tcp, udp, icmp, dns, dhcp 协议包头进行了解析并把数据包信息存储到数据库中,分析模块实现了对数据包信息的统计分析,并在显示模块中显示分析结果,同时显示模块提供了显示捕获到的数据包解析信息的功能,增强了系统的功能。系统开发平台是:Ubuntu(6.10)+Libpcap(0.8)+Apache(2.0)+Mysql+Php5,编辑器使用的是Emacs,编译器是gcc,调试工具是gdb。可以看到选用的工具及开发包等均为开源或免费软件工具,这样即降低开发成本,又避免了版权的问题。这是系统的特点之一。

最后,由于作者水平有限,所以论文中难免出现错误和不足,主要体现在:在数据包捕获模块使用的是软件捕获,对网络速度很快的主机会出现丢包和影响网络速度。在解析模块本系统可解析的协议只是最常见的协议,并不是所有协议。希望有机会在今后的学习中完善本系统。

参考文献 [1] 谢希仁.计算机网络[M].北京:电子工业出版社,2005.8 [2] 韩东海.入侵检测系统实例剖析[M]. 北京:清华大学出版社,2002.5 [3] W. Richard Stevens[美].TCP/IP详解卷一[M].范建华,胥光辉,张涛译. 北京:机械工业出版社,2004.4 [4] 刘文涛.Linux网络入侵检测系统[M]. 北京:电子工业出版社,2004.10

标签: 朝辉低压高温传感器plus电子继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台