天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧网络 >> 正文

深入ARP协议解决ARP欺骗问题

2008-3-4中国网管学院佚名
     今天有一朋友给我挂电话,说他路由有问题了。开始是网络有问题,后来他断开网络,用单机接路由的LAN口进去调试,竟然都登录不进去!我便叫他在CMD下输入ARP —D(清空ARP缓存的命令) 先试下,不要那么急着定结论。一分种后他再挂电话过来,可以登录了。
  
  问题有没有解决我们暂不去管,因为我们今天主要是聊ARP协议。
  
  了解ARP协议是非常有必要的,局域网内的通讯它必不可少,而且作用非常大,在后续的学习中,我们还将会遇到ARP欺骗等比较重要的东东。所以,俺将模拟刚才的那个问题,来跟大家一起探讨。
  
  一、ARP的协议结构分析

  IP数据包常通过以太网发送。以太网设备并不识别32位IP地址:它们是以48位以太网地址传输以太网数据包的。因此,IP驱动器必须把IP目的地址转换成以太网网目的地址。在这两种地址之间存在着某种静态的或算法的映射,常常需要查看一张表。地址解析协议(Address Resolution Protocol,ARP)就是用来确定这些映象的协议。

  ARP工作时,送出一个含有所希望的IP地址的以太网广播数据包。目的地主机,或另一个代表该主机的系统,以一个含有IP和以太网地址对的数据包作为应答。发送者将这个地址对高速缓存起来,以节约不必要的ARP通信。如果有一个不被信任的节点对本地网络具有写访问许可权,那么也会有某种风险。这样一台机器可以发布虚假的ARP报文并将所有通信都转向它自己,然后它就可以扮演某些机器,或者顺便对数据流进行简单的修改。ARP机制常常是自动起作用的。在特别安全的网络上, ARP映射可以用固件,并且具有自动抑制协议达到防止干扰的目的。

图1 以太网上的ARP报文格式

 

图1是一个用作IP到以太网地址转换的ARP报文的例子。在图中每一行为32位,也就是4个八位组表示,在以后的图中,我们也将遵循这一方式。

    硬件类型字段指明了发送方想知道的硬件接口类型,以太网的值为1。协议类型字段指明了发送方提供的高层协议类型,IP为0806(16进制)。硬件地址长度和协议长度指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用。操作字段用来表示这个报文的目的,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4。

    当发出ARP请求时,发送方填好发送方首部和发送方IP地址,还要填写目标IP地址。当目标机器收到这个ARP广播包时,就会在响应报文中填上自己的48位主机地址。

 

二、模拟环境:ARP捕包分析
  
  比较简单,所以没有画拓朴图。

  思路:使用两台带WEB管理的路由(A和B),设同一IP(192。168。22。1),用一台PC(192。168。22。5)接入其中一台,打开WEB管理介面。然后立即切换到另一台路由(就是野蛮的把网线拔下换到别一台),再接着打开WEB管理,看会有什么现像发生。

  (1)接入A,打开WEB管理。捕包如下:

    


    由上图我们可以看到,再进行通讯之前,会先进行ARP请求,然后再是HTTP连接的建立。上面所捕的目标MAC地址是FF:FF:FF:FF:FF:FF,目标IP是:192。168。22。1。其意义就是这是一个广播包,主机192。168。22。5希望得到192。168。22。1的MAC地址。

 

三: ARP地址表的作用,清空ARP缓存的作用

  (2)立即把网线拔下接入到B,再打开WEB管理。可是我却发现,立即就能访问。也就是说没有出现刚才所说,需要清空ARP缓存的情况。怎么回事?看下面我们捕包的截图:


 

上图蓝色部分是A的包,为了明显区分,我把B上的WEB访问端口改了下,这样我们就看到是褐色的了,并被omnipeek识别为使用了代理。我们发现蓝色和褐色之间,并没有ARP的请求与获取(SMB不用管),也就是说没有做任何动作,就可以访问B了。为什么呢?换了一个设备MAC地址应该是不同的啊!大家看上面有个蓝色选中区域,是一个从Draytek:27:9A:25 发出来的请求192。168。22。6的ARP请求包,而这个MAC地址的IP是192。168。22。1(即是我们设置给AB路由的IP),请大家看上图的解码部分。由此我们便非常清楚了,在我们进行HTTP的连接之前,路由器已经把自己的MAC地下送过来了(因为俺在B上把syslog服务器设给了192。168。22。6,当时这台机器不在线),所以我们没有任何感觉,就可以正常打开B的WEB管理了。

  目的没有达到,我们得继续。

  
   (3)我们再把网线拔出来,重新接回A,再立即访问A的WEB管理介面。终于不能打开了。看捕包截图:

    
   由上图我们看到,我们发出的HTTP请求没有得到回应,于是,我立即打开CMD,输入ARP –D ,清空ARP缓存。接着就看到出现新的ARP请求,完了后HTTP也可以访问了。

 目标完成!

   总结:

   局域网的通信是基于MAC地址的,而更多的程序都是基于IP地址,这就要有IP到MAC的映射了。一般情况,当机器在完成了映射的学习之后,都会在缓存中保存一段时间,所以这个时候更换了网络设备,也就更换了MAC地址,而映射却没有更新,便造成了不能访问的假像。而我们只须把这缓存清空让机器重新学习一次即可。

 

本文来源:中国网管学院 作者:佚名

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。文章是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。 Email:support@txwb.com,系统开号,技术支持,服务联系微信:_WX_1_本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行