about arp

      2005-8-9 9:27
玩转ARP包- -



一,arp的基础协议

1.ARP的工作原理

本来我不想在此重复那些遍地都是的关于ARP的基本常识,但是为了保持文章的完整性以及照顾初学者,我就再啰嗦一些文字吧,资深读者可以直接跳过此节。




我们都知道以太网设备比如网卡都有自己全球唯一的MAC地址,它们是以MAC地址来传输以太网数据包的,但是它们却识别不了我们IP包中的IP地址,所以我们在以太网中进行IP通信的时候就需要一个协议来建立IP地址与MAC地址的对应关系,以使IP数据包能发到一个确定的地方去。这就是ARP(Address Resolution Protocol,地址解析协议)。




讲到此处,我们可以在命令行窗口中,输入


arp –a


来看一下效果,类似于这样的条目


210.118.45.100 00-0b-5f-e6-c5-d7 dynamic


就是我们电脑里存储的关于IP地址与MAC地址的对应关系,dynamic表示是临时存储在ARP缓存中的条目,过一段时间就会超时被删除(xp/2003系统是2分钟)。






这样一来,比如我们的电脑要和一台机器比如210.118.45.1通信的时候,它会首先去检查arp缓存,查找是否有对应的arp条目,如果没有,它就会给这个以太网络发ARP请求包广播询问210.118.45.1的对应MAC地址,当然,网络中每台电脑都会收到这个请求包,但是它们发现210.118.45.1并非自己,就不会做出相应,而210.118.45.1就会给我们的电脑回复一个ARP应答包,告诉我们它的MAC地址是xx-xx-xx-xx-xx-xx,于是我们电脑的ARP缓存就会相应刷新,多了这么一条:


210.118.45.1 xx-xx-xx-xx-xx-xx dynamic






为什么要有这么一个ARP缓存呢,试想一下如果没有缓存,我们每发一个IP包都要发个广播查询地址,岂不是又浪费带宽又浪费资源?


而且我们的网络设备是无法识别ARP包的真伪的,如果我们按照ARP的格式来发送数据包,只要信息有效计算机就会根据包中的内容做相应的反应.




试想一下,如果我们按照ARP响应包的相应的内容来刷新自己的ARP缓存中的列表,嘿嘿,那我们岂不是可以根据这点在没有安全防范的网络中玩些ARP包的小把戏了?在后面的文章里我就手把手来教你们如何填充发送ARP包,不过先别急,我们再继续学点基础知识^_^






2.ARP包的格式




既然我们要来做一个我们自己的ARP包,当然首先要学习一下ARP包的格式。




从网络底层看来,一个ARP包是分为两个部分的,前面一个是物理帧头,后面一个才是ARP帧。

首先,物理帧头,它将存在于任何一个协议数据包的前面,我们称之为DLC Header,因为这个帧头是在数据链路层构造的,并且其主要内容为收发双方的物理地址,以便硬件设备识别。





四.ARP包的游戏


既然我们可以自己来填充数据包,那么来玩些ARP的“小游戏”欺骗就是易如反掌了,当然,是在没有安全防护的网络里 ,比如只有hub或者交换机把你们相连,而没有路由分段……^_^


下面我就由浅入深的讲一些介绍一些关于ARP的小伎俩。




1. 小伎俩


1) 你可以试着发一个请求包广播,其中的ARP帧里关于你的信息填成这样:


(为了节省篇幅,我只写需要特别指出的填充字段)


发送方MAC

6

随便乱填一个错误的


发送方IP

4

填上你的IP




出现什么结果?是不是弹出一个IP地址冲突的提示?呵呵,同样的道理,如果发送方IP填成别人的,然后每隔1秒发一次………..-_-b






2) 比如你们都靠一个网关192.168.0.1 上网 ,如果你想让192.168.0.77 上不了网,就可以伪装成网关给192.168.0.77发一个错误的ARP响应包, like this


发送方MAC

6

随便乱填一个错误的


发送方IP

4

网关IP 192.168.0.1




接收方就填192.168.0.77的相关信息,发送之后,它还能上网不?


这样能折腾他好一阵子了,只要它的系统得不到正确的到网关的ARP映射表它就一直上不了网了 ^_^


呵呵类似的伎俩还有很多,不过只停留在这点东西上也没什么意思,还是看看稍微高深一点的吧^_^




2. ARP欺骗


因为在以太网里,网络设备就是靠MAC信息来识别的计算机的,比如A电脑知道MAC地址为22-22-22-22-22-22的电脑是B,而如果我给A发送一个ARP响应包,告诉它我的MAC是22-22-22-22-22-22的话,A同样会认为我的计算机是B了,那么好,我们设想有这么一个环境,


A的防火墙只对IP为192.168.0.2 MAC为 22-22-22-22-22-22的B有信任关系,而且A打开了21端口提供FTP服务,正常情况下因为防火墙的缘故我们的计算机是连不到A的,


于是我们想办法让B down掉,或者在它关机的时候,我们把我们的IP改成B的192.168.0.2,然后给A发送一个ARP回应包,告诉A更新一下ARP缓存列表,192.168.0.2的IP映射到我们的
MAC地址上来,于是,奇迹出现了,我们可以连到A的FTP上了,防火墙失效了^_^


不过这个办法只能在同网段内生效,如果我们和A不在一个网段内,那就要复杂的多了,还要配合ICMP的重定向来控制报文的路由,这个我准备在以后阐述ICMP包的时候详细讲解,就不再此多说了。


3. 基于ARP欺骗的监听原理


监听的技术有很多了,不过我们常用的sniffer工具只能在基于hub的网络中起作用,碰到哪怕是交换机都无能为力了,这个时候我们的ARP欺骗技术就派上用场了。


还是假设有三台主机A,B,还有我们的主机,位于同一个交换式局域网中

A与B正在通信,如果我们想要刺探A――>B通信的内容,于是我们就可以给A发送一个伪造的ARP回

应包,告诉A,B的IP对应的MAC条目为我们的MAC地址,于是,A也就会相应的刷新自己的ARP缓存

,将发给B的数据,源源不断的发送到我们的主机上来,这样我就可以对接收到的数据包进行分析

就好了,达到了监听的目的。当然,因为动态ARP缓存是动态的,有超时时间的,所以我们必须每

隔一段时间就给A发送一个ARP回应包

虽然我们这样达到了目的,但是A到B的通信却被停止了,为了不让B发现,我们还要对每次接收到

的数据包进行转发,全部都转发给B,这样就天衣无缝了^_^

同样的,如果我们还想监听B à A的数据包,一样给B发一个ARP回应包,告诉B,A的IP对应的MAC

是我们的主机MAC,于是B到A的数据包也源源不断的发到我们的主机上来了,当然我们也是一样要

对这些数据包进行转发,如图:

A <------> 我们的主机 <------> B

一切都无误的话,A和B的通信内容就这样不知不觉的被我们监听到了^_^
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commenttime}{commentauthor}

{CommentUrl}
{commentcontent}