工作原理

ARP是Address Resolution Protocol(地址轉換協定)的簡稱,是TCP/IP協定中最底層的協定之一。它的作用是完成IP位址到MAC(物理地址)的轉換。在區域網路中兩台計算機之間的通訊,或者區域網路中的計算機將IP數據包轉發給網關的時候,網卡都需要知道目標計算機的物理地址,以填充物理幀中的目的地址。
假設同一乙太網中的計算機A(192.168.0.1)需要向計算機B(192.168.0.2)傳送數據報,而此時A尚不知道B的物理地址。為了獲得B的物理地址,A在區域網路上傳送ARP廣播,查詢192.168.0.2這個物理地址,同時在ARP包中填入自己的物理地址Ma,相當於發出這樣的詢問“誰拿了192.168.0.2這個地址?請回Ma這個物理地址。”計算機B在收到了這個查詢以後,以Ma為目的地址發回一個ARP包,裡面包含了自己的物理地址。這樣通訊的雙方都了解了對方的物理地址,通訊過程正式建立。

通常ARP協定都在支持廣播的網路上使用,比方乙太網,這種數據包不能跨物理網段使用,即不能跨越一個路由器(除路由器本身還用作ARP代理以外)。
在實際的ARP協定軟體的實現中還有一些應該注意的事項:每台計算機上都有一個ARP緩衝,它保存了一定數量的從IP位址到MAC地址的映射,同時當一個ARP廣播到來時,雖然這個ARP廣播可能與它無關,但ARP協定軟體也會把其中的物理地址與IP位址的映射記錄下來,這樣做的好處是能夠減少ARP報在區域網路上傳送的次數。同時,ARP緩衝中IP位址與物理地址之間的映射並不是一但生成就永久有效,每一個ARP映射表項都有自己的時延,如果過了一定的時間還沒有新的ARP到來,那么這個ARP映射就從緩衝中被刪除了。那么下一次計算機向這個IP位址傳送數據包的時候必須來一次新的查詢。

本地網路IP 查找的原理。事實上Windows 本身就用ARP來確定自己的IP位址是否與網路上的另一台計算機發生了衝突。當一個ARP包到來時,Windows 如果檢查到其中的IP位址與本機上的相同,而物理地址不同,這時Windows 就會向用戶報告這個IP位址已經被別人占用。非常有意思的是,Windows 對待IP位址是以先來後到的順序分配,如果已經有人先占了,那么本機的網路接口就會被禁用。這也是非常惱人的“特色”因為一旦開機後有了第一次衝突,以後的任何網路操作就都無效了。Windows XP 有了一定的進步,它在發現衝突以後並不禁用接口,而是允許用戶進行修復。其實用sniffer可以看到所謂的“修復”也不過是發了幾個ARP包出去,把IP“搶”回來。
在以前的文章中我描述了一個用ICMP 回送請求(類似PING)進行IP查找的程式。這個程式用並發的幾十個執行緒同時PING網路上的多台計算機,如果回送請求被正確的應答了,那么可以認為這個IP位址已經被占用,如果沒有,我們就宣稱它是空閒的。然而它有優點也有缺點,其優點是能夠PING很遠的計算機,即使不在同一個物理網段上,缺點是當目標計算機上安裝了防火牆並禁止了ICMP包,或者採用了防ICMP flood 攻擊的規則以後都有可能讓ICMP回送請求得不到應答。

ARP的優點與缺點正好與ICMP相反。它無法跨物理網段進行IP查找,但是由於沒有防火牆禁止ARP包的通過(想想看,如果禁止了ARP包,也就等於不讓人家知道你的物理地址,那么實際上也就是將自己的計算機同網路斷開了),所以ARP包的IP查找結果一定是非常精準的。
在實現了一個原始的ARP IP查找版本以後,我發現其結果並不準確,有些已經沒有人使用的IP位址被錯誤的報成有人占用了,難道我的判斷是錯誤的?當然不,這種錯誤的原因是在Windows 的ARP緩衝中。實際上,在傳送一個ARP報文的時候,Windows會首先檢查本機的ARP緩衝,如果發現了已經有對應的ARP表項,而且還沒有過期的話,Windows 並不會傳送這個報文,而是直接返回給調用者這個ARP表項的內容。這樣一來,假設有計算機中途掉網,而它的ARP表項還沒有過期,那么這個程式仍然能夠得到它的IP到MAC的映射,自然也就會錯誤的宣稱這個IP位址還在使用中了。在運行這個程式前,我使用arp –d(事實上,在看了本文以後,你就可以實現一個這樣的arp程式了)這個命令來刪除緩衝中所有的ARP表項,然後得到的結果就非常準確了。IP Helper API 提供了管理ARP緩衝的過程,所以我修改了這個程式,把arp –d的功能集成到了自己的程式中來。如果看看《使用TCP/IP協定實際網際互連(第二卷)》你就會明白ARP協定軟體中的諸多問題。
IP Helper API GetIpNetTable 函式能夠提取出本機上的所有ARP表項。使用它的方法與上一篇文章中使用的函式相當的類似,你也必須兩次使用它,第一次獲得緩衝的大小,而第二次獲得實際的ARP表。這個映射表是以數組的方式指出的。其結構如下:
typedef struct _MIB_IPNETTABLE {
DWORD dwNumEntries; //數組的大小
MIB_IPNETROW table[ANY_SIZE]; //數組本身
} MIB_IPNETTABLE, *PMIB_IPNETTABLE;
而MIB_IPNETROW 的定義:
typedef struct _MIB_IPNETROW {
DWORD dwIndex; // 網路接口的索引號
DWORD dwPhysAddrLen; // 物理地址長度
BYTE bPhysAddr[MAXLEN_PHYSADDR]; // 物理地址
DWORD dwAddr; // IP位址

DWORD dwType; // ARP表項類型
} MIB_IPNETROW, *PMIB_IPNETROW;
其中dwType 即ARP表項類型是比較重要的東西,因為某些ARP表項一但設定就不再改變,比方本機地址的ARP表項和默認網關的地址表項等等,這些ARP表項並不會“過期”,除非網路故障或者設定改變了以後,會重新生成一次ARP查詢。這種表項被稱為“靜態”的。此時dwType的值為4。在程式中,我們不必刪除這類表項(雖然刪了它們也不會造成什麼後果)。
然而在實際的程式中,我使用了FlushIPNetTable這個函式來刪除特定網卡上的ARP緩衝。
然後是刪除一個表項的DeleteIpNetEntry,修改表項的SetIpNetEntry 和添加表項的CreateIpNetEntry 。還有兩個管理代理ARP表項的函式,關於代理ARP,可以看看《使用TCP/IP 協定實現網際互連(第一卷)》關於ARP代理的部分,由於與我們的程式無關,就不做介紹了。
最後需要詳述的函式是SendARP。它的原型如下:
DWORD SendARP(
IPAddr DestIP, // 目的IP 地址
IPAddr SrcIP, // 源IP位址,可選參數,把它填成0不會有問題
PULONG pMacAddr, // 返回的物理地址
PULONG PhyAddrLen // 物理地址的長度
主流ARP防火牆及其測評
國內防火牆新興力量,風雲防火牆。風雲防火牆將秉持自己的簡約而不簡單的核心開發思想,認真綜合、考慮用戶的建議,開發、整合適於當前網路時代防火牆趨勢與理念的功能,為用戶提供防護優秀、功能實用、操作簡單、占用資源低的風雲防火牆。

2.奇虎360ARP防火牆

360ARP防火牆通過在系統核心層攔截ARP攻擊數據包,確保網關正確的MAC地址不被篡改,可以保障數據流向正確,不經過第三者,從而保證通訊數據安全、保證網路暢通、保證通訊數據不受第三者控制,完美的解決區域網路內ARP攻擊問題。
ARP防火牆採用核心層攔截技術和主動防禦技術,幾大功能模組(攔截ARP攻擊/攔截IP衝突/DoS攻擊抑制/安全模式/ARP數據分析/監測ARP快取/主動防禦/追蹤攻擊源/查殺ARP病毒/系統時間保護/IE首頁保護/ARP快取保護/自身進程保護/智慧型防禦)互相配合,可徹底解決ARP相關問題,扼殺DoS攻擊源。

瑞星就不用多介紹了,國內老牌的安全軟體廠商。
專門查殺並可輔助查殺各種木馬、流氓軟體、利用rootkit技術的各種後門和其它惡意代碼(間諜軟體、蠕蟲病毒)等等。提供了多種專業工具,提供系統/IE修復、隱私保護和安全最佳化功能,提供了全面的系統監測功能,使你對系統的變化了如指掌,配合手動分析可近100%的查殺未知惡意代碼!


金山公司出品的,不多作介紹了。
ARP攻擊軟體:p2p終結者(選用原因:家庭版免費,熱門)
下載軟體:超級鏇風(選用原因:迅雷下載被禁止)
電信10MADSL共享頻寬,5台電腦組建的內部網
使用超級鏇風作為下載軟體
下載資源統一為: 《火影忍者》第284-285話
大小:179.75MB見圖7:

網頁瀏覽限制
IM通訊限制
下載限制
網頁瀏覽正常
IM通訊正常
下載速度(圖8)

速度比較穩定,基本上維持在650K左右。圖9:

網頁無法打開,圖10:

IM通訊被限制,QQ灰掉了。
明顯受到影響,有650K左右的下載速度,下降到幾十K左右,乃至幾K,見圖11所示:

ARP欺騙規則(圖12)

讓我們來看看風雲防火牆的表現。
運行ARP欺騙後,在風雲防火牆的保護下,網頁可以正常瀏覽,速度也無明顯下降
這裡以QQ為例,在ARP欺騙的情況下,風雲防火牆提供了有效的保護,可以正常使用IM
在ARP欺騙的情況下,下載速度未見受到多大影響,仍保持600K左右,風雲防火牆的保護還是不錯的

風雲防火牆沒有關於ARP攻擊的次數統計,不過,記錄下攻擊日誌記錄

360ARP防火牆的攻擊警報

雖然檢測到ARP攻擊,但是,早360ARP防火牆的保護下,網頁瀏覽正常
在360ARP防火牆的保護下,IM可以正常使用
360ARP防火牆雖然攔截了ARP攻擊,但是下載速度卻受到影響,掉到幾十K左右

測試期間,累計攔截次數8445次

彩影ARP防火牆個人版在安裝過程當中會提示關閉安全防護軟體

彩影ARP防火牆個人版只有設定為合作版才是免費使用軟體,軟體安裝完成運行後會有提示

點擊“是”以後,重啟軟體即可轉換成免費的合作版

在彩影ARP防火牆個人版的保護下,網頁可以正常瀏覽
在彩影ARP防火牆個人版的保護下,IM可以正常使用
在彩影ARP防火牆的保護下,下載受到的影響較小,降到500多K左右,速度也比較穩定

日誌記錄
測試期間,累計攔截ARP攻擊次數7207

瑞星防火牆安裝後運行就會提示你啟用ARP欺騙防禦

瑞星防火牆很快就攔截到ARP攻擊,並彈出警告,

提示操作選單

在瑞星防火牆的保護下,網頁可以正常瀏覽,但是速度緩慢
在瑞星防火牆的保護下,IM可以正常通訊
瑞星防火牆的防護效果不盡如人意,在ARP欺騙攻擊下,下載速度由600多K下降到幾K,瑞星防火牆的表現令人失望

瑞星防火牆的日誌記錄下攻擊信息

開啟超級巡警的反ARP欺騙功能

在超級巡警的保護下,網頁可以正常瀏覽,不過,速度明顯下降
QQ聊天正常,就是表情打開要很長時間
超級巡警的防護效果不盡如人意,在開了反ARP欺騙功能之後,下載速度還是被拖累下來,掉到幾K左右,

超級巡警目前版本只提供掃描日誌記錄,沒有ARP欺騙攻擊記錄。
網頁瀏覽正常,速度未受到太大影響
在金山ARP防火牆的保護下,IM通訊正常
由於網路不暢的原因,下載速度沒有之前那么流暢,下載速度降到幾十K左右,這裡記錄下,進行ARP欺騙攻擊前後的下載速度比較。
進行ARP欺騙前的下載速度

進行ARP攻擊後的下載速度

在ARP欺騙攻擊下,下載速度略有下降,金山ARP防火牆的保護功能還是不錯的。
日誌記錄
金山ARP防火牆準確地記錄下攻擊源的IP位址等信息

資源占用
風雲防火牆2160K
奇虎360arp防火牆3872K
彩影ARP防火牆個人版7488K
瑞星防火牆5476K
超級巡警8008K
金山防火牆752K

防護情況

在經過一段時間的測評之後,小編的經驗是:
如果作業系統是:windowsxp、windows2000、windows2003的話,最佳的選擇是風雲防火牆。作為國內新興的防火牆,風雲操作簡單易用,即便是新手使用也不會感到吃力。除了可以為PC提供不錯的ARP防護外,還可以提供TCP/IP終止、SSL終止、URL過濾、請求分析、會話跟蹤等全面防護。
如果作業系統是VISTA的話,最佳的選擇莫過於金山ARP防火牆了。金山ARP防火牆的安裝檔案僅649K,資源占用區區752K,而ARP防護能力卻著實不弱,值得考慮。另外,彩影ARP防火牆個人版的ARP防護能力也不遜於金山ARP防火牆,只是安裝檔案比金山的要大,記憶體占用多一點
相關詞條
ARP防火牆MAC地址數據安全Dos攻擊