ARP脚本及ARP协议

来源:互联网 发布:java html转xhtml 编辑:程序博客网 时间:2024/06/05 22:37

ARP----地址解析协议

   地址解析协议:是根据IP地址获取物理地址的一个TCP/IP协议。

      主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接受返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一段时间,下次请求时直接查询ARP缓存以节约资源。

     地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。

ARP协议的工作原理:

(1)每台主机都会根据以往在网络中与其他节点的通信,在自己的ARP缓存区(ARP Cache)中建立一个ARP列表,以表示网络中节点IP地址和MAC地址的对应关系。

【说明】ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用(Windows系统的这个时间为2分钟,而Cisco路由器的这个时间为5分钟),就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。

(2)当源节点需要将一个数据包发送到目标节点时,会首先检查自己ARP列表中是否存在该包中所包含的目标节点IP地址对应的MAC地址。如果有,则直接将数据包发送到这个MAC地址节点上;如果没有,就向本地网段发起一个ARP请求的广播包,查询此IP地址目标节点对应的MAC地址。此ARP请求数据包里包括源节点的IP地址、硬件地址,以及目标节点的IP地址。

(3)网络中所有的节点在收到这个ARP请求后,会检查数据包中的目标IP地址是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该节点首先将源端的MAC地址和IP地址的对应表项添加到自己的ARP列表中。如果发现ARP表中已经存在该IP地址所对应的MAC地址表项信息,则将其覆盖,然后给源节点发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址节点。

(4)源节点在收到这个ARP响应数据包后,将得到的目标节点的IP地址和MAC地址对应表项添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源节点一直没有收到ARP响应数据包,则表示ARP查询失败。

APR协议的工作过程:

第1步:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址P1。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。

第2步:如果主机A在ARP缓存中没有找到映射,它将询问P1的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。

第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。

第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。

第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。


每台主机都维护一个ARP表,用来维护IP地址和MAC地址的一一对应,可以用命令arp -a来查看当前系统的ARP表:

接下来实现一个简单的ARP脚本来抓取同一网络中的主机MAC地址  
先创建一个arp.sh文件,代码如下:

运行结果如下: