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