任何網絡偵察任務的第一步就是將一組IP範圍縮減爲一組活動的主機,由於最初咱們鎖定的IP地址範圍每每要比實際須要深刻掃描的目標數大得多。並且,掃描每個IP地址的每個端口這個過程既慢也不必。至於咱們須要關注什麼樣的主機,這取決於咱們的掃描目的。網絡管理員可能只對運行某項服務的主機感興趣,安全審計人員則對每一個具備IP地址的設備都感興趣。管理員可能僅使用ICMP ping就能在本身的內部網絡上定位主機,而外部***測試人員可能會使用數十種探針來逃避防火牆的限制。 因爲主機發現需求是如此多樣,所以Nmap提供了多種用於自定義的技術選項。有時候主機發現也被稱做ping掃描,但這遠遠超出了與無處不在的ping工具關聯的簡單ICMP回顯請求數據包。咱們能夠使用列表掃描(-sL)或禁用ping(-Pn)來徹底跳過ping,也能夠經過任意組合多個端口和TCP SYN/ACK,UDP,SCTP INIT和ICMP探針掃描網絡。這些探針的目的是探測某個IP地址實際上處於活動狀態的響應,也就是某個IP地址正在被主機或網絡設備使用。在不少網絡中,一段時間內通常只有不多比例的IP地址處於活動狀態,尤爲是在私有地址空間過大的網絡中這種狀況更加常見,例如:10.0.0.8/8,這個網絡內包括了超過16000000個IP地址,但有的公司在網絡內的設備還沒超過1000臺。主機發現能夠在稀疏分配的IP地址中找到這些機器。 若是不設置任何主機發現的選項,Nmap會向端口443發送ICMP回顯請求和TCP SYN數據包,向端口80發送TCP ACK數據包以及ICMP時間戳請求(對於IPv6,將忽略ICMP時間戳記請求,由於它不是ICMPv6的一部分)。這些默認的選項至關於-PE -PS433 -PA80 -PP選項。ARP(用於IPv4)和鄰居發現(用於IPv6)掃描例外,由於它們會自動掃描本地以太網上的任何目標。對於非特權Unix Shell用戶,默認探針是使用connect系統調用到達端口80和443的SYN數據包。若是你只是掃描本地網絡,主機發現的默認選項就足夠了,可是若是要進行安全審計則建議使用更全面的探針集。 -P*選項能夠組合使用。你能夠使用不一樣的TCP端口、標誌位和ICMP代碼組合的探針來提升穿透防火牆的概率。還要注意,即便你指定其餘-P*選項,默認狀況下也會針對本地以太網上的目標執行ARP掃描和鄰居發現,由於它們通常更加快速有效。 默認狀況下,Nmap會進行主機發現,而後對它肯定在線的每一個主機執行端口掃描。即便指定了非默認主機發現類型,例如:UDP探針(-PU),也是如此。咱們使用-sn選項能夠僅執行主機發現;使用-Pn選項能夠跳過主機發現,直接對全部主機進行端口掃描。咱們會在後面的部分詳細介紹有關控制選項的內容。