再仔細(xì)看了一下ARP數(shù)據(jù)包,終于恍然大悟欺騙原理。
是這樣的,為了能和其他機(jī)器通訊,局域網(wǎng)上的各個(gè)機(jī)器都緩存了ARP列表(ARP列表可以簡(jiǎn)單理解成“一個(gè)IP地址對(duì)應(yīng)一個(gè)MAC地址”)。機(jī)器要通過網(wǎng)關(guān)和其他機(jī)器通訊,其實(shí)是在局域網(wǎng)內(nèi)發(fā)了查詢ARP請(qǐng)求(可以簡(jiǎn)單理解成“網(wǎng)關(guān)啊,請(qǐng)把你的MAC地址告訴我好嗎?”);網(wǎng)關(guān)收到此類請(qǐng)求后,就會(huì)發(fā)送ARP回應(yīng)報(bào)文,回應(yīng)網(wǎng)關(guān)的MAC。這樣,某個(gè)機(jī)器就會(huì)把通訊數(shù)據(jù)發(fā)到網(wǎng)關(guān)的MAC上。
那么運(yùn)行了p2pOver之類的軟件后是怎么欺騙的呢?簡(jiǎn)單起見,我們?cè)O(shè)使用了p2pOver的機(jī)器為”A”,”A”的MAC地址為”M”。
首先,”A”通過ARP查詢得到真實(shí)的網(wǎng)關(guān)MAC,和不停地輪詢局域網(wǎng)上其他主機(jī)(IP)及其MAC。
其次,”A”不停地給局域網(wǎng)上其他主機(jī)發(fā)送偽造的ARP回應(yīng)報(bào)文:告訴他們網(wǎng)關(guān)的MAC是”M”;
同時(shí),”A”也不停給交換機(jī)發(fā)送偽造的ARP回應(yīng)報(bào)文:告訴真正的網(wǎng)關(guān)局域網(wǎng)上所有主機(jī)的MAC地址為”M”。
因?yàn)槭遣煌5匕l(fā)送報(bào)文,到了最后:局域網(wǎng)上的其他主機(jī)以為網(wǎng)關(guān)就是”A”,真正的網(wǎng)關(guān)以為局域網(wǎng)上的所有通訊只來自”A”。也就是”A”變成了事實(shí)上的中轉(zhuǎn)中心:不僅可以截取其他主機(jī)的流量和數(shù)據(jù),還能隨心所欲地截?cái)嗑W(wǎng)絡(luò)通訊。
ARP欺騙防治從欺騙原理,不難推出防治關(guān)鍵就是想辦法不接收錯(cuò)誤的ARP回應(yīng)報(bào)文:
1) 使用智能交換機(jī),綁定網(wǎng)內(nèi)所有IP-MAC。這樣也就不需要ARP查詢才能知道MAC。
2) 還有一個(gè)辦法,就是在網(wǎng)內(nèi)所有機(jī)器上綁定死網(wǎng)關(guān)的MAC(下面適用于WinXP):
在網(wǎng)絡(luò)正常情況下:
arp -a 網(wǎng)關(guān)IP(如192.168.1.1),查詢到正確的網(wǎng)關(guān)MAC
然后綁定網(wǎng)關(guān)MAC:
arp -s 網(wǎng)關(guān)IP 網(wǎng)關(guān)MAC在執(zhí)行arp -a,看到網(wǎng)關(guān)IP和MAC是靜態(tài)(Static)的,就可以了