arp协议

来源:互联网 发布:java制作骰子 编辑:程序博客网 时间:2024/06/06 20:24

一、ARP协议简介

ARP (Address Resolution Protocol) 是个地址解析协议。最直白的说法是:在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能提供该节点的MAC地址。  

源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,因此在通讯前必须获得目的主机的硬件地址,ARP协议就起这个作用。

二、工作过程

ARP协议只适用于局域网,如果本地主机想向某一个IP地址的主机发包,但是它并不知道其中的硬件地址,此时运用ARP协议提供的机制来获取硬件地址,过程如下:

(1)本地主机发出ARP请求,询问“192.168.0.1”的主机硬件地址是多少,并将这个请求广播到本地网段中(以太网帧首部硬件地址填写FF:FF:FF:FF:FF:FF表示广播)

(2)目的主机接收到广播ARP请求,发现其中IP与本机相符合,发送一个ARP协议应答给源主机,包含了lP地址和硬件地址

(3)目的主机接受到ARP应答,知道了目的主机的硬件地址,之后的数据就可传达了。

三、常见的用法

1.arp -a或arp –g
每一台主机都维护一个ARP缓存表,可以用arp -a命令查看。用于查看缓存中的所有项目。-a和-g参数的结果是一样的,多年来-g一直是UNIX平台上用来显示ARP缓存中所有项目的选项,而Windows用的是arp
-a(-a可被视为all,即全部的意思),但它也可以接受比较传统的-g选项。 arp -a Ip 如果有多个网卡,那么使用arp -a加上接口的IP地址,就可以只显示与该接口相关的ARP缓存项目。 arp -s Ip 物理地址 可以向ARP缓存中人工输入一个静态项目。该项目在计算机引导过程中将保持有效状态,或者在出现错误时,人工配置的物理地址将自动更新该项目。
2. arp -d Ip 使用该命令能够人工删除一个静态项目。

四、帧格式


以太网目的地址:目的主机的硬件地址。目的地址全为1的特殊地址是广播地址。
以太网源地址:源主机的硬件地址。
帧类型:对于ARP协议,该字段为0x0806。对于RARP协议,该字段为0x8035。
硬件类型:表示硬件地址的类型。值为1时表示以太网地址。也就是说ARP协议不仅仅应用于以太网协议,还可以支持别的链路层协议。
协议类型:表示要映射的协议地址类型。值为0x0800时表示IP协议。
硬件地址长度:与硬件类型对应的硬件地址的长度,以字节为单位。如果是以太网,则是6字节(MAC长度)。
协议地址长度:与协议类型对应的协议地址长度,以字节为单位。如果是IP协议,则是4字节(IP地址长度)。
操作类型(op):四中操作类型。ARP请求(1),ARP应答(2),RARP请求(3),RARP应答(4)。
发送端硬件地址:如果是以太网,则是源主机以太网地址,此处和以太网头中的源地址对应。
发送端协议地址:如果是IP协议,则表示源主机的IP地址。
目的端硬件地址:如果是以太网,则是目的以太网地址,和以太网头中的目的地址对应。
目的端协议地址:如果是IP协议,则表示源主机要请求硬件地址的IP地址。
对应ARP请求包来说,目的端的硬件地址字段无须填充,其他字段都需要填充。对于ARP回复包来说,所有字段都需要填充。

APR请求包是广播的,但是ARP应答帧是单播的。

以太网数据报最小长度是60字节(14字节的以太网头,不包含4字节的FCS),ARP数据包长度为42字节(14字节的以太网头和28字节的ARP数据),需要加入填充字符到以太网最小长度要求:60字节。

五、编写arp脚本抓取对应主机mac地址

#!/bin/bashhead='192.168.3'i=1count=0while [ $i -le 254 ]do    if [ $count -gt 20 ];then        count=0        sleep 1    fi    ping -c1 "${head}"".$i"&    let i++    let count++donewait echo "#############################"arp -a |grep -v 'incomplete'echo "#############################"