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.1 ARP协议概述ARP(Address Resolution Protocol,地址解析协议)它工作在数据链路层,在本层和硬件接口联系,同时对上层提供服务。
IP数据包常通过以太网发送,以太网设备并不识别32位IP地址,它们是以48位以太网地址传输以太网数据包。
因此,必须把IP目的地址转换成以太网目的地址。
在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。
但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。
ARP协议用于将网络中的IP地址解析为的硬件地址(MAC地址),以保证通信的顺利进行。
1.1.1.1 ARP报头结构ARP的报头结构,如图1.1所示。
图1.1ARP/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.2 ARP的工作原理ARP的工作原理如下:1. 首先,每台主机都会在自己的ARP缓冲区(ARP Cache)中建立一个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.2 ARP工作原理实例设主机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.2 ARP缓存表1.1.3 网络数据包捕获原理以太网(Ethernet)具有共享介质的特征,信息是以明文的形式在网络上传输,当网络适配器设置为监听模式(混杂模式,Promiscuous)时,由于采用以太网广播信道争用的方式,使得监听系统与正常通信的网络能够并联连接,并可以捕获任何一个在同一冲突域上传输的数据包。
IEEE802.3 标准的以太网采用的是持续 CSMA 的方式,正是由于以太网采用这种广播信道争用的方式,使得各个站点可以获得其他站点发送的数据。
运用这一原理使信息捕获系统能够拦截的我们所要的信息,这是捕获数据包的物理基础。
以太网是一种总线型的网络,从逻辑上来看是由一条总线和多个连接在总线上的站点所组成各个站点采用上面提到的 CSMA/CD 协议进行信道的争用和共享。
每个站点(这里特指计算机通过的接口卡)网卡来实现这种功能。
网卡主要的工作是完成对于总线当前状态的探测,确定是否进行数据的传送,判断每个物理数据帧目的地是否为本站地址,如果不匹配,则说明不是发送到本站的而将它丢弃。
如果是的话,接收该数据帧,进行物理数据帧的 CRC 校验,然后将数据帧提交给LLC 子层。
网卡具有如下的几种工作模式:1. 广播模式(Broad Cast Model):它的物理地址(MAC)地址是 0Xffffff的帧为广播帧,工作在广播模式的网卡接收广播帧。
2.多播传送(MultiCast Model):多播传送地址作为目的物理地址的帧可以被组内的其它主机同时接收,而组外主机却接收不到。
但是,如果将网卡设置为多播传送模式,它可以接收所有的多播传送帧,而不论它是不是组内成员。
3.接模式(Direct Model):工作在直接模式下的网卡只接收目地址是自己 Mac地址的帧。
4.混杂模式(Promiscuous Model):工作在混杂模式下的网卡接收所有的流过网卡的帧,信包捕获程序就是在这种模式下运行的。
网卡的缺省工作模式包含广播模式和直接模式,即它只接收广播帧和发给自己的帧。
如果采用混杂模式,一个站点的网卡将接受同一网络内所有站点所发送的数据包这样就可以到达对于网络信息监视捕获的目的。
2.数据包捕获机制数据包捕获机制大体可分为两类,一类是由操作系统内核提供的捕获机制,主要有:BSD (BERKELEYPACKETFILTER)系统中的BPF机制,SVR4中的DLPI(DATALINKPROVIDERINTERFACE)和LINUX中的SOCK_PACKET 类型套接字;另一类由应用软件或系统开发包通过安装包捕获驱动程序提供的捕获机制,这一类要用于WIN32平台下的开发,WINPCAP(WINDOWSPACKETCAPTURE)就是这类的驱动开发包,开发WINPCAP的目的就是为了补充WINDOWS中未内置于操作系统中的分组捕获机制,为WIN32应用程序提供访问网络底层的能力。
2.1 SOCK_PACKET类型套接字LINUX系统提SOCK_PACKET来访问数据链路层,使用SOCKET. 它使得用户进程可以直接从数据链路层取得数据包。
由于没有系统内核缓冲区及系统内核过滤器,这就意味着大量的数据包要拷贝到用户空间后再做处理,效率较低。
2.2 DLPI(数据链路供应接口DATA LINK PROVISIONINTERFACE)UNIXSVR4系统提供DLPI来访问数据链路层。