使用ARP命令來綁定IP與MAC地址
發表時間:2023-07-16 來源:明輝站整理相關軟件相關文章人氣:
[摘要]前言:我本來沒有想過寫關于ARP綁定的文章, 坦白的說一句, 在你理解ARP工作的原理時, 這其實比較簡單。 只是看到最近論壇很多人在問關于綁定IP和MAC地址的問題, 所以才決定寫這個文章,...
前言:我本來沒有想過寫關于ARP綁定的文章, 坦白的說一句, 在你理解ARP工作的原理時, 這其實比較簡單。 只是看到最近論壇很多人在問關于綁定IP和MAC地址的問題,
所以才決定寫這個文章, 希望能一勞永逸。
作為企業級的路由防火墻, ISA Server并沒有提供對于MAC地址的控制功能。 不過, 你可以使用Windows的命令ARP來實現IP地址和MAC地址的綁定。 這篇文章介紹了Windows下ARP協議工作的原理, 以及如何使用ARP命令來靜態綁定IP地址和MAC地址。
ISA Server中沒有提供對于MAC地址的控制功能, Why?這是因為MAC地址只能在本地網絡中使用, 當數據包跨越路由器時, 數據包中主機的源MAC地址就會被路由器的出站接口的MAC地址所代替, 這個時候, 使用MAC地址來進行控制就不適用了。 所以只要是企業級的硬件或者軟件防火墻, 都基本沒有提供對MAC地址的控制功能。
不過微軟也早就考慮到了這點, 在Windows中, 如果你安裝了TCP/IP網絡協議組件, 那么你就可以執行命令ARP。 ARP命令的作用是查看本機的ARP緩存、靜態綁定IP地址和MAC地址和刪除靜態綁定項。 其實綁定IP地址和MAC地址的本意是為了減少ARP廣播流量, 只是可以利用這一功能來控制IP地址的使用。
在這里我還是先簡單的描述一下Windows下ARP協議的工作原理。 ARP協議(Address Resolve Protocol, 地址解析協議)工作在TCP/IP協議的第二層-數據鏈路層, 用于將IP地址轉換為網絡接口的硬件地址(媒體訪問控制地址, 即MAC地址)。
無論是任何高層協議的通訊, 最終都將轉換為數據鏈路層硬件地址的通訊。
每臺主機都具有一個用于緩存MAC地址的ARP緩存列表, 你可以使用命令ARP -a或ARP -g來查看當前的ARP緩存列表。 此ARP緩存列表是動態更新的, 默認情況下, 當其中的緩存項超過兩分鐘沒有活動時, 此緩存項就會超時被刪除。 你可以使用ARP -s來靜態綁定IP地址和MAC地址, 不過在Windows server 2003和XP以前的Windows系統中, 就算你設置了靜態MAC地址綁定項, 同樣會通過接收其他主機的數據包而更新已經綁定的項。
在Windows server 2003和XP中, 靜態綁定的項不會被動態更新, 直到TCP/IP協議終止為止, 例如重啟計算機
。 如果要創建永久的靜態MAC地址綁定項, 你可以寫一個腳本文件來執行ARP靜態綁定, 然后使用計劃任務在啟動計算機時執行該腳本即可。
例如A主機的IP地址為192.168.0.1, 它現在需要與IP為192.168.0.8的主機(主機B)進行通訊, 那么將進行以下動作:
A主機查詢自己的ARP緩存列表, 如果發現具有對應于目的IP地址192.168.0.8的MAC地址項, 則直接使用此MAC地址項構造并發送以太網數據包, 如果沒有發現對應的MAC地址項則繼續下一步;
A主機發出ARP解析請求廣播, 目的MAC地址是FF:FF:FF:FF:FF:FF, 請求IP為192.168.0.8的主機回復MAC地址;
B主機收到ARP解析請求廣播后, 回復給A主機一個ARP應答數據包, 其中包含自己的IP地址和MAC地址;
A接收到B主機的ARP回復后, 將B主機的MAC地址放入自己的ARP緩存列表, 然后使用B主機的MAC地址作為目的MAC地址, B主機的IP地址(192.168.0.8)作為目的IP地址, 構造并發送以太網數據包;
如果A主機還要發送數據包給192.168.0.8, 由于在ARP緩存列表中已經具有IP地址192.168.0.8的MAC地址, 所以A主機直接使用此MAC地址發送數據包, 而不再發送ARP解析請求廣播;當此緩存地址項超過兩分鐘沒有活動(沒有使用)后, 此ARP緩存將超時被刪除。
默認情況下ARP緩存的超時時限是兩分鐘, 你可以在注冊表中進行修改。 可以修改的鍵值有兩個, 都位于
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
修改的鍵值:
鍵值1:ArpCacheLife, 類型為Dword, 單位為秒, 默認值為120
鍵值2:ArpCacheMinReferencedLife, 類型為Dword, 單位為秒, 默認值為600
注意:這些鍵值默認是不存在的, 如果你想修改, 必須自行創建;
修改后重啟計算機后生效
。
如果ArpCacheLife的值比ArpCacheMinReferencedLife的值大, 那么ARP緩存的超時時間設置為ArpCacheLife的值;如果ArpCacheLife的值不存在或者比ArpCacheMinReferencedLife的值小, 那么對于未使用的ARP緩存, 超時時間設置為120秒;對于正在使用的ARP緩存, 超時時間則設置為ArpCacheMinReferencedLife的值。
下圖是我們的試驗網絡結構, ISA Server作為一個邊緣防火墻, 內部局域網(192.168.0.0/24)通過ISA Server接入Internet。 在這個試驗中, 我將在ISA Server上綁定內部客戶True的IP地址192.168.0.8和MAC地址, 這樣, 當True不在線時, 另外一個內部客戶Fake就算修改自己的IP地址為True的IP地址192.168.0.8, 也不能通過ISA Server來上網。

各計算機的TCP/IP設置如下, 本次試驗不涉及DNS解析, 各服務器的DNS服務器設置為空, 在試驗之前已經確認了網絡連接工作正常:
ISA 2004 Firewall:
LAN Interface:
IP:192.168.0.1/24
DG:None
MAC:00:03:47:F4:FC:E7
True(將離線):
IP:192.168.0.8/24
DG:192.168.0.1
MAC:00:0D:60:C3:05:34
Fake(將修改IP地址為192.168.0.8):
IP:192.168.0.8/24
DG:192.168.0.1
MAC:00:06:D0:06:05:47
首先, 我在ISA Server上使用ARP -S來綁定True的IP地址和MAC地址, 運行命令:
ARP -s 192.168.0.8 00-0D-60-C3-05-34
然后執行ARP -a來查看ARP緩存列表, 結果如下圖所示。 你可以看到在ARP緩存列表中IP地址192.168.0.8的類型為static, 這表明它是靜態項。 此時, 我們在ISA Server上的綁定就成功了。

現在我們在客戶機Fake上, 將自己的IP地址修改為192.168.0.8, 然后Ping ISA Server:
C:\Documents and Settings\admin>ipconfig /all
Windows IP Configuration
Host Name . . . . . . . . . . . . : anonymous
Primary Dns Suffix . . . . . . . :
Node Type . . . . . . . . . . . . : Unknown
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
Ethernet adapter 本地連接:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Intel(R) PRO/100 VE Network Connection
Physical Address. . . . . . . . . : 00-06-D0-06-05-47
Dhcp Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 192.168.0.8
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.0.1
DNS Servers . . . . . . . . . . . : 192.168.0.1
C:\Documents and Settings\admin>ping 192.168.0.1 -n 2
Pinging 192.168.0.1 with 32 bytes of data:
Request timed out.
Request timed out.
Ping statistics for 192.168.0.1:
Packets: Sent = 2, Received = 0, Lost = 2 (100% loss),
Ping超時, Why?從Sniffer上捕獲的數據包可以更清楚的進行說明:
下圖是捕獲的數據包, 它描述了Fake(192.168.0.8) Ping 192.168.0.1的全部過程:

由于Fake(00:06:D0:06:05:47)沒有192.168.0.1的MAC地址, 所以Fake發送ARP地址解析請求廣播, 詢問192.168.0.1的MAC地址是什么;
ISA Server(00:03:47:F4:FC:E7)使用ARP應答回復Fake(00:06:D0:06:05:47), 告訴Fake自己的IP地址(192.168.0.1)和MAC地址;
獲得192.168.0.1的MAC地址后, Fake(192.168.0.8)向192.168.0.1發送PING請求數據包;
192.168.0.1向192.168.0.8回復PING回復數據包;
Fake(192.168.0.8)再次向192.168.0.1發送PING請求數據包;
192.168.0.1再次向192.168.0.8回復PING回復數據包;
這一切看起來沒有任何問題?那為什么Fake的Ping會超時呢?
這一切從表明上看是沒有任何問題, 但是仔細看捕獲的數據包的以太網頭部, 你就會發現問題所在:
首先, 我們看第三個數據包, Fake(192.168.0.8)向192.168.0.1發送的Ping請求, 如下圖所示, Fake以自己的MAC地址為源MAC地址、192.168.0.1的MAC地址(00:03:47:F4:FC:E7)為目的MAC地址發送數據包, 這沒有任何問題。

那么看看第四個ISA Server回復的Ping回復數據包呢, 源MAC地址是ISA Server的MAC地址(00:03:47:F4:FC:E7), 這也沒有問題, 但是注意看目的MAC地址, 00:0D:60:C3:05:34是離線的客戶機True的MAC地址。 還記得我們在ISA Server上做的IP地址(192.168.0.8)和MAC地址綁定嗎?
ISA Server直接使用自己ARP緩存中的靜態綁定項來發送數據, 而不是使用收到的Ping請求數據包中的源MAC地址來作為目的地址。
因此, Fake認為此數據包不是發給自己的, 不會處理此數據包, 所以認為沒有Ping回復數據包, 自然就是超時了。

最后說一下,
我不推薦大家使用靜態IP地址和MAC地址的綁定, 這會帶來更多的管理負荷。 你可以利用ISA Server強大的身份驗證功能, 結合IP地址來進行管理, 這樣具有更好的效果。 也請不要在論壇問我ARP命令是如何使用的, Windows的幫助是最好的老師。
上面是電腦上網安全的一些基礎常識,學習了安全知識,幾乎可以讓你免費電腦中毒的煩擾。