arp协议
地址解析协议,即ARP(Address Resolution Protocol),作用是通过IP地址换取mac地址。我们知道,在局域网内通信靠的是mac地址,而不是ip地址。有些人可能疑惑了,比如我要ping局域网内的网关,不就是ping 192.168.1.1 不就是用的IP地址吗??怎么说用的是mac地址,其实,在ping网关这个IP的时候,需要arp协议去得到网关的mac。再去对这个mac地址去发送信息。
在一个局域网内,无时无刻不充斥着arp协议。
# tcpdump -i eno16777736 -vnn arp
21:52:29.091636 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.6, length 46
21:52:30.232964 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.71 tell 192.168.1.100, length 28
21:52:30.233137 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.1.71 is-at d0:53:49:54:4d:e1, length 46
21:52:31.112223 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.100, length 28
21:52:31.114196 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.1.1 is-at 14:75:90:40:b9:80, length 46
21:52:52.643785 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.42 tell 192.168.1.1, length 46
21:52:57.863894 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.71 tell 192.168.1.100, length 28
21:52:57.864068 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.1.71 is-at d0:53:49:54:4d:e1, length 46
21:53:00.221650 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.6, length 46
21:53:01.671999 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.100, length 28
21:53:01.686769 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.1.1 is-at 14:75:90:40:b9:80, length 46
用抓包工具看看,都是一个请求包,一个回应包。
请求包是 谁知道192.168.1.71的mac请告诉192.168.1.6
回应包是 192.168.1.71的mac地址是 d0:53:49:54:4d:e1
ARP的工作流程:
第一步:A(10.0.0.2)要和B(10.0.0.3)通信,A在本地的ARP缓存中检查主机B的匹配MAC地址。
第二步:如果A的ARP缓存中没有缓存,则A将ARP请求帧广播到本地网络上的所有主机。本地网络中的所有主机都会接收到ARP请求,并且检查是否与自己的IP地址匹配,若不匹配则丢弃ARP请求。
第三步:主机B(10.0.0.3)接收到A的ARP请求包,则将A的Mac和IP写进自己的ARP缓存中。
第四步:主机B(10.0.0.3)将自己的mac信息回复给A。
第五步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的回复信息刷新自己的ARP缓存。并且利用缓存向B发送信息。
ARP的欺骗:
ARP欺骗的实现原理很简单,因为所有主机的数据包想要发送到外网就必须交给网关,再由网关将数据包发给路由器并且开始传送数据包。
那黑客只要在局域网内冒充网关