ARP協(xié)議詳解及如何編程實(shí)現(xiàn)ARP攻擊
ARP協(xié)議詳解及如何編程實(shí)現(xiàn)ARP攻擊[轉(zhuǎn)載]
一.關(guān)于ARP協(xié)議的基礎(chǔ)知識(shí)
1.ARP的工作原理
本來(lái)我不想在此重復(fù)那些遍地都是的關(guān)于ARP的基本常識(shí),但是為了保持文章的完整性以及照顧初學(xué)者,我就再啰嗦一些文字吧,資深讀者可以直接跳過(guò)此節(jié)。
我們都知道以太網(wǎng)設(shè)備比如網(wǎng)卡都有自己全球唯一的MAC地址,它們是以MAC地址來(lái)傳輸以太網(wǎng)數(shù)據(jù)包的,但是它們卻識(shí)別不了我們IP包中的IP地址,所以我們?cè)谝蕴W(wǎng)中進(jìn)行IP通信的時(shí)候就需要一個(gè)協(xié)議來(lái)建立IP地址與MAC地址的對(duì)應(yīng)關(guān)系,以使IP數(shù)據(jù)包能發(fā)到一個(gè)確定的地方去。這就是ARP(Address Resolution Protocol,地址解析協(xié)議)。
講到此處,我們可以在命令行窗口中,輸入
arp –a
來(lái)看一下效果,類似于這樣的條目
210.118.45.10000-0b-5f-e6-c5-d7dynamic
就是我們電腦里存儲(chǔ)的關(guān)于IP地址與MAC地址的對(duì)應(yīng)關(guān)系,dynamic表示是臨時(shí)存儲(chǔ)在ARP緩存中的條目,過(guò)一段時(shí)間就會(huì)超時(shí)被刪除(xp/2003系統(tǒng)是2分鐘)。
這樣一來(lái),比如我們的電腦要和一臺(tái)機(jī)器比如210.118.45.1通信的時(shí)候,它會(huì)首先去檢查arp緩存,查找是否有對(duì)應(yīng)的arp條目,如果沒(méi)有,它就會(huì)給這個(gè)以太網(wǎng)絡(luò)發(fā)ARP請(qǐng)求包廣播詢問(wèn)210.118.45.1的對(duì)應(yīng)MAC地址,當(dāng)然,網(wǎng)絡(luò)中每臺(tái)電腦都會(huì)收到這個(gè)請(qǐng)求包,但是它們發(fā)現(xiàn)210.118.45.1并非自己,就不會(huì)做出相應(yīng),而210.118.45.1就會(huì)給我們的電腦回復(fù)一個(gè)ARP應(yīng)答包,告訴我們它的MAC地址是xx-xx-xx-xx-xx-xx,于是我們電腦的ARP緩存就會(huì)相應(yīng)刷新,多了這么一條:
210.118.45.1xx-xx-xx-xx-xx-xxdynamic
為什么要有這么一個(gè)ARP緩存呢,試想一下如果沒(méi)有緩存,我們每發(fā)一個(gè)IP包都要發(fā)個(gè)廣播查詢地址,豈不是又浪費(fèi)帶寬又浪費(fèi)資源?
而且我們的網(wǎng)絡(luò)設(shè)備是無(wú)法識(shí)別ARP包的真?zhèn)蔚?,如果我們按照ARP的格式來(lái)發(fā)送數(shù)據(jù)包,只要信息有效計(jì)算機(jī)就會(huì)根據(jù)包中的內(nèi)容做相應(yīng)的反應(yīng).
試想一下,如果我們按照ARP響應(yīng)包的相應(yīng)的內(nèi)容來(lái)刷新自己的ARP緩存中的列表,嘿嘿,那我們豈不是可以根據(jù)這點(diǎn)在沒(méi)有安全防范的網(wǎng)絡(luò)中玩些ARP包的小把戲了?在后面的文章里我就手把手來(lái)教你們?nèi)绾翁畛浒l(fā)送ARP包,不過(guò)先別急,我們?cè)倮^續(xù)學(xué)點(diǎn)基礎(chǔ)知識(shí)^_^
2.ARP包的格式
既然我們要來(lái)做一個(gè)我們自己的ARP包,當(dāng)然首先要學(xué)習(xí)一下ARP包的格式。
從網(wǎng)絡(luò)底層看來(lái),一個(gè)ARP包是分為兩個(gè)部分的,前面一個(gè)是物理幀頭,后面一個(gè)才是ARP幀。
首先,物理幀頭,它將存在于任何一個(gè)協(xié)議數(shù)據(jù)包的前面,我們稱之為DLC Header,因?yàn)檫@個(gè)幀頭是在數(shù)據(jù)鏈路層構(gòu)造的,并且其主要內(nèi)容為收發(fā)雙方的物理地址,以便硬件設(shè)備識(shí)別。
DLC Header
字段
長(zhǎng)度(Byte)
默認(rèn)值
備注
接收方MAC
6
廣播時(shí),為 ff-ff-ff-ff-ff-ff
發(fā)送方MAC
6
Ethertype
2
0x0806
0x0806是ARP幀的類型值
圖1 物理幀頭格式
圖1是需要我們填充的物理幀頭的格式,我們可以看到需要我們填充的僅僅是發(fā)送端和接收端的物理地址罷了,是不是很簡(jiǎn)單呢?
接下來(lái)我們看一下ARP幀的格式.
ARP Frame
字段
長(zhǎng)度(Byte)
默認(rèn)值
備注
硬件類型
2
0x1
以太網(wǎng)類型值
上層協(xié)議類型
2
0x0800
上層協(xié)議為IP協(xié)議
MAC地址長(zhǎng)度
1
0x6
以太網(wǎng)MAC地址長(zhǎng)度為 6
IP地址長(zhǎng)度
1
0x4
IP地址長(zhǎng)度為 4
操作碼
2
0x1表示ARP請(qǐng)求包,0x2表示應(yīng)答包
發(fā)送方MAC
6
發(fā)送方IP
4
<p style="margin-top:0px; margin-bottom:10px; padding-top:0px;