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