首先說一下什么是ARP。如果你在UNIX Shell下輸入 arp -a (9x下也是),你的輸出看起來應(yīng)該是這樣的:
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地址對應(yīng)的網(wǎng)絡(luò)接口卡的硬件地址(MAC),第三列是該ip和mac的對應(yīng)關(guān)系類型。
可見,arp是一種將ip轉(zhuǎn)化成以ip對應(yīng)的網(wǎng)卡的物理地址的一種協(xié)議,或者說ARP協(xié)議是一種將ip地址轉(zhuǎn)化成MAC地址的一種協(xié)議。它靠維持在內(nèi)存中保存的一張表來使ip得以在網(wǎng)絡(luò)上被目標(biāo)機(jī)器應(yīng)答。
為什么要將ip轉(zhuǎn)化成mac呢?簡單的說,這是因為在tcp網(wǎng)絡(luò)環(huán)境下,一個ip包走到哪里,要怎么走是靠路由表定義。但是,當(dāng)ip包到達(dá)該網(wǎng)絡(luò)后,哪臺機(jī)器響應(yīng)這個ip包卻是靠該ip包中所包含的mac地址來識別。也就是說,只有機(jī)器的mac地址和該ip包中的mac地址相同的機(jī)器才會應(yīng)答這個ip包。因為在網(wǎng)絡(luò)中,每一臺主機(jī)都會有發(fā)送ip包的時候。所以,在每臺主機(jī)的內(nèi)存中,都有一個 arp--> mac 的轉(zhuǎn)換表。通常是動態(tài)的轉(zhuǎn)換表(注意在路由中,該arp表可以被設(shè)置成靜態(tài))。也就是說,該對應(yīng)表會被主機(jī)在需要的時候刷新。這是由于以太網(wǎng)在子網(wǎng)層上的傳輸是靠48位的mac地址而決定的。
通常主機(jī)在發(fā)送一個ip包之前,它要到該轉(zhuǎn)換表中尋找和ip包對應(yīng)的mac地址。如果沒有找到,該主機(jī)就發(fā)送一個ARP廣播包,看起來象這樣子:
"我是主機(jī)xxx.xxx.xxx.xxx , mac是xxxxxxxxxxx ,ip為xxx.xxx.xxx.xx1的主機(jī)請告之你的mac來"
ip為xxx.xxx.xxx.xx1的主機(jī)響應(yīng)這個廣播,應(yīng)答ARP廣播為:
"我是xxx.xxx.xxx.xx1,我的mac為xxxxxxxxxx2"
于是,主機(jī)刷新自己的ARP緩存,然后發(fā)出該ip包。
了解這些常識后,現(xiàn)在就可以談在網(wǎng)絡(luò)中如何實現(xiàn)ARP欺騙了,可以看看這樣一個例子:
一個入侵者想非法進(jìn)入某臺主機(jī),他知道這臺主機(jī)的防火墻只對192.0.0.3(假設(shè))這個ip開放23口(telnet),而他必須要使用telnet來進(jìn)入這臺主機(jī),所以他要這么做:
1、他先研究192.0.0.3這臺主機(jī),發(fā)現(xiàn)這臺95的機(jī)器使用一個oob就可以讓他死掉。
2、于是,他送一個洪水包給192.0.0.3的139口,于是,該機(jī)器應(yīng)包而死。
3、這時,主機(jī)發(fā)到192.0.0.3的ip包將無法被機(jī)器應(yīng)答,系統(tǒng)開始更新自己的arp對應(yīng)表。將192.0.0.3的項目搽去。
4、這段時間里,入侵者把自己的ip改成192.0.0.3
5、他發(fā)一個ping(icmp 0)給主機(jī),要求主機(jī)更新主機(jī)的arp轉(zhuǎn)換表。
6、主機(jī)找到該ip,然后在arp表中加入新的ip-->mac對應(yīng)關(guān)系。
7、防火墻失效了,入侵的ip變成合法的mac地址,可以telnet了。