首先說一下什麼是ARP。如果你在UNIX Shell下輸入 arp -a (9x下也是),你的輸出看起來應該是這樣的:
Interface: xxx.xxx.xxx.xxx
Internet Address Physical Address Type
xxx.xxx.xxx.xxx 00-00-93-64-48-d2 dynamic
xxx.xxx.xxx.xxx 00-00-b4-52-43-10 dynamic
...... ......... ....
這裡第一列顯示的是ip地址,第二列顯示的是和ip地址對應的網路介面卡的硬體地址(MAC),第三列是該ip和mac的對應關聯類型。
可見,arp是一種將ip轉化成以ip對應的網卡的物理地址的一種協議,或者說ARP協議是一種將ip地址轉化成MAC地址的一種協議。它靠維持在記憶體中儲存的一張表來使ip得以在網路上被目標機器應答。
為什麼要將ip轉化成mac呢?簡單的說,這是因為在tcp網路環境下,一個ip包走到哪裡,要怎麼走是靠路由表定義。但是,當ip包到達該網路後,哪台機器響應這個ip包卻是靠該ip包中所包含的mac地址來識別。也就是說,只有機器的mac地址和該ip包中的mac地址相同的機器才會應答這個ip包。因為在網路中,每一台主機都會有發送ip包的時候。所以,在每台主機的記憶體中,都有一個 arp--> mac 的轉換表。通常是動態轉換表(注意在路由中,該arp表可以被設定成靜態)。也就是說,該對應表會被主機在需要的時候重新整理。這是由於乙太網路在子網層上的傳輸是靠48位的mac地址而決定的。
通常主機在發送一個ip包之前,它要到該轉換表中尋找和ip包對應的mac地址。如果沒有找到,該主機就發送一個ARP廣播包,看起來象這樣子:
"我是主機xxx.xxx.xxx.xxx , mac是xxxxxxxxxxx ,ip為xxx.xxx.xxx.xx1的主機請告之你的mac來"
ip為xxx.xxx.xxx.xx1的主機響應這個廣播,應答ARP廣播為:
"我是xxx.xxx.xxx.xx1,我的mac為xxxxxxxxxx2"
於是,主機重新整理自己的ARP緩衝,然後發出該ip包。
瞭解這些常識後,現在就可以談在網路中如何?ARP欺騙了,可以看看這樣一個例子:
一個入侵者想非法進入某台主機,他知道這台主機的防火牆只對192.0.0.3(假設)這個ip開放23口(telnet),而他必須要使用telnet來進入這台主機,所以他要這麼做:
1、他先研究192.0.0.3這台主機,發現這台95的機器使用一個oob就可以讓他死掉。
2、於是,他送一個洪水包給192.0.0.3的139口,於是,該機器應包而死。
3、這時,主機發到192.0.0.3的ip包將無法被機器應答,系統開始更新自己的arp對應表。將192.0.0.3的項目搽去。
4、這段時間裡,入侵者把自己的ip改成192.0.0.3
5、他發一個ping(icmp 0)給主機,要求主機更新主機的arp轉換表。
6、主機找到該ip,然後在arp表中加入新的ip-->mac對應關係。
7、防火牆失效了,入侵的ip變成合法的mac地址,可以telnet了。
參考:
http://www.pconline.com.cn/pcjob/nettech/safe/others/0501/548188.html
http://tech.ccidnet.com/art/3089/20061019/926729_1.html