PHP网络数据包分析工具的设计与开发(源代码+论文)捕获解析信息分析显示

目  录

1.. 引言. 1

1.1   课题背景. 1

1.2   国内外研究现状. 1

1.3   本课题研究的意义. 1

1.4   本课题的理论基础. 1

2.. 网络数据包分析系统概述. 2

2.1   网络数据包分析的意义. 2

2.2   网络数据包分析的核心技术基础. 2

2.3   网络数据包分析系统的主要功能. 2

3.. 网络数据包分析系统的设计. 3

3.1   系统模块划分. 3

3.2   数据包捕获模块设计. 4

3.3   数据包解析存储模块设计. 4

3.4   数据包信息分析模块设计. 5

3.5   数据包信息显示模块设计. 6

4.. 网络数据包分析系统的解决方案. 6

4.1   数据包捕获模块的解决方案. 7

4.2   数据包解析及存储模块解决方案. 7

4.3   数据包信息分析模块解决方案. 8

4.4   数据显示模块解决方案. 8

5.. 网络数据包分析系统的实现. 8

5.1   系统控制模块实现. 9

5.2   数据包捕获模块实现. 10

5.3   数据包解析及存储模块实现. 12

5.4   数据包信息分析模块实现. 14

5.5   数据包信息显示模块实现. 15

6.. 网络数据包分析系统的测试分析. 17

6.1   测试方案与测试环境. 17

6.2   测试结果. 17

6.2.1    数据包捕获. 17

6.2.2    数据包解析及存储. 17

6.2.3    数据包信息简单分析. 18

6.2.4    数据包信息显示. 19

结    论. 20

参考文献. 21

致    谢. 22

声    明. 23

附    录. 24

1  引言

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通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。[3]网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。另外还有TCP有连接协议,UDP,ICMP等协议。

2  网络数据包分析系统概述

2.1  网络数据包分析的意义

凡是看过经典电影《黑客帝国》并且使用过网络数据包分析工具的人,应该都会有像电影中那个坐在一大堆的控制面板前解码像水流一样从屏幕上连续滑落的信号的“操作者”一样的感觉。

电影中的操作者处理的是生死的问题,而在现实中,数据包分析工具的使用者们处理的也是同样重要的问题。其对数据包进行检修及侦测的能力,对网络及依托于网络的行业都是至关重要。

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

2.2  网络数据包分析的核心技术基础

数据包分析是一TCP/IP协议为基础的。说到TCP/IP就不能不提OSI,TCP/IP协议并不完全符合OSI的七层参考模型。OSI是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这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。

数据包捕获

数据包信息显示

数据包解析及存储

数据包信息分析

图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。

0

图2 ARP包头格式

16

32

 

字段含义

硬件类型字段:指明了发送方想知道的硬件接口类型,以太网的值为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 数据包信息分析

 

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。

数据包抓捕

libpcap

数据包信息显示

php

数据包解析及存储

C和TCP/IP

数据包信息分析

C语言

图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);}

设置stop

stopop

Stop==1

结束线程

Stop==0

开始分析数据包信息

结果输出到页面

查看数据信息及结果

清除数据

结束

图5 系统操作流程图

设置分析信息

打开捕获解析线程

数据包的捕获与解析

数据包的分析与显示

 

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。

p_click()

Pthread_create()

panalyer()

Pcap_lookypnet()

Pcap_open_live()

Pcap_loop()

Catch_packet()

Pcap_close()

P_exit()

图6 函数调用关系

 

5.3  数据包解析及存储模块实现

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

整个报头解析的基本过程如图7。

以太网包头解析

IP包头解析

RARP包头解析

UDP包头解析

ARP包头解析

ICMP包头解析

TCP包头解析

类型=0x0806

类型=0x0835

类型=0x0800

类型=1

类型=17

类型=6

图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。

Select_data()

Packet_dis()

Arp_bam()

ddos()

land()

Syn_flood()

Ping_death()

Tcp_port()

winnuke()

Ping_port()

Udp_port()

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。

图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。

图10 数据包信息分析结果

 

6.2.4     数据包信息显示

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

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

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

 

图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

[5] Vikram Vaswani[美].MySQL完全手册[M].徐小青,路小村译. 北京:电子工业出版社,2004.11

[6] StephenPrata [美].C Primer Plus[M]. 北京:云颠工作室译,2005.2

[7] Gary R.Wright [美], W.Richard Stevens.TCP/IP详解卷二[M]. 北京:机械工业出版社,2006.2

[8] 喻志虎.UNIX 平台下C编程[M]. 北京:清华大学出版社,2001.10

[9] Marc Wandscheider[美] .PHP与MySQL Web应用开发核心技术[M].马朝辉,温继文. 北京:机械工业出版社,2006.9

[10] 曹天杰,张永平,苏成.计算机系统安全[M]. 北京:高等教育出版社,2003.6

致    谢

本文是在秦智老师的热情关心和指导下完成的,他的丰富知识和严谨的治学作风使我受益匪浅,特别是在网络编程技术、网络数据包捕获和分析设计方面得到了很大的帮助,对顺利完成本课题起到了极大的作用。在此向他表示我最衷心的感谢!

在论文完成过程中,网络技术原理、通信原理和编程调试方面,本人还得到了李飞老师和贺鹏飞、蔡谋理、邓波、沈峰、陈宝献同学的热心帮助,本人向他们表示深深的谢意!

最后向在百忙之中评审本文的各位专家、老师表示衷心的感谢!

作者简介:

姓    名:贺增杰                                  性别:男

出生年月:1983年10月5号                         民族:汉

E-mail:yaoko@126.com

声    明

本论文的工作是 2007年2月至2007年6月在成都信息工程学院网络工程系 完成的。文中除了特别加以标注地方外,不包含他人已经发表或撰写过的研究成果,也不包含为获得成都信息工程学院或其他教学机构的学位或证书而使用过的材料。除非另有说明,本文的工作是原始性工作。

关于学位论文使用权和研究成果知识产权的说明:

本人完全了解成都信息工程学院有关保管使用学位论文的规定,其中包括:

(1)学校有权保管并向有关部门递交学位论文的原件与复印件。

(2)学校可以采用影印、缩印或其他复制方式保存学位论文。

(3)学校可以学术交流为目的复制、赠送和交换学位论文。

(4)学校可允许学位论文被查阅或借阅。

(5)学校可以公布学位论文的全部或部分内容(保密学位论文在解密后遵守此规定)。

除非另有科研合同和其他法律文书的制约,本论文的科研成果属于成都信息工程学院。

特此声明!

                                                 作者签名:    

                                                     年  月  日

附    录

以下是数据存储模块的数据库表字段含义解释。

表1 ether字段表

字段

类型

是否是主键

含义

Destinationmac

Char(15)

目的mac地址

Sourcemac

Char(15)

源mac地址

Type

Char(10)

协议类型

Packetnumber

Bigint

数据包ID

表2 ARP字段表

字段

类型

是否是主键

含义

Packetnumber

Bigint

数据包ID

Hrd

Char(10)

硬件地址类型

Pro

Char(10)

协议地址类型

Hln

Char(10)

硬件地址长度

Plen

Char(10)

协议地址长度

op

Char(10)

ARP操作码

Sha

Char(15)

发送方硬件地址

Spa

Char(10)

发送方协议地址

Tha

Char(15)

目的硬件地址

Tpa

Char(10)

目的协议地址

表3 ICMP字段表

字段

类型

是否是主键

含义

Packetnumber

Bigint

数据包ID

Type

Char(10)

类型

Code

Char(10)

代码

cksum

Char(10)

校验和

表4 IP字段表

字段

类型

是否是主键

含义

Packetnumber

Bigint

数据包ID

Version

Char(10)

版本

Headerlength

Char(10)

首部长度

Tos

Char(10)

TOS

Totallength

Char(10)

总长度

id

Char(10)

ID

Off

Char(10)

片偏移

Ttl

Char(10)

TTL

Protocol

Char(10)

协议

Checksum

Char(10)

校验和

Sourceip

Char(15)

源IP地址

Destinationip

Char(15)

目的IP地址

表5 TCP字段表

字段

类型

是否是主键

含义

Packetnumber

Bigint

数据包ID

Sport

Char(10)

源端口

Dport

Char(10)

目的端口

Seq

Char(15)

序列号

Ack

Char(15)

确认序号

doff

Char(10)

首部长度

Flags

Char(15)

标志位

Win

Char(15)

窗口大小

Cksm

Char(10)

校验和

Urp

Char(10)

紧急指针

表6 UDP字段表

字段

类型

是否是主键

含义

Packetnumber

Bigint

数据包ID

Sport

Char(10)

源端口

Dport

Char(10)

目的端口

Len

Char(10)

长度

cksum

Char(10)

校验和

表7 DHCP字段表

字段

类型

是否是主键

含义

Packetnumber

Bigint

数据包ID

Op

Char(10)

选项

h_addr_t

Char(10)

硬件地址类型

h_addr_l

Char(10)

硬件地址长度

Hops

Char(10)

DHCP客户

xid

Char(10)

随机数

Second

Char(10)

时间

Flag

Char(10)

标志

cli_addr

Char(20)

客户地址

y_addr

Char(20)

本身地址

n_s_addr

Char(20)

下一个服务器IP地址

r_a_addr

Char(20)

代理地址

c_h_addr

Char(20)

客户硬件地址

s_h_name

Char(20)

服务器名称

b_f_name

Char(50)

引导文件名称

Netmask

Char(20)

网络掩码

Timeoffset

Char(10)

偏移

rou_addr

Char(20)

路由地址

dns_addr

Char(20)

DNS地址

Hostname

Char(50)

主机名称

Domainname

Char(50)

域名

Parameter

Char(10)

参数

net_s_addr

Char(20)

名字服务器地址

nodetype`

Char(10)

结点

re_addr

Char(20)

询问IP地址

le_time

Char(10)

租用时间

me_type

Char(10)

消息类型

ser_id_addr

Char(20)

服务ID地址

op_request

Char(20)

DHCP选项

max_msgsize

Char(10)

最大消息

re_time

Char(10)

更新时间

reb_time

Char(10)

重新绑定时间

ven_id

Char(10)

类型ID

cli_id

Char(10)

客户ID

表8 DNS字段表

字段

类型

是否是主键

含义

Packetnumber

Bigint

数据包ID

Id

Char(10)

标识

Flag

Char(10)

标志

Opcode

Char(10)

OP

Auth

Char(10)

授权

truncated

Char(10)

可截断

Req

Char(10)

期望递归

Avail

Char(10)

可用递归

Zero

Char(10)

0

Code

Char(10)

返回码

Question

Char(10)

问题数

ans_rrs

Char(10)

回答数

add_rrs

Char(10)

额外资源记录

query_name

Char(50)

查询名称

query_type

Char(30)

查询类型

query_class

Char(10)

查询分类

server_name

Char(50)

服务器名称

ip_add

Char(30)

IP地址

表9 特征值字段表

字段

类型

是否是主键

含义

Ip

Char(20)

网关IP

Mac

Char(20)

网关MAC

Ip_max

Char(20)

IP峰值

Syn_max

Char(20)

SYN峰值

Fin_max

Char(20)

FIN峰值

  • 13
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

用数据说话用数据决策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值