资源描述
wordJISHOUUNIVERSITY专业课课程论文题 目:解析ARP数据包作 者:学 号:所属学院:信息科学与工程学院专业年级:总 评 分:完成时间:某某大学信息科学与工程学院解析ARP数据包软件的设计和实现某某大学信息科学与工程学院,某某 某某 416000摘 要本文首先介绍了地址解析协议ARP的概念,详细说明了ARP的工作原理,ARP攻击的根本原理,详细分解了ARP数据包的各个字段含义,ARP协议工作的流程和这次课程设计的意义与目的;接着描述了此实验的总体设计;然后是详细设计,分析讲解了实现代码的主要局部;最后还讲了做这次课程设计的个人总结,谈了一些个人观点。关键字:ARP数据包、工作原理、ARP攻击、解析、截获、功能目录第一章引言1ARP背景1什么是ARP1工作原理1攻击21.1.4 ARP包的格式31.1.5 ARP协议工作流程4课题研究现状4论文组织方式5第二章关键技术6数据包截获机制6抓包工具62.2.1 Winpcap简介7简介9第三章总体设计103.1 设计分析10设计中的重点与难点10参考算法10系统或算法框架设计11功能设计113.3 平台设计12数据结构的设计12第四章详细设计13第五章完毕语14第六章参考资料1515 / 18第一章 引言1.1 ARP背景首先,我们来了解一下什么是ARP,ARP的工作原理以与ARP攻击所带来的危害。什么是ARP地址解析协议Address Resolution Protocol,ARP是在仅知道主机的IP地址时确定其物理地址的一种协议。因IPv4和以太网的广泛应用,其主要用作将IP地址翻译为以太网的MAC地址,但其也能在ATM和FDDIIP网络中使用。从IP地址到物理地址的映射有两种方式:表格方式和非表格方式。ARP具体说来就是将网络层IP层,也就是相当于OSI的第三层地址解析为数据连接层MAC层,也就是相当于OSI的第二层的MAC地址。 在以太网协议中规定,同一局域网中的一台主机要和另一台主机进展直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议栈中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析address resolution就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。 另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的某个端口的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为ARP代理ARP Proxy。在每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的。 以主机A向主机B发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到目标IP地址,主机A就会在网络上发送一个广播,A主机MAC地址是“主机A的MAC地址,这表示向同一网段内的所有主机发出这样的询问:“我是,我的硬件地址是00-00-C0-15-AD-18主机A的MAC地址.请问IP地址为的MAC地址是什么?网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“的MAC地址是08-00-2B-00-EE-0A。这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时A和B还同时都更新了自己的ARP缓存表因为A在询问的时候把自己的IP和MAC地址一起告诉了B,下次A再向主机B或者B向A发送信息时,直接从各自的ARP缓存表里查找就可以了。ARP缓存表采用了老化机制即设置了生存时间TTL,在一段时间内一般15到20分钟如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。如图1所示ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。 ARP攻击主要是存在于局域网网络中,局域网中假如有一个人感染ARP木马,如此感染该ARP木马的系统将会试图通过“ARP欺骗手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。ARP攻击主要是存在于局域网网络中,局域网中假如有一台计算机感染ARP木马,如此感染该ARP木马的系统将会试图通过“ARP欺骗手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。初期:这种有目的的发布错误ARP广播包的行为,被称为ARP欺骗。ARP欺骗,最初为黑客所用,成为黑客窃取网络数据的主要手段。黑客通过发布错误的ARP广播包,阻断正常通信,并将自己所用的电脑伪装成别人的电脑,这样原本发往其他电脑的数据,就发到了黑客的电脑上,达到窃取数据的目的。 中期:ARP恶意攻击。后来,有人利用这一原理,制作了一些所谓的“管理软件,例如网络剪刀手、执法官、终结者等,这样就导致了ARP恶意攻击的泛滥。往往使用这种软件的人,以恶意破坏为目的,多是为了让别人断线,逞一时之快。特别是在网吧中,或者因为商业竞争的目的、或者因为个人无聊泄愤,造成恶意ARP攻击泛滥。随着网吧经营者摸索出禁用这些特定软件的方法,这股风潮也就渐渐平息下去了。 现在:综合的ARP攻击。最近这一波ARP攻击潮,其目的、方式多样化,冲击力度、影响力也比前两个阶段大很多。首先是病毒参加了ARP攻击的行列。以前的病毒攻击网络以广域网为主,最有效的攻击方式是DDOS攻击。但是随着防X能力的提高,病毒制造者将目光投向局域网,开始尝试ARP攻击,例如最近流行的威金病毒,ARP攻击是其使用的攻击手段之一。 相对病毒而言,盗号程序对网吧运营的困惑更大。盗号程序是为了窃取用户某某密码数据而进展ARP欺骗,同时又会影响的其他电脑上网。 ARP包的格式ARP同RARP使用一样的报头结构,如下列图。硬件类型协议类型硬件地址长度协议长度操作类型发送方的硬件地址0-3字节源物理地址4-5字节源IP地址0-1字节源IP地址2-3字节目标硬件地址0-1字节目标硬件地址2-5字节目标IP地址0-3字节硬件类型字段:指明了发送方想知道的硬件接口类型,以太网的值为1;协议类型字段:指明了发送方提供的高层协议类型,IP为080016进制;硬件地址长度和协议长度:指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;操作字段:用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;发送方的硬件地址0-3字节:源主机硬件地址的前3个字节;发送方的硬件地址4-5字节:源主机硬件地址的后3个字节;发送方IP0-1字节:源主机硬件地址的前2个字节;发送方IP2-3字节:源主机硬件地址的后2个字节;目的硬件地址0-1字节:目的主机硬件地址的前2个字节;目的硬件地址2-5字节:目的主机硬件地址的后4个字节;目的IP0-3字节:目的主机的IP地址。1.1.5 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查询失败。地址解析协议Address Resolution Protocol,ARP是在仅知道主机的IP地址时确定其物理地址的一种协议。因IPv4和以太网的广泛应用,其主要用作将IP地址翻译为以太网的MAC地址,但其也能在ATM(异步传输模式)和FDDIIP(Fiber Distributed Data Interface光纤分布式数据接口)网络中使用。从IP地址到物理地址的映射有两种方式:表格方式和非表格方式。ARP具体说来就是将网络层IP层,也就是相当于OSI的第三层地址解析为数据连接层MAC层,也就是相当于OSI的第二层的MAC地址。本设计主要通过使用Winpcap,WpdPack开发包,在Microsoft 环境下编写出了一款简单的软件获取网络中的ARP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小与微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用X围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以与嵌入式系统开发。1.3论文组织方式 首先,本论文从目前网络的现状开始,详细研究了本课题的背景以与意义,由于目前我国正在进展大规模的现代化经济建设,需要使用自己的网络和信息安全系统来保护自己的网络和信息系统,尤其是对于全国性大型计算机网络而言,必须将网络安全和信息安全放在非常重要的地位上,而从长远角度看,这只能依靠我们自己解决。因此建立网络安全系统是我们现在迫切需求,这项工作对我们来说具有重大的政治和经济意义面对这种形式研究并开发出一种能方便有效的实时监视和捕获可疑网络信息的系统迫在眉睫。然后对解析ARP数据包的实现所必须具备的各种技术进展深入了解。其次,在对本论文的背景有所了解的情况下,对本课题所必须的关键技术进展了介绍,比如WpdPack等的详细介绍。最后,在对所必须得根底知识有所了解的情况下,按照各模块的功能,分别详细介绍了各个功能的实现过程。第二章 关键技术数据包截获机制网络数据包截获机制一般指通过截获整个网络的所有信息流量,根据信息源主机,目标主机,服务协议断口等信息简单过滤掉不关心的数据,再将用户感兴趣的数据发送给更高层的应用程序进展分析。在局域网中,由于以太网是基于广播方式传送数据的,以太网上的所有主机都共享一条网络总线,所以所有的物理信号都会被传送到每一个主机节点,如果将网卡设置为混杂承受模式,如此无论监听到的数据帧目的地址如何,网卡都能予以接收。协议簇中的应用层协议大多数都是以明文形式在网络上传输,这些明文数据往往包含一些敏感数据,如密码、账号等,因此使用监听程序软件可以监听到所有局域网内的数据通信,得到这些敏感信息。当然,其局限性是只能在局域网的共享冲突域中进展。嗅探器作为一种网络通讯程序,主要是通过对网卡的编程来实现的。对网卡的编程有很多种方法,通常的套接字程序只能响应与自己硬件地址相匹配的或是以广播方式发出的数据帧,对于其他形式的数据帧,网络接口在验证 目的地址并非自身地址之后将不引起响应,也就是说应用程序无法接收到达的数据包。而网络嗅探器的目的恰恰在于从网卡接收所有经过它的数据包,这些数据包既可以是发给自己的也可以是发给别人的。显然,要达到此目的就不能让网卡按通常的正常模式工作,而必须将其设置为混杂模式。嗅探程序的设计一般有如下几个阶段:(1)包捕获设置:包括网络适配器的识别和网卡混杂模式的设置;(2)过滤器设置:对数据包的捕获设定一些条件,如可以按某些特定的IP 地址进展过滤,也可根据网络协议只捕获某种特定的协议,如TCP 或UDP 包中的数据;(3)数据分析:对捕获的数据进展分析处理,获得数据包中的上层信息。2.2.1 Winpcap简介WinpcapWindows Packet Capture是Windows平台下一个免费,公共的网络访问系统。开发Winpcap这个项目的目的在于为Win32应用程序提供访问网络底层的能力。它提供了以下功能5:1捕获原始数据报,包括在共享网络上各主机发送/接收的以与相互之间交换的数据报;2在数据报发往应用程序之前,按照自定义的规如此将某些特殊的数据报过滤掉;3在网络上发送原始的数据报;4收集网络通信过程中的统计信息。Winpcap的主要功能在于独立于主机协议如TCP/IP)而发送和接收原始数据报。也就是说,Winpcap不能阻塞、过滤或控制其他应用程序数据报的发收,它仅仅只是监听共享网络上传送的数据报。Winpcap是Win32平台下的数据包捕获与网络分析架构,由三个模块构成:NPF,packet.dll,wpcap.dll。前一个工作在内核层,后两个工作在用户层。第一个模块是内核局部NPF (Netgroup Packet Filter),在Win95/98中它是一个VXD虚拟设备驱动程序文件文件,在WinNT/Win2000下是一个SYS文件。它的主要功能是过滤数据包,并把这些数据包原封不动地传给用户态模块。当然也添加了一些系统特定的标志(比如时间戳管理)。这个过程中包括了一些操作系统特有的代码。第二个模块packet.dll用来在不同的Win32平台下提供一个通用的公共的包驱动接口。事实上,不同版本的Windows平台在内核层模块和用户进程之间的接口不完全一样,packet.dll用于解决这些不同。提供了一套系统独立的APIApplication Programming Interface 应用编程接口,调用packet.dll的程序能够运行在不同版本的 Windows 平台上而无需重新编译。packet.dll还有一些附加的功能。它可执行一些低层操作:如:获得网卡名字,动态装载驱动,得到比如机器的网络掩码、硬件冲突等一些系统特定的信息。第三个模块wpcap.dll是系统无关的,它提供了更高层、抽象的函数。它包括了一些比如过滤器生成、用户级缓冲等其它的高层函数,增加了比如统计和包发送等更高级的特性。因此程序员能处理两种类型的API:一套原始函数集,包含在packet.dll中,直接与内核层调用匹配;另一套高层函数由wpcap.dll提供,便于用户调用,功能更强大。程序员能随意使用wpcap.dll,但只能在受限的环境中直接使用packet.dll.图2.3 Winpcap结构图总的说来,packet.dll直接映射了内核的调用。wpcap.dll提供了更加友好、功能更加强大的函数调用。Winpcap的具体结构图2.3所示。Winpcap是用NDISWindows的通信协议程序(比如TCP/IP)和网络设备驱动器之间通信的规X的,将自己注册为一个协议处理驱动。Winpcap的使用非常方便,但是它有一个致命的缺陷就是只适用于共享式以太网络,对于交换式网络下的数据如此无能为力。经过测试,在使用交换机连接的局域网下,Winpcap只能监听到本网段内的数据,而对于来自其他网段的数据如此无法监听,除非你把电脑接到交换机之前或者接到交换机的配置口上,不过那样的弊端是显而易见的,所以,Winpcap的应用还是有局限性的。Winpcap结构图如图2.4所示。图2.4 NPF device driverWpdPack是WinPcap的开发包,提供了使用WinPcap必须的头文件和库文件,现阶段开始SendPkt使用的是WinPcap 3.1与其对应的WpdPack。随着网络入侵的不断开展,网络安全变得越来越重要,于是网络入侵取证系统的研究也变得日益重要。在网络入侵取证系统中,对网络上传送的数据包进展有效的监听即捕获包是目前取证的关键技术,只有进展高效的数据包捕获,网络管理员才能对所捕获的数据进展一系列的分析,从而进展可靠的网络安全管理。第三章 总体设计3.1 设计分析1) 程序中会用到Winpcap,Winpcap是Win32环境下数据包捕获的开放代码函数库。基于Winpcap的应用程序一般按照下面几个步骤进展设计:l 输出网卡设备列表。l 选择网卡并打开。l 捕获数据包时,可能需要设置过滤器。l 捕获数据包或者发送数据包。2) 在程序设计过程中需要注意网络主机字节顺序的转化。由于不同的计算机系统所采用的数据表示方式不同,对于2B或4B的数据,有的采用低字节地址存放数据的高权值位,而有的却以低地址字节存放数据低权位值,在网络的数据传输中,我们应该统一表示,所以我们在捕获数据包后,应将数据某某部的表示长度或类型的数据转换本钱地机的表达形式。可以利用函数ntohs()将网络字节序转换为主机字节序。3)选择网卡并打开时,注意选择可用的网卡。1) 取得当前网卡设备列表。2) 选择Ethernet网卡并打开,注意判断所选网卡是否为实际存在的可用网卡。3) 设置过滤器,此处的过滤器正如此表达式为“arp或者“ether protoarp。4) 捕获数据包并进展处理包括输出各IP地址,物理地址,操作类型以与时间。由于要记录日志文件,为了便于输出流参数,建议采用pcap_next_ex()函数。流程图如下列图:1. 得到网络驱动.利用PCAP提供的PCAP_findalldevs( )函数实现此功能。2. 选择一块网卡,并判断其是否可用。3. 编辑设置过滤器,使其只捕获ARP包.过滤函数PCAP_plie和PCAP_setfilter.设置函数为PCAP_setfilter( )。4. 开始捕获数据包并进展处理.使用PCAP_next_ex( )函数实现此功能。通过编制程序,获取网络中的ARP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。程序的具体要求如下所示:1以命令行的形式运行,如下所示:其中,arp1.exe为程序名;log.txt为日志文件名。2程序输出内容如下所示:源IP地址 源MAC地址 目的IP地址 目的MAC地址 操作 时间各局部的说明如下所示:1、源IP地址:输出ARP消息格式中的源IP地址字段。2、源MAC地址:输出ARP消息格式中的源物理地址字段3、目的IP地址:输出ARP消息格式中的目的IP地址字段。4、目的MAC地址:输出ARP消息格式中的目的物理地址字段。5、操作:输出ARP消息格式中的操作字段,假如为ARP请求,如此为1,假如为ARP应答,如此为2。6、时间:该ARP包产生的时间。3当程序接收到键盘输入Ctrl十C时退出。3.3 平台设计Windows 7, Microsoft 简体中文版, WinPcap_4_1_2, WpdPack_4_1_2struct ARPPACKETunsigned short hdtyp; /硬件地址unsigned short protyp; /协议类型unsigned char hdsize; /硬件地址长度unsigned char prosize; /协议地址长度unsigned short op; /操作值: ARP/RARPu_char smac6; /源MAC地址u_char sip4; /源IP地址u_char dmac6; /目的MAC地址u_char dip4; /目的IP地址;第四章 详细设计核心代码l ARP数据包结构struct arppkt unsigned short hdtyp; /硬件类型。值0001表示其为Ethernetunsigned short protyp; /协议类型。值0800表示上层协议为IPunsigned char hdsize; /硬件地址长度。值为06unsigned char prosize; /协议地址长度。值为04unsigned short op; /操作值为0001/0002,分别表示ARP请求/应答u_char smac6; /源MAC地址,6Bu_char sip4; /源IP地址,4Bu_char dmac6; /目的MAC地址u_char dip4; /目的IP地址;l 获取网络设备列表,并以混杂模式打开网络设备/获取网络设备列表if(pcap_findalldevs(&alldevs,errbuf)=-1)coutError in pcap_findalldevs:next) /以混杂模式打开网卡,以承受所有的帧if(adhandle=pcap_open_live(d-name,1000,1,300,errbuf)=NULL)coutaddresses!=NULL)break;l编译过滤器并设置过滤器,只捕获ARP数据包char packet_filter=ether proto arp; /过滤,选择arp协议if(pcap_pile(adhandle,&fcode,packet_filter,1,netmask)0) coutnUnable to pile the packet filter.Check the syntax.n; pcap_freealldevs(alldevs); return;/设置过滤器if(pcap_setfilter(adhandle,&fcode)0) cout=0) 输出ARP数据包的各个域的内容到文件和屏幕上 第五章 完毕语本次课程设计,完成了在windows7环境下的解析ARP数据包。在具体实现获取网络中的ARP数据包解析数据包的内容,并将其写入日志文件的过程中,是我更加清楚物理地址、IP地址的关联,源地址与目的地址的关系,以与二者对数据类型的格式要求。最重要的是通过这次的实际训练让我对ARP协议更加理解。本次课程设计查阅了大量的案例,学到了很多知识,使我对计算机网络有了更深入的了解。我觉得这次课程设计我觉得收获挺大的。之前的学习仅限于书本,网络的很多东西都只知道其然而不知道其所以然。在这次课程设计中,也遇到了很多的难题,如:在开始查找资料并编写程序时,需用到Wincap软件,且要对它进展正确的安装。把Wincap文件中的Include和Lib里的全部文件分别复制到安装VC+的位置中的Include和Lib中。课程设计是培养我们综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程。随着科学技术开展的日新月异,网络已经成为当今计算机开展中空前活跃的领域,在生活中可以说是无处不在,因此作为二十一世纪的计算机专业的大学生来说掌握网络组网技术是十分重要的。第六章 参考资料1.谢希人著. 计算机网络第四版某某理工大学20032.宋凯等著. 计算机网络. :清华大学 20104.李爱华等著. 面向对象程序设计C+语言. :清华大学20105.王晓东等著,通信网络程序设计 某某电子科技大学 2011
展开阅读全文