2014年即将过去,2015年正大步向我们走来。写此日志来梳理一下2014年学过的知识渣渣,同时梳理一下心情,以美好的心情期待2015的到来!
ARP即地址解析协议,就是将IP地址解析成Mac地址的一种TCP/IP协议。当一台主机想要与外界通信时,首先会向外界发送请求广播,并同时发送含有目标IP地址的数据包,另外主机还能够接受网络上返回的信息。返回信息中包括目标主机的的Mac地址。主机在收到返回信息后会将目标主机的IP地址和返回信息中的Mac地址进行匹配整理,然后会存储在本地的ARP缓存中。
ARP缓存实质上就是一个IP地址与MAC地址的对应关系表,可以在本地存储一段时间,下次请求时就可以直接从本地ARP缓存中查找目标主机IP所对应的MAC地址,以此来节省访问所需的时间。ARP缓存只会在本地存储一段时间,具有一定的生命周期,下次访问时还需在网络中发送广播来获取MAC地址。
ARP协议的工作过程描述如下(来自百度):
1、PC1希望将数据发往PC2,但它不知道PC2的MAC地址,因此发送了一个ARP请求,该请求是一个广播包,向网络上的其它PC发出这样的询问:“192.168.0.2的MAC地址是什么?”,网络上的其它PC都收到了这个广播包。
2、PC2看了这个广播包,发现其中的IP地址是我的,于是向PC1回复了一个数据包,告诉PC1,我的MAC地址是00-aa-00-62-c6-09。PC3和PC4 收到广播包后,发现其中的IP地址不是我的,因此保持沉默,不答复数据包。
3、PC1知道了PC2的MAC地址,它可以向PC2发送数据了。同时它更新了自己的ARP缓存表,下次再向PC2发送信息时,直接从ARP缓存里查找PC2的MAC地址就可以了,不需要再次发送ARP请求。
命令提示符下常用的命令:
C:\Users>arp
显示和修改地址解析协议(ARP)使用的“IP 到物理”地址转换表。 ARP -s inet_addr eth_addr [if_addr]
ARP -d inet_addr [if_addr]
ARP -a [inet_addr] [-N if_addr] [-v]
-a 通过询问当前协议数据,显示当前 ARP 项。
如果指定 inet_addr,则只显示指定计算机
的 IP 地址和物理地址。如果不止一个网络
接口使用 ARP,则显示每个 ARP 表的项。
-g 与 -a 相同。
-v 在详细模式下显示当前 ARP 项。所有无效项
和环回接口上的项都将显示。
inet_addr 指定 Internet 地址。
-N if_addr 显示 if_addr 指定的网络接口的 ARP 项。
-d 删除 inet_addr 指定的主机。inet_addr 可
以是通配符 *,以删除所有主机。
-s 添加主机并且将 Internet 地址 inet_addr
与物理地址 eth_addr 相关联。物理地址是用
连字符分隔的 6 个十六进制字节。该项是永久的。
eth_addr 指定物理地址。
if_addr 如果存在,此项指定地址转换表应修改的接口
的 Internet 地址。如果不存在,则使用第一
个适用的接口。
示例:
> arp -s 157.**.85.212 00-aa-**-62-**-09.... 添加静态项。
> arp -a .... 显示 ARP 表。
ARP***与防御
ARP请求为广播形式发送的,网络上的主机可以自主发送ARP应答消息,并且当其他主机收到应答报文时不会检测该报文的真实性就将其记录在本地的MAC地址转换表,这样***者就可以向目标主机发送伪ARP应答报文,从而篡改本地的MAC地址表。ARP欺骗可以导致目标计算机与网关通信失败,更会导致通信重定向,所有的数据都会通过***者的机器,因此存在极大的安全隐患。 ARP***作为一种流行的***方式,可以用来欺骗、挂马、盗取游戏帐号等等。有兴趣的朋友可以google一下,网上这方面的内容有很多。
ARP报文
首先要解决的问题是如何获得ARP协议报文?
WireShark ——— 专业抓包软件
ARP协议报文格式:
ARP请求包的分析:如下所示为一个ARP请求包 0000 ff ff ff ff ff ff 00 0c f1 d4 d9 60 08 06 00 01 ...........`....
0010 08 00 06 04 00 01 00 0c f1 d4 d9 60 c0 a8 01 0f ...........`....
0020 00 00 00 00 00 00 c0 a8 01 02 ..........
根据定义,头6个字节是以太网目的地址 ff ff ff ff ff ff 这是一个广播地址,全网下的所有终端都能接收到,紧跟着的6个字节是以太网源地址,即发送者的MAC地址( 00 0c f1 d4 d9 60 是我的MAC地址)。
帧类型0806占两个字节,到这里以太网帧头就结束了。0806指的是后面的数据是属于arp包的。
接着分析ARP包头。头两个字节是硬件类型 00 01,接着两个字节是协议类型,即ARP使用的是IP协议代号08 00。硬件地址长度和协议地址长度分别是6和4。这与ARP报文格式是对应的。后面的2个字节OP指示当前包是请求包还是应答包,对应的值分别是0x0001和0x0002。原始数据里是00 01所以这是一个请求包,然后6个字节又是发送者MAC地址00 0c f1 d4 d9 60 ,后面4个字节是发送者IP地址c0 a8 01 0f ,转换成点分十进制格式即192.168.1.15,这是我的IP,接下来的6个字节留空,00 00 00 00 00 00 在arp请求包里也可以是其他数据,因为稍后IP地址为c0 a8 01 02 (192.168.1.2)会把自己的MAC地址填充进这6个字节中。
填充完后,arp包里的发送者硬件地址|目标硬件地址和以太网首部的以太网目的地址|以太网源地址正好对调。最后把这个封装好的ARP包发送出去,这样一个来回就可以让两台终端互相知道对方的IP和MAC。
ARP基本就这些内容吧,学艺不精,望多指教!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。