A是主机,B是网关,C是攻击者。
正常情况下,A,B通信流程是:
A要与B通信,A在加上数据链路层包头之前,先得知了B的IP地址,但是,作为数据链路层的A是如何得知上一层传下来的B的IP地址的细节,我不清楚,但是,A就是知道了B的IP地址。
(以后搞清楚OSI七层模型中,网络层是如何让数据链路层知道目标的IP地址的)
可是,数据链路层通信是基于MAC地址的,A只是知道了B的IP地址,还没办法在数据链路层通信。
于是,在通信之前,A把B的IP地址与自己的子网掩码进行与运算,看是否与自己在同一个网段,若B的IP地址与自己不在同一个网段,那么,向网关求助,下面就听从网关的安排即可。
若B的网段与自己在同一网段,那么A就查看自己的ARP缓存表,看B的IP地址对应的MAC地址是多少。若ARP缓存表中有B的MAC地址,那么就建立通信。
若A的ARP缓存表中没有B的MAC地址,A就会向自己连接的交换机端口发送ARP广播,寻求B的地址,交换机从连接A的端口中接收到ARP广播,然后向其他所有端口进行转发,这个时候,实际上所有的主机都能收到,若将网卡开启监听模式,还可以抓到相应的ARP广播包。
但是,只有B会回复A,B从相应的端口单播,只告诉A自己的MAC地址是多少。
这样,A就知道了B的MAC地址,那么A就可以向B发送数据包了(准确的说,在数据链路层应该叫数据帧),既然A能向B发送数据包,那么同理,A就有办法让B知道自己的MAC地址了,既然双方都知道了各自的MAC地址,那么就可以互相通信了。
ARP断网攻击、欺骗原理:
这个时候,作为攻击者的C就来了。
假设A的ip地址为192.168.1.2,网关B的ip地址为192.168.1.1,攻击者C的IP地址为192.168.1.3.
补充:局域网中,若一个主机收到的ARP应答报文,即使不是这个主机本身发送的ARP广播所返回的ARP应答报文,这个主机也还是会更新自己的ARP缓存表。将这个ARP应答报文中的IP地址和MAC地址对应关系加入ARP缓存表。
ARP断网攻击就是利用了这个原理,C不断的像A发送ARP应答包,告诉A,IP为192.168.1.1的网关的地址就是指向我的!于是A每次前往192.168.1.1这个地址的时候,都去了C那里。就这样,C就可以控制A能否上网。
由于现在普遍都是双向欺骗,所以,C还会去欺骗网关。C会给网关发送一个ARP应答包,告诉网关,192.168.1.2的地址是指向我的,你只要将发送给这个地址的数据包都发给我就可以了!于是,网关B就会更新自己的ARP缓存,将去A的数据包都发给攻击者C。
就这样,C就成了A和B中间的一个人。C掌控着A和B通信的中心,C想让AB之间能通信就开启自身的IP转发功能,将A发过来的数据包发给B,将B发过来的数据包发给A,中间的流量C都可以嗅探到,这就形成了ARP欺骗。而ARP断网就是C不开启自身的IP转发功能,那么A就无法到达B,B也无法到达A,C将中间的通信路线给截断了,A当然就无法上网了,都找不到网关了,如何上网?
先理解协议,再做实验,然后总结,最后再理解协议,总结,实验。果然理解的比较深刻了!