论文无忧网提供:计算机毕业论文范文|计算机毕业设计|计算机毕业论文
栏目导航 ASP Java Web .NET VB6.0 JAVA VC VF DELPHI PB 计算机网络 计算机科学与技术 PHP 安卓APP 其他 C# 代写论文
当前位置: > 计算机 > 计算机科学与技术 >

局域网监听软件的设计与开发(论文+程序)

2.2.3 本软件的功能要求

对于这个程序,开发人员希望它达到以下几个功能:

内容来自www.paper51.com

(1)能够截取本网段中传输的数据包;

paper51.com

(2)运用不同TCP/IP体系层次的协议解析类,将数据包逐步分解;

paper51.com

(3)将分析结果显示出来(协议字段、数据内容等); http://www.paper51.com

(4)对截获的数据包的数量和大小进行统计(饼状图等); paper51.com

(5)对指定的IP地址进行单独监听; http://www.paper51.com

(6)可以进行界面选择。

copyright paper51.com

2.2.4 本软件功能的扩充 内容来自www.paper51.com

完成了以上功能,只是初步达到了现有阶段的要求,在以后的操作中,可能会遇到许多更为复杂的问题,为此,在设计软件的同时,也应该根据系统的性能来分析将来很可能会提出来的要求,这样做的目的是在设计过程中对系统将来可能的扩充和修改预做准备,以便一旦需要时能比较容易地进行一些扩充和修改。

http://www.paper51.com

本软件虽然能够捕获到本网段的数据,并可以对捕获的数据进行简单的分析,还可以进行指定对象的监听和将结果显示出来等功能,但在实际的运用中,用户肯定会遇到更多的问题,以下是对本软件的扩充性能的一些初步预计:

内容来自论文无忧网 www.paper51.com

(1)自动获取本机和网关的IP和MAC地址; 内容来自论文无忧网 www.paper51.com

(2)监视所有主机的收发邮件记录收发邮件的Email地址、日期、主题等;

copyright paper51.com

(3)对捕获到的数据进一步分析,得到非法数据; copyright paper51.com

(4)可以对局域网内的计算机进行一些简单的操作。

http://www.paper51.com

3 理论基础与相关工具介绍 内容来自www.paper51.com

3.1 网络监听原理介绍 内容来自论文无忧网 www.paper51.com

Ethernet协议(以太网协议)的工作方式是将要发送的数据包发往连接在一起的所有主机。在包头中包括有应该接收数据包的主机的正确地址,因为只有与数据包中目标地址一致的那台主机才能接收到数据包,但是当主机工作在监听模式下,不管数据包中的目标物理地址是什么,主机都将可以接收到。 copyright paper51.com

数据包并不能在协议栈的高层直接发送出去,要发送的数据包必须从TCP/IP协议的IP层交给网络接口,也就是所说的数据链路层。网络接口不会识别IP地址的。因此,在网络接口由IP层传输过来的带有IP地址的数据包将增加了一部分以太帧的帧头的信息。在帧头中,有两个域分别为只有网络接口才能识别的源主机和目的主机的物理地址,这是一个48位的地址,这个48位的地址是与IP地址相对应的,换句话说就是一个IP地址也会对应一个物理地址。 内容来自www.paper51.com

传输数据时,包含物理地址的帧从网络接口(网卡)发送到物理的线路上,如果局域网是由一条粗缆或细缆连接而成,则数字信号在电缆上传输,能够到达线路上的每一台主机。当使用集线器时,由集线器再发向连接在集线器上的每一条线路,数字信号也能到达连接在集线器上的每一台主机。当数字信号到达一台主机的网络接口时,正常情况下,网络接口读入数据帧,进行检查,如果数据帧中携带的物理地址是自己的或者是广播地址,则将数据帧交给上层协议软件,也就是IP层软件,否则就将这个帧丢弃。对于每一个到达网络接口的数据帧,都要进行这个过程。  copyright paper51.com

当连接在同一条电缆或集线器上的主机被逻辑地分为几个子网的时候,那么要是有一台主机处于监听模式,它还将可以接收到发向与自己不在同一个子网(使用了不同的掩码、IP地址和网关)的主机的数据包,在同一个物理信道上传输的所有信息都可以被接收到。  

内容来自www.paper51.com

以太网上的数据帧主要涉及TCP/IP协议,针对以下几个协议的分析:IP,ARP,RARP,IPX,其中重点在于IP和ARP协议,这两个协议是多数网络协议的基础。 内容来自论文无忧网 www.paper51.com

在本软件的监听过程中,将监听到的数据包利用工具和所编写的方法进行逐层分析,并解析出每一层、每一协议、每一字段的数据,从中得到自己想要的信息,最后将其显示出来,并进行动态的更新。

paper51.com

3.2 TCP/IP的层次结构 内容来自论文无忧网 www.paper51.com

3.2.1 OSI 与 TCP/IP体系结构的比较 http://www.paper51.com

OSI(Open System Interconnect)是开放式系统互联,为了解决不同体系结构的网络的互联问题,国际标准化组织ISO于1981年制定了开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM)。OSI把网络通信的工作分为7层,它们由低到高分别是物理层(Physical Layer),数据链路层(Data Link Layer),网络层(NetworkLayer),传输层(Transport Layer),会话层(Session Layer),表示层(Presentation Layer)和应用层(Application Layer)。每层完成一定的功能,每层都直接为其上层提供服务,并且所有层次都互相支持。

paper51.com

TCP/IP协议(TransmissionControl Protocol/Internet Protocol)是传输控制/网际协议,这个协议是Internet国际互联网络的基础。TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为: http://www.paper51.com

(1)应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等;

内容来自www.paper51.com

(2)传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收;

http://www.paper51.com

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

http://www.paper51.com

(4)网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、SerialLine等)来传送数据。 paper51.com

TCP/IP各层的描述如表1所示。

内容来自论文无忧网 www.paper51.com

表1 TCP/IP各层描述

paper51.com

TCP/IP的描述

paper51.com

主要协议

copyright paper51.com

主要功能 paper51.com

应用层 http://www.paper51.com

Http、Telnet、FTP和e-mail等 http://www.paper51.com

负责把数据传输到传输层或接收从传输层返回的数据 copyright paper51.com

传输层

内容来自论文无忧网 www.paper51.com

TCP和UDP http://www.paper51.com

主要为两台主机上的应用程序提供端到端的通信,TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。UDP则为应用层提供一种简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据能到达另一端。 http://www.paper51.com

网络层 copyright paper51.com

ICMP、IP和IGMP 内容来自论文无忧网 www.paper51.com

有时称作互联网层,主要为数据包选择路由,其中IP是TCP/IP协议族中最核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输

内容来自论文无忧网 www.paper51.com

链路层 内容来自www.paper51.com

ARP、RARP和设备驱动程序及接口卡

http://www.paper51.com

发送时将IP包作为帧发送;接收时把接收到的位组装成帧;提供链路管理;错误检测等

copyright paper51.com

OSI模型与TCP/IP协议的区别如下: http://www.paper51.com

(1)TCP/IP一开始就考虑到多种异构网的互联问题,并将网际协议IP作为TCP/IP的重要组成部分。但ISO和CCITT最初只考虑到全世界都使用一种统一的标准公用数据网将各种不同的系统互连在一起。后来,ISO认识到了网际协议IP的重要性,然而已经来不及了,只好在网络层中划分出一个子层来完成类似TCP/IP中的IP的作用; http://www.paper51.com

(2)TCP/IP一开始就对面向连接服务和无连接服务并重,而OSI在开始只强调面向连接这一种服务。一直到很晚OSI才开始制定另一种无连接服务的有关标准;

http://www.paper51.com

(3)TCP/IP较早就有较好的网络管理功能,而OSI到后来才开始考虑这个问题。 内容来自www.paper51.com

OSI 与 TCP/IP体系结构的比较如图2所示。 内容来自论文无忧网 www.paper51.com

内容来自www.paper51.com

图2  OSI 与 TCP/IP体系结构的对比 http://www.paper51.com

3.2.2 TCP/IP 四层协议的表示方法举例

http://www.paper51.com

内容来自论文无忧网 www.paper51.com

图3  TCP/IP 四层协议的表示方法举例

内容来自论文无忧网 www.paper51.com

在许多文献中,也常见到TCP/IP的四层协议的表示方法。例如,在讨论两个主机通过两个网络用路由器连在一起时,可以使用如图3所示的层次关系。图3中的逻辑链路控制和物理层都简化为网络接口层。实际上,现在插在主机中的网络接口板上的硬件和软件就是实现了数据链路层和物理层这两层的功能。应当注意的是,在网络互连中起重要作用的路由器则没有应用层和运输层,其数据链路层和物理层也是在网络接口板上实现的。 copyright paper51.com

3.2.3 使用TCP/IP进行通信的示意图

paper51.com

在TCP/IP的应用层协议使用的是客户-服务器方式。客户(Client)和服务器(Server)都是指通信中所涉及的两个应用进程。客户-服务器方式所描述的是进程之间服务和被服务的关系。当A进程需要B进程的服务时就主动呼叫B进程,在这种情况下,A是客户而B是服务器。这里最重要的特征就是:客户是服务请求方,服务器是服务提供方。

内容来自www.paper51.com

客户与服务器的通信关系一旦建立,通信就可是双向的,客户和服务器都可以发送和接收信息,如图4所示。 内容来自www.paper51.com

内容来自www.paper51.com

图4  客户进程和服务器进程使用TCP/IP协议进行通信

http://www.paper51.com

3.3 Winpcap简介

paper51.com

Winpcap(windowspacket capture)是Windows平台下一个免费,公共的网络访问系统。开发Winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它提供了以下的各项功能: copyright paper51.com

(1)捕获原始数据报,包括在共享网络上各主机发送/接收的以及相互之间交换的数据报;

copyright paper51.com

(2)在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉; 内容来自www.paper51.com

(3)在网络上发送原始的数据报; copyright paper51.com

(4)收集网络通信过程中的统计信息。 内容来自论文无忧网 www.paper51.com

Winpcap的主要功能在于独立于主机协议(如TCP/IP)而发送和接收原始数据报。也就是说,Winpcap不能阻塞、过滤或控制其他应用程序数据报的发收,它仅仅只是监听共享网络上传送的数据报。因此,它不能用于服务质量QoS调度程序或个人防火墙。目前,Winpcap开发的主要对象是Windows NT/2000/XP,这主要是因为在使用Winpcap的用户中只有一小部分使用Windows 95/98/Me,并且微软也已经放弃了对win9x的开发。其实Winpcap中的面向9x系统的概念和NT系统的非常相似,只是在某些实现上有点差异,比如说9x只支持ANSI编码,而NT系统则提倡使用Unicode编码。

copyright paper51.com

Winpcap提供给用户两个不同级别的编程接口:一个基于libpcap的wpcap.dll,另一个是较底层的packet.dll。对于一般的要与UNIX平台上libpcap兼容的开发来说,使用wpcap.dll是当然的选择。下面几个库是与lipcap相关的:libnet1.0.2——数据包的发送构造过程;libnids——实现了ids的一些框架;libicmp——icmp数据包处理。 内容来自www.paper51.com

操作系统拦截数据包的技术有很多,现在很多文章都是介绍编写IM DRIVER阿在NDIS中间层对MINIPORT(网卡驱动程序)和协议驱动程序之间的数据包进行拦截。这是微软提供的一种技术但编写该过滤程序拦截程序非常地复杂,安装也很麻烦。 copyright paper51.com

现在简单的介绍基于NDIS包拦截技术。NDIS协议驱动程序是通过填写一张NDIS_PROTOCOL_CHARACTERISTICS的表,并调用NDIS API函数NdisRegisterProtocol进行注册。现在来关注一下NDIS_PROTOCOL_CHARACTERISTICS这张表,这张表中存有所有协议驱动程序与底层的派发函数的入口。如BindAdapterHandler,SendHandler, ReceiveHandler等,当网卡有数据包进入时,会通过表中ReceiveHandle或ReceivePacketHandler通知协议驱动程序有一个该协议的数据包进入,反之协议驱动程序是通过Send Handler或SendPacketsHandler函数向网卡驱动发送数据包到网络上去的。虽然在程序中是调用NdisSend或NdisSendPackets函数发送,但是通过查看NDIS.H的头文件里对这两个函数的定义就知道了,它们都是一个宏定义,实际还是通过这表中Send Handler或SendPacketsHandler发送的。现在要做的事情应该很清楚了,只要能够将每一个协议程序所填写的NDIS_PROTOCOL_CHARACTERISTICS表里的派发函数指向自己的函数,就能成功的对数据包进行拦截。

内容来自www.paper51.com

Winpcap也是用NDIS(Windows的通信协议程序(比如TCP/IP)和网络设备驱动器之间通信的规范)的,将自己注册为一个协议处理驱动。Winpcap的使用非常方便,但是它有一个致命的缺陷就是只适用于共享式以太网络,对于交换式网络下的数据则无能为力。经过测试,在使用交换机连接的局域网下,Winpcap只能监听到本网段内的数据,而对于来自其他网段的数据则无法监听,除非你把probe接到交换机之前或者接到交换机的console口上,不过那样的弊端是显而易见的,所以,Winpcap的应用还是有局限性的。

copyright paper51.com

3.4 Jpcap简介 内容来自www.paper51.com

由于核心JavaAPI不能直接访问网络底层,因此需要借助一种工具来为Java和网络底层提供一个桥梁。Jpcap就是一种提供在Windows或UNIX系统上进行网络底层访问的Java API。Jpcap不是一种纯粹的Java解决方案,它依赖本地库的使用。在Windows 或 UNIX上,用户必须有必要的第三方库,分别是WinPcap或libpcap。

copyright paper51.com

Jpcap的工作原理是使用一个事件模型让你对数据包进行处理。首先必须创建一个执行接口jpcap.JpcapHandler的类: copyright paper51.com

publicclass JpcapTip implements JpcapHandler { paper51.com

    public void handlePacket(Packetpacket){

http://www.paper51.com

        System.out.println(packet); copyright paper51.com

    } 内容来自论文无忧网 www.paper51.com

 }

http://www.paper51.com

为了捕获包,用户需要告诉Jpcap想用哪个网络设备来监听。API提供了jpcap.Jpcap.getDeviceList()方法以满足这一目的。这个方法返回一列字符串,用户可以像如下的方法使用它:

内容来自www.paper51.com

String[]devices = Jpcap.getDeviceList();

http://www.paper51.com

一旦用户有了一个设备名称的目录,用户必须选取一个用来监听:

copyright paper51.com

StringdeviceName = devices[0];

http://www.paper51.com

选择一个设备之后,通过Jpcap.openDevice()方法打开它。openDevice()方法需要四个参数:即将打开的设备名,从设备上一次读取的最大字节数,说明是否将设备设为混杂模式(可以接受任意的包)的Boolean值和以后调用processPacket()方法要使用到的超时值。 paper51.com

Jpcapjpcap= Jpcap.openDevice(deviceName,1028, false, 10000);

copyright paper51.com

openDevice()方法将一个参数返回到用以捕获的Jpcap对象。既然有了Jpcap实例,可以调用processPacket()或loopPacket()开始监听了。这两种方式都带有两个参数:捕获的最大包数可以是−1(说明没有限制);执行JpcapHandler的一个类的实例。 copyright paper51.com

如果调用processPacket(),那么Jpcap将一直捕获包,直到超过openDevice中规定的时限或达到了规定的最大包数;loopPacket()则将一直捕获包,直到达到最大包数,如果没有最大数限制,它将永远运行下去。就像下面这样调用: 内容来自论文无忧网 www.paper51.com

jpcap.loopPacket(-1, new JpcapTip());

copyright paper51.com

为了执行可用类,必须确保虚拟机可以找到Jpcap的本地库。在Windows上,如果jpcap.dll在库地址目录中,Java命令如下: 内容来自论文无忧网 www.paper51.com

java-Djava.library.path=lib -cp lib\jpcap.jar;. JpcapTip

http://www.paper51.com

运用Jpcap将会使开发人员在利用Java开发网络程序的时候,不必过多关注与底层网络的接口复杂的连接细节,而注重在对Jpcap简单而强大接口的使用以及程序界面和功能。 内容来自www.paper51.com

4 设计思路 paper51.com

4.1 设计框架图 http://www.paper51.com

经过对Winpcap和Jpcap的了解,知道了如何截获数据包并进行处理,现在就要编写代码,将这些步骤嵌入到一个框架中,将数据包的处理结果显示出来,根据本软件所要实现的功能,本设计所需要实现的类结构如图5所示。 paper51.com

copyright paper51.com

图5 类结构

内容来自www.paper51.com

4.2 设计步骤

copyright paper51.com

4.2.1 整体规划 paper51.com

现在对程序进行如下设计:

内容来自www.paper51.com

(1)使用Eclipse 3.2开发的基于J2SESwing的图形用户界面程序; 内容来自www.paper51.com

(2)允许多个窗口同时运行,因此用向量来存储已创建的窗口。为了使各个窗口间的监听不相互干扰,因此为每一个监听过程都开辟一个新的线程,在线程中完成从截获数据包到分析数据包到最后将结果显示出来的全部过程。

内容来自www.paper51.com

(3)将所有截获的数据包用向量存储,当然定义了数量上限。预计监听结果的显示如下:使用JTable组件显示每条分析完后的数据包,并进行动态更的新;若选中表格中的某一条记录时,则在JTree组件中将它所具有的全部协议显示出来,父结点为协议名,子结点为协议字段名,叶子结点为字段取值,同时将数据包的内容转换为字符串显示在JTextArea组件中。

内容来自论文无忧网 www.paper51.com

4.2.2 程序运行流程 http://www.paper51.com

(1)程序的开始 copyright paper51.com

程序主类为JSniffer,整个程序由此类中的main()函数进入,进行初始化,出现主界面,即JDFrame类的实例,然后等待主界面中的事件响应。 内容来自论文无忧网 www.paper51.com

(2)准备监听 内容来自论文无忧网 www.paper51.com

当主界面中执行开始监听事件时,创建JDCaptor类实例,这个类实际上就是数据包截获器。JDCaptor类首先调用JDCaptureDialog类,这是一个选择设备对话框,在JDCaptureDialog中使用Jpcap.getDeviceList()和Jpcap.getDeviceDescription()获取设备,根据界面选择设备,然后使用openDevice函数打开设备,返回Jpcap对象给调用它的JDCaptor实体。 http://www.paper51.com

(3)截获数据包 copyright paper51.com

JDCaptor类开启一条线程,用来进行截获数据包处理。在此线程中使用刚才得到的Jpcap对象的processPacket()函数截获数据包。

http://www.paper51.com

(4)分析数据包 paper51.com

使用Jpcap类的包处理接口JpcapHandler handlePacket()进行截获的数据包的初步处理,每截获一个数据包都放入数据包向量packets中,则packets中存放的就是一次监听过程中所监听到的所有数据包。然后将packets传递给analyzer包中的所有类,即每截获一个数据包,就用所有已经定义的协议进行分析。 copyright paper51.com

(5)分析结果显示

paper51.com

使用JTable控件来显示截获的数据包进过分析后的信息,每分析完一条,显示一条,至于显示哪些信息,由菜单中的“协议查看”下面的选项来决定。当执行选择table中某一行的事件时,用tree控件来显示此数据包对应于各层的协议,并用textarea控件将此数据包的内容转换为字符串完整的显示。 copyright paper51.com

(6)流量统计 copyright paper51.com

使用向量来存储每一个协议的所有的数据包,每分析完一个数据包后,在它所包含的协议的向量中加一。然后绘制每一层协议的饼状图,饼状图动态更新。

内容来自www.paper51.com

(7)数据更新 内容来自www.paper51.com

使用Timer类的start(),setRepeats()来进行动态更新,并通过此类中的事件响应来进行更新时的操作,即提示表格更新。 copyright paper51.com

(8)指定对象监听 copyright paper51.com

指定对象监听就是使用JSourceDialog来得到指定监听的主机的IP地址,监听内容是源IP为指定IP的数据包,如果符合条件则处理,不符合则丢弃。这个过滤处理在分析数据包JpcapHandler handlePacket()中完成。

内容来自www.paper51.com

5 具体实现步骤 paper51.com

5.1使用Eclipse 3.2创建项目 copyright paper51.com

5.1.1 创建项目

内容来自论文无忧网 www.paper51.com

使用Eclipse3.2创建JSniffer工程。单击“文件->新建->项目”,在弹出的“新建项目”对话框中选择Java项目,在项目名中填写项目名为“JSniffer”,如图6所示。

内容来自论文无忧网 www.paper51.com

内容来自论文无忧网 www.paper51.com

图6  创建项目对话框

内容来自www.paper51.com

5.1.2 创建包 http://www.paper51.com

在项目“JSniffer”上单击右键,选择“新建->包”,在弹出的“新建Java包”对话框中填写包名为“analyzer”,在以后的编写过程中,还需创建“stat”、“ui”、“graph”包,在这就不依依介绍了,创建过程类同“analyzer”包的创建,如图7所示。 paper51.com

内容来自论文无忧网 www.paper51.com

图7  创建包对话框 copyright paper51.com

5.1.3 创建类 内容来自论文无忧网 www.paper51.com

在包“analyzer”上单击右键,选择“新建->类”,在弹出的“新建Java类”对话框中填写类名称,如图8所示。

paper51.com

copyright paper51.com

图8  创建类对话框

copyright paper51.com

5.2 analyzer包的设计 paper51.com

5.2.1 analyzer包的作用

内容来自论文无忧网 www.paper51.com

analyzer包的作用是根据不同协议的结构格式设计相应的数据包解析类,然后对于传送给解析类的数据包进行相应协议结构的解析,即分析出协议中各个字段的内容。

copyright paper51.com

在本程序中预计对8个协议进行解析,为此需要定义8个解析类再加上一个用于返回截获数据包信息(如截获时间,大小等)的类。 http://www.paper51.com

协议与类的对应关系如表2所示。 内容来自www.paper51.com

表2  协议与类的对应关系

内容来自论文无忧网 www.paper51.com

TCP/IP体系层次 http://www.paper51.com

协  议  名 copyright paper51.com

数据包解析类名

内容来自论文无忧网 www.paper51.com

主机网络层

http://www.paper51.com

Ethernet Frame

copyright paper51.com

EthernetAnalyzer

内容来自论文无忧网 www.paper51.com

互联层 copyright paper51.com

IPv4 内容来自www.paper51.com

IPv4Analyer

copyright paper51.com

IPv6

内容来自论文无忧网 www.paper51.com

IPv6Analyzer 内容来自论文无忧网 www.paper51.com

ARP paper51.com

ARPAnalyzer

内容来自论文无忧网 www.paper51.com

ICMP 内容来自www.paper51.com

ICMPAnalyzer

内容来自论文无忧网 www.paper51.com

传输层

paper51.com

TCP

paper51.com

TCPAnalyzer 内容来自论文无忧网 www.paper51.com

UDP

http://www.paper51.com

UDPAnalyzer

内容来自www.paper51.com

应用层 http://www.paper51.com

HTTP

paper51.com

HTTPAnalyzer 内容来自论文无忧网 www.paper51.com

返回类 内容来自www.paper51.com

显示数据包被截获相关信息 copyright paper51.com

PacketAnalyzer 内容来自www.paper51.com

------分隔线----------------------------
联系方式