一個使用Nmap的最多見的場景是掃描以太網LAN。在大多數LAN上,尤爲是那些使用RFC 1918授予的私有地址範圍的LAN,絕大多數IP地址在任何給定時間都未被使用。當Nmap嘗試發送原始IP數據包(例如ICMP回顯請求)時,操做系統必須肯定與目標IP對應的目標硬件(ARP)地址,以便它能夠正確地尋址以太網幀。這要求它發出一系列ARP請求。如例4所示,掃描本地的以太網主機。選項- -send-ip告訴Nmap須要發送IP等級的數據包,而不是原始的以太網幀。
例4: 用原始的IP ping掃描一臺離線主機
#nmap -n -sn - -send-ip 192.168.43.13
上面的例子中咱們的時間花了3秒多,鑑於ARP回覆一般會在幾毫秒內到來,所以等待幾秒鐘的時間顯得太多了。對於OS供應商而言,減小此超時時間並非優先事項,由於絕大多數數據包都發送到了實際存在的主機。另外一方面,當給定目標(例如10.0.0.0/8)時,Nmap必須將數據包發送到1600萬個IP。即便許多目標並行執行,每次等待兩秒鐘也將成爲巨大的延遲。
LAN上的原始IP ping掃描還有另外一個問題。如上一示例所示,當發現目標主機無響應時,源主機一般會在其內核ARP表中爲該目標IP添加一個不完整的條目。但ARP表空間是有限的,並且有的操做系統在該表被填滿以後會反應異常。在原始IP模式(- -send-ip)中使用Nmap時,Nmap有時必須等待幾分鐘以使ARP緩存條目過時,而後才能繼續進行主機發現。
ARP掃描經過控制Nmap解決了這兩個問題。 Nmap發出原始的ARP請求,並自行決定處理重傳和超時時間。 系統ARP緩存被繞過。下面的例5顯示了這個區別。使用ARP ping掃描,咱們只花費了不到原來八分之一的時間。
例5: 用ARP ping掃描一臺離線主機
#nmap -n -sn -PR - -packet-trace - -send-eth 192.168.43.13
在例5中,掃描時間變短其實與-PR或- -send-eth選項無關。這是由於在掃描LAN中的以太網主機時,Nmap默認使用ARP掃描。這裏既包括傳統的有線以太網,也包括802.11無線網絡。ARP掃描不止高效並且精確。主機通常都會阻止基於IP的ping包,但它們通常不會阻止ARP的請求和響應。在掃描前,即便你指定例不一樣的ping類型(例如:-PE或-PS),Nmap仍會對同一局域網中的目標使用ARP掃描。若是你不想使用ARP掃描,就用- -send-ip選項。參考例4中的用法。
因爲Nmap可以控制原始的以太幀,所以Nmap可以修改源MAC地址。若是你去參加一個安全會議,會場中只有你一人使用蘋果筆記本電腦,那麼網絡中出現大量的ARP掃描時,你們必定會看向你的方向。你可使用- -spoof-mac選項修改你的MAC地址。緩存