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當然就無法上網了,都找不到網關了,如何上網?
先理解協議,再做實驗,然后總結,最后再理解協議,總結,實驗。果然理解的比較深刻了!