毕业论文 系统分析及设计报告.docx
- 文档编号:15928597
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:19
- 大小:361.86KB
毕业论文 系统分析及设计报告.docx
《毕业论文 系统分析及设计报告.docx》由会员分享,可在线阅读,更多相关《毕业论文 系统分析及设计报告.docx(19页珍藏版)》请在冰点文库上搜索。
毕业论文系统分析及设计报告
ARP包解析软件的设计与实现系统分析及设计报告
1.系统分析
随着网络技术的飞速发展和网络时代的到来,互联网的影响己经渗透到国民经济的各个领域和人民生活的各个方面,全社会对网络的依赖程度越来越大,整个世界通过网络正在迅速地融为一体,但由于计算机网络具有联结形式多样性、终端分布不均匀性和网络的开放性、互联性等特征,致使网络易受黑客、恶意软件和其他不轨的攻击。
广义来说,凡是涉及到网络上信息的保密性、完整性、可用性、真实性和可控性的相关技术和理论都是网络安全所要研究的领域。
网络安全涉及的内容既有技术方面的问题,也有管理方面的问题,两方面相互补充,缺一不可。
技术方面主要侧重于防范外部非法用户的攻击,管理方面则侧重于内部人为因素的管理。
如何更有效地保护重要的信息数据、提高计算机网络系统的安全性已经成为所有计算机网络应用必须考虑和必须解决的一个重要问题。
可以这样来定义网络数据安全:
所谓网络数据安全,指的是网络系统的硬件、软件和数据信息能够受到保护,不会因为偶然或恶意的原因而遭到破坏、更改、泄露,同时系统能够连续、可靠地运行,网络服务不被中断。
但在现实中,绝对安全的网络是没有的。
据IT界企业团体ITAA的调查显示,美国80%的IT企业对黑客攻击准备不足。
目前美国75%一85%的网站都抵挡不住黑客的攻击,约有75%的企业网上信息失窃,其中25%的企业损失在25万美元以上。
因此了解网络面临的各种威胁,防范和消除这些威胁,实现真正的网络安全己经成了网络发展中最重要的事情。
网络互连一般采用TCP/IP协议,而TCP/IP协议是一个工业标准的协议簇,在该协议簇制订之初,没有过多考虑其安全性,所以协议中存在很多的安全漏洞,致使网络极易受到黑客的攻击。
ARP协议作为TCP/IP协议簇中的一员,同样也存在着安全漏洞,利用ARP协议漏洞进行网络监听是黑客的攻击手段之一。
因此有必要了解黑客的这种攻击手段,并提高自己的安全意识,积极采取有效的安全策略来保障网络的安全性。
由于ARP协议是无状态的,主机可以随时发出请求,而且在没有请求的时候也可以作出应答,所以ARP协议是网络攻击者最偏向于利用的网络底层协议。
通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,还可以对局域网上的机器进行攻击,甚至使整个局域网陷于瘫痪。
ARP包解析软件就是通过封装发送一个ARP数据包来获得以知IP地址所对应的MAC地址,还可以捕获和分析ARP数据包从而了解网络运行状况。
所以深入研究ARP数据包的封装、发送、捕获与解析对网络管理具有重要意义。
本文主要对ARP的原理,ARP包的封装、发送、捕获与解析的工作原理经行了详细的说明。
讨论了ARP包的封装和捕获技术在Windows下的实现,并主要论述了如何在Win32环境中利用Winpcap开发包开发ARP包的封装发送、捕获与解析程序,并给出了具体的设计与实现方法。
1.1相关理论与技术概述
1.1.1ARP协议概述
ARP(AddressResolutionProtocol,地址解析协议)它工作在数据链路层,在本层和硬件接口联系,同时对上层提供服务。
IP数据包常通过以太网发送,以太网设备并不识别32位IP地址,它们是以48位以太网地址传输以太网数据包。
因此,必须把IP目的地址转换成以太网目的地址。
在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。
但这个目标MAC地址是如何获得的呢?
它就是通过地址解析协议获得的。
ARP协议用于将网络中的IP地址解析为的硬件地址(MAC地址),以保证通信的顺利进行。
1.1.1.1ARP报头结构
ARP的报头结构,如图1.1所示。
图1.1 ARP/RARP报头结构
硬件类型字段:
指明了发送方想知道的硬件接口类型,以太网的值为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地址。
1.1.1.2ARP的工作原理
ARP的工作原理如下:
1.首先,每台主机都会在自己的ARP缓冲区(ARPCache)中建立一个ARP列表,以表示IP地址和MAC地址的对应关系。
2.当源主机需要将一个数据包要发送到目的主机时,会首先检查自己ARP列表中是否存在该IP地址对应的MAC地址,如果有﹐就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。
此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。
3.网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。
如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址;
4.源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。
如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
1.1.2ARP工作原理实例
设主机A(IP地址:
192.168.1.1,MAC地址(网卡地址):
111111111111)和B(IP地址:
192.168.1.2,MAC地址(网卡地址):
222222222222),当主机A想与主机B进行通讯时,A只知道B的IP地址是192.168.1.2,当数据包封装到MAC层时他如何知道B的MAC地址呢,一般的OS中是这样做的,在OS的内存中保存有一份MAC地址表(如下图1.2用命令arp-a可以看见这个表的内容),表中有IP和MAC地址的对应关系,当要过进行数据通讯时,系统先查看这个表中是否有相关的表项,如果有就直接使用,如果没有系统就会发出一个ARP请求包,这个包是目的地址为fffffffff的广播地址,他的作用就是询问局域网内IP地址为192.168.1.2的主机的MAC地址,就像是A在局域网中喊”我在找一个IP地址为192.168.1.2的主机,你的MAC地址是多少,听到了请回话!
,我的MAC地址是111111111111”,随后所有主机都会接收到这个ARP请求数据包,但只有IP为192.168.1.2的B才会响应一个ARP应答包给主机A,他说”我就是IP地址为192.168.1.2的主机,我的MAC地址是222222222222“这样主机A就知道B的MAC地址了,于时他就可以封包发送了,同时主机A将B的MAC地址放入ARP缓冲中,隔一定时间就将其删除,确保不断更新。
图1.2ARP缓存表
1.1.3网络数据包捕获原理
以太网(Ethernet)具有共享介质的特征,信息是以明文的形式在网络上传输,当网络适配器设置为监听模式(混杂模式,Promiscuous)时,由于采用以太网广播信道争用的方式,使得监听系统与正常通信的网络能够并联连接,并可以捕获任何一个在同一冲突域上传输的数据包。
IEEE802.3标准的以太网采用的是持续CSMA的方式,正是由于以太网采用这种广播信道争用的方式,使得各个站点可以获得其他站点发送的数据。
运用这一原理使信息捕获系统能够拦截的我们所要的信息,这是捕获数据包的物理基础。
以太网是一种总线型的网络,从逻辑上来看是由一条总线和多个连接在总线上的站点所组成各个站点采用上面提到的CSMA/CD协议进行信道的争用和共享。
每个站点(这里特指计算机通过的接口卡)网卡来实现这种功能。
网卡主要的工作是完成对于总线当前状态的探测,确定是否进行数据的传送,判断每个物理数据帧目的地是否为本站地址,如果不匹配,则说明不是发送到本站的而将它丢弃。
如果是的话,接收该数据帧,进行物理数据帧的CRC校验,然后将数据帧提交给LLC子层。
网卡具有如下的几种工作模式:
1.广播模式(BroadCastModel):
它的物理地址(MAC)地址是0Xffffff的帧为广播帧,工作在广播模式的网卡接收广播帧。
2.多播传送(MultiCastModel):
多播传送地址作为目的物理地址的帧可以被组内的其它主机同时接收,而组外主机却接收不到。
但是,如果将网卡设置为多播传送模式,它可以接收所有的多播传送帧,而不论它是不是组内成员。
3.接模式(DirectModel):
工作在直接模式下的网卡只接收目地址是自己Mac地址的帧。
4.混杂模式(PromiscuousModel):
工作在混杂模式下的网卡接收所有的流过网卡的帧,信包捕获程序就是在这种模式下运行的。
网卡的缺省工作模式包含广播模式和直接模式,即它只接收广播帧和发给自己的帧。
如果采用混杂模式,一个站点的网卡将接受同一网络内所有站点所发送的数据包这样就可以到达对于网络信息监视捕获的目的。
2.数据包捕获机制
数据包捕获机制大体可分为两类,一类是由操作系统内核提供的捕获机制,主要有:
BSD(BERKELEYPACKETFILTER)系统中的BPF机制,SVR4中的DLPI(DATALINKPROVIDERINTERFACE)和LINUX中的SOCK_PACKET类型套接字;另一类由应用软件或系统开发包通过安装包捕获驱动程序提供的捕获机制,这一类要用于WIN32平台下的开发,
WINPCAP(WINDOWSPACKETCAPTURE)就是这类的驱动开发包,开发WINPCAP的目的就是为了补充WINDOWS中未内置于操作系统中的分组捕获机制,为WIN32应用程序提供访问网络底层的能力。
2.1SOCK_PACKET类型套接字
LINUX系统提SOCK_PACKET来访问数据链路层,使用SOCKET.它使得用户进程可以直接从数据链路层取得数据包。
由于没有系统内核缓冲区及系统内核过滤器,这就意味着大量的数据包要拷贝到用户空间后再做处理,效率较低。
2.2DLPI(数据链路供应接口DATALINKPROVISIONINTERFACE)
UNIXSVR4系统提供DLPI来访问数据链路层。
这是一个独立于协议的接口,它使得数据链路服务的使用者能够直接访问数据链路层,如获取数据链路层的状态、接收和发送数据链路层的原始帧,而不需要知道数据链路层本身的协议。
DLPI定义了一组在数据链路服务的使用者和提供者之间进行交互所需的流消息集合、状态表以及相应的约定。
DLPI定义了数据链路服务的使用者和提供者之间交换的原语的集合以及原语的使用规则。
主要有2个分:
PFMOD一主要用于在数据流进入用户空间之前进行过滤;BUFMOD一用于缓存数据包。
与LINUX系统提供的SOCKPACKET不同,DLPI的优点在于它的过滤机制在系统核心进行,减少了系统核心空间与用户空间数据的拷贝引发的开销。
DLPI的过滤机制用布尔表达树(BOOLEANEXPRESSIONTREE)来描述。
2.3BSD包捕获结构
BSD的包捕获过滤系统由三部分构成:
BPF,NETWORKTAP和LIBPCAP.
BSD包捕获结构如图2.1所示:
图2.1BSD包捕获结构图
BPF是内核层的包捕获部分。
通常网卡驱动程序接收到一个数据包后,将其提交给系统的协议栈。
如果有进程用BPF进行侦听,网卡驱动会先调用BPF,复制一份给BPF的过滤器,过滤器则根据用户定义的规则决定是否接收此数据包。
再判断这个数据包是否是发给本机的,如果不是发给本机的,则网卡驱动程序从中断返回,继续接收数据;如果这个数据包是发给本机的,驱动程序会再把它提交给系统的协议栈,然后返回。
BPF通过网络接口的驱动与网卡交互,被看成是一个驱动。
BPF有2个主要部件:
网络包监视(NETWORKTAP)和网络包过滤(PACKETFILTER)。
网络包监视从网络设备驱动程序中搜索数据拷贝并转发给过滤器复制数据包的;过滤器决定是否接收该数据包,以及接收或复制数据包的哪些部分。
BPF利用一个过滤器和两个缓冲器来截获分组。
过滤器由应用程序创建,通过IOCTL调用传递给BPF,缓冲器BUFFER的大小通常是4K。
第一个BUFFER用来从网卡接收数据,被称为存储缓存(STOREBUFFER)第二个BUFFER用来拷贝数据给应用程序,称为保持缓存(HOKDBUFFER)。
当STOREBUFFER为满而HOKDBUFFER为空时,BPF交换这两个缓存,这样的缓冲区设计使用户程序不需与网卡驱动程序交互,当用户读HOKDBUFFER是网卡驱动写的是STOREBUFFER。
用户缓冲区用来存储从核心发过来的,并且由于在用户级别上,他可以防止应用程序直接访问由核心管理的内存。
NERWORKTAP实际上是BPF的一部分,它是一个函数,它控制所有通过网卡的数据包,并将去从设备驱动中搜索拷贝并转发到应用程序。
LIBPCAP:
从程序员的角度,LIBPCAP是一个主要部分,因为它隐藏了应用进程与操作系统内核之间的交互。
LIBPCAP输出一套能与用户进程交互的函数,为捕获进程提供了功能强大的接口。
它包括过滤器的生成、用户缓冲区的管理、用户和内核模式的交互等。
2.4IMD中间层驱动编程模式:
中间层驱动(NDISintermediatedriver)内核级网络驱动介绍:
MicrosoftWindows2000支持三种基本的内核级网络驱动,这三层driver顺序从下到上依次为:
MiniportNICdrivers:
微端口网卡驱动,位于最底层,直接操纵网卡并且对高层驱动提供接口。
Intermediatedrivers:
IMD中间层驱动位于1和3之间。
Protocoldrivers:
高层协议驱动,俗称为TDI(传输驱动程序接口),高于前面两层,直接面向用户级,为用户提供网络服务,也就是绝大多数程序所用到的网络接口。
IMD驱动:
IMD中间层,它的实质很简单,即:
中间层插入网卡和协议层之间,对上面的协议层表现为一个虚拟的微端口网卡结构,而对下面的网卡则表现为一个协议层的结构。
所以,无论是网卡接收并上传的数据报,还是上层要下送至网卡发送的数据报,无一例外地要经过中间层。
IMD包过滤技术:
前面我们已经看到,所有的数据报都要经过中间层,所以,我们可以在中间层加入我们想要过滤的数据报的特征,实现基于中间层驱动的内核级包过滤。
优势:
首先,在驱动级别上做过滤,无须组包,速度快,效率自然就高;其次,所有的数据报无一例外,只要网卡上传的数据报均可以截获,避免了用户级无法得到所有数据报的缺点。
缺点:
IMD包过滤技术也存在其不可避免的缺点,与操作系统版本关系密切,与硬件联系大,可移植性低,调试困难。
2.5Winpcap编程模式
WinPcap是由伯克利分组捕获库派生而来的分组捕获库,它是在Windows操作平台上来实现对底层包的截取过滤。
WinPcap为用户级的数据包提供了Windows下的一个平台。
大多数网络应用程序通过被广泛使用的操作系统元件来访问网络,比如sockets。
这是一种简单的实现方式,因为操作系统已经妥善处理了底层具体实现细节(比如协议处理,封装数据包等等),并且提供了一个与读写文件类似的,令人熟悉的接口。
然而,有些时候,这种“简单的方式”并不能满足任务的需求,因为有些应用程序需要直接访问网络中的数据包。
也就是说,那些应用程序需要访问原始数据包,即没有被操作系统利用网络协议处理过的数据包。
WinPcap产生的目的,就是为Win32应用程序提供这种访问方式;WinPcap提供了以下功能:
1.捕获原始数据包,无论它是发往某台机器的,还是在其他设备(共享媒介)上进行交换的。
2.在数据包发送给某应用程序前,根据用户指定的规则过滤数据包。
3.方便的把捕获的数据包输出到文件和从文件输入。
4.将原始数据包通过网络发送出去。
5.收集并统计网络流量信息。
以上这些功能需要借助安装在Win32内核中的网络设备驱动程序才能实现,再加上几个动态链接库DLL。
所有这些功能都能通过一个强大的编程接口来表现出来,易于开发,并能在不同的操作系统上使用。
缺点:
Winpcap的主要功能在于独立于主机协议(如TCP-IP)而发送和接收原始数据报。
也就是说,Winpcap不能阻塞,过滤或控制其他应用程序数据报的发收,它仅仅只是监听共享网络上传送的数据报。
因此,它不能用于QoS调度程序或个人防火墙。
2.6选用Winpcap技术的原因:
Winpcap提供了一套标准的抓包接口,与libpcap兼容,可使得原来许多UNIX平台下的网络分析工具快速移植过来便于开发各种网络分析工具原始套接字的编程模式中不能捕获ARP和IPX的数据包对SNIFFER软件有着致命的限制,所以不能选择这种方法。
IMD编程模式虽然功能强大,而且灵活性强,但是开发调试难度比较大,不适合作为SNIFFER软件的开发模式,甚至在防火墙开发技术中也不用IMD。
WINPCAP本身不能阻塞,过滤或控制其他应用程序数据报的发收的缺点在我们这个软件的开发过程中,并不影响。
所以经过权衡,我选用了Winpcap编程模式来开发ARP包解析软件。
2.7Winpcap的结构分析
Winpcap的主要思想来源于Unix系统中著名的BSD包捕获结构,它的基本结构如图2.1所示:
整个包捕获框架的基础是NDIS(网络驱动器接口规范),它是Windows中最低端的与联网有关的软件,主要是为各种应用协议与网卡之间提供的一套接口函数。
Winpcap由三个模块组成,一个是工作在内核级别上的NPF包过滤器;另外两个是用户级的动态连接库packet.dll和wpcap.dll。
wpcap.dll是packet.dll的上一层封装,提供了编程的高级接口。
为了能更好的了解Winpcap的工作原理,我选用了packet.dll作为程序对底层访问的接口。
因为基于Winpcap开发涉及到驱动程序开发技术,dll动态连接库开发技术,和vc的MFC应用程序开发技术,所以将对它们做一些介绍。
图2.1Winpc体系结构图
2.7.1Winpcap的各个组成部分:
图2.2表明了Winpcap的各个组成部分。
首先,抓包系统必须绕过操作系统的协议栈来访问在网络上传输的原始数据包(rawpacket),这就要求一部分运行在操作系统核心内部,直接与网络接口驱动交互。
这个部分是系统依赖(systemdependent)的,在Winpcap的解决方案里它被认为是一个设备驱动,称作NPF(NetgroupPacketFilter)。
Winpcap开发小组针对Windows95,Windows98,WindowsME,WindowsNT4,Windows2000和WindowsXP提供了不同版本的驱动。
这些驱动不仅提供了基本的特性(例如抓包和injection),还有更高级的特性(例如可编程的过滤器系统和监视引擎)。
前者可以被用来约束一个抓包会话只针对网络通信中的一个子集(例如,仅仅捕获特殊主机产生的ARP数据包),后者提供了一个强大而简单的统计网络通信量的机制(例如,获得网络负载或两个主机间的数据交换量)。
其次,抓包系统必须有用户级的程序接口,通过这些接口,用户程序可以利用内核驱动提供的高级特性。
Winpcap提供了两个不同的库:
packet.dll和wpcap.dll。
前者提供了一个底层API,伴随着一个独立于Microsoft操作系统的编程接口,这些API可以直接用来访问驱动的函数;后者导出了一组更强大的与libpcap一致的高层抓包函数库(captureprimitives)。
这些函数使得数据包的捕获以一种与网络硬件和操作系统无关的方式进行。
图2.2Winpcap的各个组成部分
2.7.2NDIS驱动开发技术和NPF驱动
2.7.2.1NDIS驱动
NDIS(NetworkDriverInterfaceSpecification)是一个定义网络适配器(或者说成是管理网络适配器的驱动程序)与协议驱动(例如TCP/IP的实现)之间通信的规范。
NDIS最主要的目的是作为一个允许协议驱动发送和接收网络(LAN或WAN)上的数据包而不必关心特定的适配器或特定的Win32操作系统的封装。
NDIS支持三种类型的网络驱动。
网络接口卡或NIC驱动(NetworkinterfacecardorNICdrivers)。
NIC驱动直接管理着网络接口卡(NIC)。
NIC驱动接下边与硬件连接,从上边表现为一个接口,该接口允许高层发送数据包到网络上,处理中断,重置NIC,停止NIC,查询和设置驱动的运行特征。
NIC驱动可以是小端口(miniport)或完全的NIC驱动(fullNICdriver)。
Miniport驱动仅仅实现了管理NIC的必要操作,包括在NIC上发送和接收数据。
对于所有最底层的NIC驱动的操作由NDIS提供,例如同步(synchronization)。
小端口(miniport)不直接调用操作系统函数,它们对于操作系统的接口是NDIS。
小端口仅仅是向上传递数据包给NDIS并且NDIS确保这些数据包被传递给正确的协议。
1.完全NIC驱动(FullNICdriver)完成硬件细节的操作和所有由NDIS完成的同步和查询操作。
例如,完全NIC驱动维持接收到的数据的绑定信息。
2.中间层驱动(Intermediatedrivers)中间层驱动位于高层驱动(例如协议驱动)和小端口之间。
对于高层驱动,中间层驱动看起来像是小端口;对于小端口,中间层驱动看起来像协议驱动。
一个中间层协议驱动可以位于另一个中间层驱动之上,尽管这种分层可能对系统性能带来负面影响。
开发中间层驱动的一个关键原因是在现存的遗留协议驱动(legacyprotocoldriver)和小端口之间形成媒体的转化。
例如,中间层驱动可以将LAN协议转换成ATM协议。
中间层驱动不能与用户模式的应用程序通信,但可以与其他的NDIS驱动通信。
3.传输驱动或协议驱动(Transportdriversorprotocoldrivers)协议驱动实现了网络协议栈,例如IPX/SPX或TCP/IP,在一个或多个网络接口卡上提供它的服务。
在协议驱动的上面,它为应用层客户程序服务;在它的下面,它与一个或多个NIC驱动或中间层NDIS驱动连接。
2.7.2.2NPF驱动
网络数据包过滤器(NetgroupPacketFilter,NPF)是Winpcap的核心部分,它是Winpcap完成困难工作的组件。
它处理网络上传输的数据包,并且对用户级提供可捕获(capture)、发送(injection)和分析性能(analysiscapabilities)。
NPF是一个协议驱动。
从性能方面来看
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业论文 系统分析及设计报告 系统分析 设计 报告