欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ARP协议和ARP脚本抓取MAC地址

程序员文章站 2022-05-16 22:37:17
...

  ARP协议——地址解析协议。是TCP/IP四层结构中的链路层,是通过IP地址寻MAC地址的一种协议。

ARP协议的工作过程

  本地主机需要给另一个局域网中的主机发送数据,但不知道另一个主机的MAC地址,此时采用ARP协议得到对方主机的MAC地址,再进行数据的发送。
  首先,在发现本地的ARP缓存表中没有这个IP地址对应的MAC地址的时候,即使用ARP协议,广播一个ARP发送帧向整个局域网,局域网中每个主机都可以接收到这个帧,且因为是广播发送的,所以每哥主机并不会在链路层丢弃此帧,而是继续向上交付,等到IP层和本地计算机的IP地址进行比较之后,发现不是,即丢弃该帧;对应的主机收到此帧后,在IP层解析比较,发现是一个ARP请求帧,且IP地址与本地计算机的IP地址相同,即发送一个ARP回复帧,不同的是,此时ARP回复帧已经不是广播发送了,因为ARP请求帧中含有发送端的IP地址和MAC地址,只需要将其保存在本地的ARP缓存中即可。
  TCP/IP四层协议栈数据帧的封装:
  ARP协议和ARP脚本抓取MAC地址

功能

  OSI模型把网络工作分为七层,而TCP/IP模型分为4层,无论几层,代表的都是对应层之间的联系。
  用传输层举例,在A主机和B主机建立连接后,A主机的传输层只会认为已经与B主机的传输层直接相连,忽略了传输层之下的几层协议。所以在IP层确立二者已经连接成功,通过线路层发送数据时,此时链路层保证两个主机的连接。
  图片可能更好理解点。
  ARP协议和ARP脚本抓取MAC地址

ARP缓存

   为了使操作系统ARP的数据请求减少,有效利用网络传输的空间和提高网络传输的效率,每台计算机都有一个ARP缓存,其实也就是一个IP地址和MAC地址一一对应的表。
   计算机在需要传输数据时,现在本地的ARP缓存中查询是否有对应的IP–MAC地址,如果有,则直接使用本地的对应关系,直接转发分组;如果没有,则进行ARP请求与回复,并对得到MAC地址储存在本地的ARP缓存中。
   计算机在得到一个IP地址与MAC地址对应的数据信息后,就将这个信息储存到ARP缓存中,以便下次使用时不需要再次进行ARP,但是这个储存的时间是有限的,一般为2~10分钟。

Linux中几个ARP命令


  arp -a或arp –g:用于查看缓存中的所有项目。


  arp -a ip:如果有多个网卡,那么使用arp -a加上接口的IP地址,就可以只显示与该接口相关的ARP缓存项目。


  arp -s Ip 物理地址:可以向ARP缓存中人工输入一个静态项目。该项目在计算机引导过程中将保持有效状态,或者在出现错误时,人工配置的物理地址将自动更新该项目。


  arp -d Ip:使用该命令能够人工删除一个静态项目。


ARP脚本抓取对应主机MAC地址

#!/bin/bash

i=0
num=0

while [ $i -le 254 ]
do
    if [ $num -eq 20 ];then
        sleep 1
        num=0
        continue
    fi
    ping -c 1 "196.168.101.$i" & let i++ num++
done

  经过从1到254的ping之后,如果能ping成功,则可以获得对方的MAC地址,使用arp -a选项查看本地的arp缓存。我的计算机所在网络环境的输出结果为:
  ARP协议和ARP脚本抓取MAC地址

相关标签: arp