1.前言
????Nmap是一款開源免費的網絡發現(Network Discovery)和安全審計(Security Auditing)工具。軟件名字Nmap是Network Mapper的簡稱。
? ? nmap掃主要包括四個方面的掃描功能分別是主機發現(Host Discovery)、端口掃描(Port Scanning)、應用與版本偵測(Version Detection)、操作系統偵測(Operating System Detection)。這四項功能之間,又存在大致的依賴關系。通常情況下順序關系,如下圖所示。
2.主機發現
????主機發現(Host Discovery),即用于發現目標主機是否在線(Alive,處于開啟狀態)。
????主機發現發現的原理與Ping命令類似,發送探測包到目標主機,如果收到回復,那么說明目標主機是開啟的。Nmap支持十多種不同的主機探測方式,比如發送ICMP ECHO/TIMESTAMP/NETMASK報文、發送TCPSYN/ACK包、發送SCTP INIT/COOKIE-ECHO包,用戶可以在不同的條件下靈活選用不同的方式來探測目標機。
????主機發現基本原理:(以ICMP echo方式為例)
????Nmap的用戶位于源端,IP地址192.168.0.5,向目標主機192.168.0.3發送ICMP Echo Request。如果該請求報文沒有被防火墻攔截掉,那么目標機會回復ICMP Echo Reply包回來。以此來確定目標主機是否在線。
????默認情況下,Nmap會發送四種不同類型的數據包來探測目標主機是否在線。
(1) ICMP echo request
(2) a TCP SYN packet to port 443
(3) a TCP ACK packet to port 80
(4) an ICMP timestamp request
????依次發送四個報文探測目標機是否開啟。只要收到其中一個包的回復,那就證明目標機開啟。使用四種不同類型的數據包可以避免因防火墻或丟包造成的判斷錯誤。
????通常主機發現并不單獨使用,而只是作為端口掃描、版本偵測、OS偵測先行步驟。而在某些特殊應用(例如確定大型局域網內活動主機的數量),可能會單獨專門適用主機發現功能來完成。
????不管是作為輔助用法還是專門用途,用戶都可以使用Nmap提供的豐富的選項來定制主機發現的探測方式。
????-sL: List Scan 列表掃描,僅將指定的目標的IP列舉出來,不進行主機發現。
????-sn: Ping Scan 只進行主機發現,不進行端口掃描。
????-sP: Ping Scan 只進行主機發現,不進行端口掃描。
????-Pn: 將所有指定的主機視作開啟的,跳過主機發現的過程。
????-PS[portlist]: 使用TCP SYN Ping掃描方式進行發現。
????-PA[portlist]: 使用TCP ACK Ping掃描方式進行發現。
????-PU[portlist]: 使用TCP UDP Ping掃描方式進行發現。
????-PY[portlist]: 使用SCTP INIT Ping掃描方式進行發現。
????-PR: ARP Ping Scan
????-PE: 使用ICMP echo Ping掃描方式發現主機。
????-PP: 使用ICMP timestamp Ping掃描方式發現主機。
????-PM: 使用ICMP netmask Ping掃描方式發現主機。
????-PO[protocollist]: 使用IP協議包探測對方主機是否開啟(非ping掃)。
????-n:表示不進行DNS反向解析(使用該選項的時候Nmap永遠不對目標ip地址作反向域名解析)
????-R:表示總是進行DNS解析(使用該選項的時候Nmap永遠對目標ip地址作反向域名解析)。
????-6: 掃描IPv6地址
????—dns-servers : 指定DNS服務器。
????—system-dns: 指定使用系統的DNS服務器
????—traceroute: 路由跟蹤(使用—traceroute選項即可進行路由追蹤.)使用路由追蹤功能可以幫助用戶了解網絡的同行情況,通過此選項可以輕松地查出從計算機到目標之間所經過的網絡節點,并可以看到通過各個節點的時間.
????其中,比較常用的使用的是-sn,表示只單獨進行主機發現過程;-Pn表示直接跳過主機發現而進行端口掃描等高級操作(如果已經確知目標主機已經開啟,可用該選項);-n,如果不想使用DNS或reverse DNS解析,那么可以使用該選項。
例如:
命令 nmap 192.168.20.16
該掃描方式沒有給出具體主機發現的選項,主要是針對IP或者域名進行掃描,掃描方式迅速,可以方便的發現目標端口的開放情況以及主機在線情況。
如果出現如下圖的情況
則先ping一下該IP地址,此處為ping 192.168.20.16來查看網絡的連通性,網絡通之后再執行nmap命令。
命令 nmap -sP 192.168.20.16/24
Ping掃描方式,只進行ping掃描,然后顯示在線的主機。掃描時只需要加入 -sP ,Nmap進行ping掃描,然后回顯出做出響應的主機,使用該選項掃描可以輕易的獲取目標信息而又不被輕易發現。在默認的情況下Nmap回發送一個ICMP回聲請求和一個TCP報文到目標端口。ping掃描的 優點是不會返回太多的信息造成對結果的分析,并且這是一種非常高效的掃描方式。
命令 nmap -Pn 192.168.20.16
加入 -Pn,將所有指定的主機視作開啟的,跳過主機發現的過程。
命令 nmap -PS -v 192.168.20.16
TCP SYN Ping 掃描發送了一個設置了SYN標志的空TCP報文。默認目標的端口80 (也可以通過改變nmap.h)文件中的DeFault-TCP-PROBE-PORT值進行設置,也可以通過”-PS22,23,25,80,115,3306,3389 “進行設定,每個端口被并發的掃描。
通常情況下,nmap默認使用TCP ACK 和ICMP Echo請求對目標進行是否存活的響應,當目標主機的防火墻阻止這些請求時,可以使用 TCP SYN Ping掃描對目標主機是否存活進行判斷。
Nmap是通過SYN/ACK和RST響應來對目標主機是否存活進行判斷,但在特定的情況下防火墻會丟棄RST包,這種情況下掃描的結果會不準確,這時需要指定一個端口或者端口范圍來避免這種情況。
例如輸入命令:nmap -PS80,100-200 -v 192.168.20.16
命令 nmap -PA -v 192.168.20.16
TCP ACK Ping掃描,這種探測方式可以探測阻止SYN包或者ICMP Echo請求的主機。
可以同時使用 -PA -PS
nmap -PA -PS 192.168.20.16
命令 nmap -PU -v 192.168.20.16
UDP Ping 掃描是發送一個空的UDP報文到指定的端口,如果不指定端口則默認40125
使用UDP ping掃描時Nmap會發送一個空的UDP包到目標主機,如果目標主機響應則返回一個ICMP端口不可達錯誤,如果目標主機不是存活狀態則會返回各種ICMP錯誤信息。