ARP欺騙的實(shí)現(xiàn)
ARP欺騙是用處很大的一個(gè)技術(shù),我們的路由器整天在欺騙我們的PC,沒(méi)有這個(gè)欺騙我們就不能上網(wǎng)。
先稍微說(shuō)下我們每天經(jīng)歷的ARP欺騙,比如早上開(kāi)路由器開(kāi)PC,我們上Google,PC在發(fā)送IP包之前(假設(shè)Google的IP為173.194.72.94,當(dāng)然事先要先通過(guò)DNS服務(wù)器獲取Google的IP,這個(gè)不多談)要先這個(gè)IP包裝配為以太網(wǎng)幀,所以PC必須要知道Google服務(wù)器端MAC,才能填充好以太網(wǎng)幀。要想知道Google的MAC地址,我們的PC就要發(fā)送ARP廣播請(qǐng)求,跟你一個(gè)局域網(wǎng)里的所有以太網(wǎng)設(shè)備都能收到這個(gè)請(qǐng)求,你希望有人告訴自己與173.194.72.94匹配的MAC地址是多少,因?yàn)槲覀兊腜C跟Google的服務(wù)器不在一個(gè)局域網(wǎng)里,所以Google服務(wù)器沒(méi)法收到你的ARP請(qǐng)求,但是如果這個(gè)局域網(wǎng)中有其他PC知道的話,它收到這個(gè)請(qǐng)求就會(huì)給你發(fā)送ARP應(yīng)答告訴你,如果沒(méi)人知道怎么辦?只能靠騙了!這個(gè)騙子就是路由器,這也是它的一個(gè)職責(zé)。路由器用自己的MAC地址冒充Google服務(wù)器的MAC地址,給你發(fā)ARP應(yīng)答糊弄你,你收到應(yīng)答后喜得不行,然后把所有幀都發(fā)給了路由器。下面我們就看路由器時(shí)怎么欺騙你的。
路由器能捕捉到這個(gè)局域網(wǎng)里廣播幀,假設(shè)路由器捕捉到的PC的ARP廣播幀寫(xiě)成十六進(jìn)制為:
[plain]
FFFFFFFFFFFFCE1A8206DA0708060001080006040001CE1A820C6B07C0A8127A000000000000C0A8127B00000B00482A00000D00000060FB5EFB61FB
按以太網(wǎng)幀結(jié)構(gòu)把這個(gè)幀分解后為:
[cpp]
FFFFFFFFFFFF---目的MAC,因?yàn)槭菑V播幀,所以MAC地址全為1
CE1A8206DA07---源MAC,這里就是你PC的MAC
0806—---幀類型(以太網(wǎng)幀都是這個(gè)數(shù))
0001----硬件類型(以太網(wǎng)幀都是這個(gè)數(shù))
0800----協(xié)議類型(以太網(wǎng)幀都是這個(gè)數(shù))
06----硬件地址長(zhǎng)度(以太網(wǎng)幀都是這個(gè)數(shù))
04----協(xié)議地址長(zhǎng)度(以太網(wǎng)幀都是這個(gè)數(shù))
0001—---操作字段(0001為ARP請(qǐng)求,0002為ARP應(yīng)答)
CE1A820C6B07---源mac,還是你的PC的MAC地址
C0A8127A-------源IP地址,就是你的PC的ip
000000000000---目的mac,因?yàn)椴恢溃园堰@6個(gè)字節(jié)胡亂填充一下就好
ADC2485E-------目的ip,就是Google的IP
00000B00482A00000D00000060FB5EFB61FB---這18個(gè)字節(jié)都是填充,就是為了湊夠以太網(wǎng)幀最小長(zhǎng)度60字節(jié)
然后路由器收到PC的ARP廣播請(qǐng)求后就給你發(fā)送應(yīng)答,這個(gè)應(yīng)答幀為:
[plain]
CE1A8206DA07000A3501FA1708060001080006040002000A3501FA17ADC2485ECE1A8206DA07C0A8127A00000B00482A00000D00000060FB5EFB61FB
按照以太網(wǎng)幀格式拆分后為:
[cpp]
CE1A8206DA07---目的MAC,ARP應(yīng)答不是廣播幀,它直接把PC的MAC地址當(dāng)成目的MAC
000A3501FA17---源MAC,這個(gè)是冒牌的,值本來(lái)該是Google服務(wù)器的MAC地址,但是這里路由器用自己的MAC來(lái)冒充
0806—---幀類型(以太網(wǎng)幀都是這個(gè)數(shù))
0001----硬件類型(以太網(wǎng)幀都是這個(gè)數(shù))
0800----協(xié)議類型(以太網(wǎng)幀都是這個(gè)數(shù))
06----硬件地址長(zhǎng)度(以太網(wǎng)幀都是這個(gè)數(shù))
04----協(xié)議地址長(zhǎng)度(以太網(wǎng)幀都是這個(gè)數(shù))
0002—---操作字段(1為ARP請(qǐng)求,2為ARP應(yīng)答)
000A3501FA17---源MAC
ADC2485E-------源IP地址,這個(gè)必須是ARP請(qǐng)求中的那個(gè)目的IP,也就是Google的IP。這個(gè)是重中之重,我的代碼在這犯過(guò)錯(cuò)誤,如果PC收到應(yīng)答后檢查這個(gè)IP發(fā)現(xiàn)與自己請(qǐng)求的目的IP不一樣,心說(shuō),莫名其妙,我什么時(shí)候請(qǐng)求這個(gè)IP的MAC地址了?滾!它就會(huì)果斷拋棄這個(gè)幀,然后繼續(xù)請(qǐng)求,誰(shuí)知道Google的MAC地址呀?。?!
CE1A8206DA07---目的mac也就是PC的MAC地址
C0A8127A-------目的ip,就是PC的IP
00000B00482A00000D00000060FB5EFB61FB---這18個(gè)字節(jié)都是填充,為了湊夠以太網(wǎng)幀最小長(zhǎng)度60字節(jié),這個(gè)應(yīng)答完全照抄了請(qǐng)求的填充,這些數(shù)都無(wú)所謂。
PC在收到這個(gè)幀后,就真以為那個(gè)MAC地址是Google的,然后就把幀一股腦全發(fā)給路由器了。之后你就可以上Google了。


















