小編最近在折磨ARP,也在被ARP折磨,囧,不過還好,小有收穫的感覺還不錯。
關於ARP協議的三三兩兩小編之前在《有了IP和MAC,為什麼還需要ARP?》一文中有過介紹,在此就不再多說ARP協議本身是怎麼一回事了,只是想說一個ARP使用上的技巧。
做過網絡管理員的同學應該都遇到過這種情況,當判斷一臺PC是不是處於開機在線狀態時可能最先想到的就是PING一下那臺PC的IP位址,能PING通表示在線,PING不通……可能在線也可能不在線。為什麼這麼說?因為PC上可能運行著防火牆軟體,WINDOWS自帶的防火牆也好,第三方防火牆也好,默認設置都會攔截下PING入本機的「請求」數據包,這導致PING「請求」發出方收不到回應,超過時間後便會顯示TIME OUT提示,雖然PING不通,但我們卻無法依此確定此PC是不是在線,那有沒有簡單有效的方法來判斷某PC是不是在線?
雖然PING不通 但10.0.0.10確實在線
此時,WINDOWS 中的ARP命令可以幫到我們,ARP –A命令的作用是查看ARP緩存中的所有項目。ARP緩存表中包括什麼對我們有用的信息呢?當然是MAC地址了,為什麼這麼說?同學們且往下看。
當我們在PC1上輸入ping 10.0.0.10 ,按下回車鍵後系統所執行的第一個實際操作其實並不是PING功能本身,PC1首先是要使用ARP協議解析目標IP位址,在收到目標主機的回應之後,PC1才會發送ICMP包給目標主機。如果系統裝有防火牆,這時防火牆就起作用了,防火牆不會攔截ARP解析IP位址,但卻會攔截PING請求,PING請求被攔截,目標主機自然不會給PC1發送相應的PING回應數據包,超過時間之後,PC1上的PING操作便顯示超時,其過程大致就是這樣。
防火牆不會攔截ARP協議解析IP位址這點對我們來講就夠用了,IP位址被解析成MAC地址後我們可以通過ARP –A命令查看ARP緩存表,只要在ARP緩存表中出現目標主機的IP-MAC對應條目,那證明其就是在線的,如果目標主機處於關機或離線狀態,自然ARP協議無法解析PC1所請求的IP位址,也就不會有目標主機的IP-MAC對應條目 通過這樣,我們便可以很簡單的了解到目標主機是不是在線了。
雖然PING不通,但是PC1的ARP緩存表中卻出現了10.0.0.10的MAC地址(硬體地址亦作物理地址),證明目標主機是在線的。如下圖:
如果目標主機不在線(在測試時小編將目標主機關機),ARP協議無法解析10.0.0.10的MAC地址,如下圖。小編還試著將目標主機的網卡禁用,其結果相同。
使用Wireshark分析數據包,能更好的幫助我們理解上面所說的情況。有Echo (ping) request 但沒有Echo (ping) reply 。
還是像往常一樣,先PING目標主機,如果PING不通,我們再使用ARP –A命令查看ARP緩存表便可確定目示主機是不是在線了。