nmap(Network Mapper)是一款開源免費的針對大型網絡的端口掃描工具,nmap可以檢測目標主機是否在線、主機端口開放情況、檢測主機運行的服務類型及版本信息、檢測操作系統與設備類型等信息。本文主要介紹nmap工具安裝和基本使用方法。
nmap主要功能
(1)檢測主機是否在線。例如,列出響應TCP和/或ICMP請求或打開特定端口的主機。
(2)掃描指定主機/主機列表端口開放狀態,枚舉目標主機上的開放端口,常用。
(3)檢測主機運行服務類型及版本,檢測遠程設備上的網絡服務以確定應用程序名稱和版本號。
(4)檢測操作系統版本和設備類型 ,確定網絡設備的操作系統和硬件特性。
(5)可與腳本進行腳本交互,使用Nmap腳本引擎(NSE)和Lua編程語言。
nmap工具下載和安裝
(1)nmap官方下載路徑:https://nmap.org/download.html
(2)按照操作系統類型下載相應軟件安裝。
(3)Windows軟件執行.exe軟件安裝。
(4)Linux系統下載的rpm軟件安裝,上傳到root用戶目錄下執行rpm命令完成安裝:rpm -ivh nmap-7.80-1.x86_64.rpm
nmap命令使用方法
namp [ 掃描類型 ] [ 通用選項 ] [ 掃描目標 ]
掃描類型:
-sT:TCP connect()掃描,這是最基本的TCP掃描方式。connect()是一種系統調用,由操作系統提供,用來打開一個連接。如果目標端口有程序監聽, connect()就會成功返回,否則這個端口是不可達的。這項技術最大的優點是,你勿需root權限。任何UNIX用戶都可以自由使用這個系統調用。這種掃描很容易被檢測到,在目標主機的日志中會記錄大批的連接請求以及錯誤信息。
-sS:TCP同步掃描(TCP SYN),因為不必全部打開一個TCP連接,所以這項技術通常稱為半開掃描(half-open)。你可以發出一個TCP同步包(SYN),然后等待回應。如果對方返回SYN|ACK(響應)包就表示目標端口正在監聽;如果返回RST數據包,就表示目標端口沒有監聽程序;如果收到一個SYN|ACK包,源主機就會馬上發出一個RST(復位)數據包斷開和目標主機的連接,這實際上有我們的操作系統內核自動完成的。這項技術最大的好處是,很少有系統能夠把這記入系統日志。不過,你需要root權限來定制SYN數據包。
-sU:UDP掃描,發送0字節UDP包,快速掃描Windows的UDP端口如果你想知道在某台主機上提供哪些UDP(用戶數據報協議,RFC768)服務,可以使用這種掃描方法。nmap首先向目標主機的每個端口發出一個0字節的UDP包,如果我們收到端口不可達的ICMP消息,端口就是關閉的,否則我們就假設它是打開的。
-sP:ping掃描,有時你只是想知道此時網絡上哪些主機正在運行。通過向你指定的網絡內的每個IP地址發送ICMP echo請求數據包,nmap就可以完成這項任務。注意,nmap在任何情況下都會進行ping掃描,只有目標主機處於運行狀態,才會進行后續的掃描。如果你只是想知道目標主機是否運行,而不想進行其它掃描,才會用到這個選項。
-sA:ACK掃描 TCP ACK掃描,當防火牆開啟時,查看防火牆有未過慮某端口,這項高級的掃描方法通常用來穿過防火牆的規則集。通常情況下,這有助於確定一個防火牆是功能比較完善的或者是一個簡單的包過濾程序,只是阻塞進入的SYN包。這種掃描是向特定的端口發送ACK包(使用隨機的應答/序列號)。如果返回一個RST包,這個端口就標記為unfiltered狀態。如果什么都沒有返回,或者返回一個不可達ICMP消息,這個端口就歸入filtered類。注意,nmap通常不輸出unfiltered的端口,所以在輸出中通常不顯示所有被探測的端口。顯然,這種掃描方式不能找出處於打開狀態的端口。
-sW:滑動窗口掃描,這項高級掃描技術非常類似於ACK掃描,除了它有時可以檢測到處於打開狀態的端口,因為滑動窗口的大小是不規則的,有些操作系統可以報告其大小。
-sR:RPC掃描,和其他不同的端口掃描方法結合使用。
-b:FTP反彈攻擊(FTP Bounce attack) 外網用戶通過FTP滲透內網
通用選項
-P0:nmap掃描前不Ping目標主機。在掃描之前,不必ping主機。有些網絡的防火牆不允許ICMP echo請求穿過,使用這個選項可以對這些網絡進行掃描。
-PT:nmap掃描前使用TCP ACK包確定主機是否在運行(-PT默認80。掃描之前,使用TCP ping確定哪些主機正在運行。nmap不是通過發送ICMP echo請求包然后等待響應來實現這種功能,而是向目標網絡(或者單一主機)發出TCP ACK包然后等待回應。如果主機正在運行就會返回RST包。只有在目標網絡/主機阻塞了ping包,而仍舊允許你對其進行掃描時,這個選項才有效。對於非 root用戶,我們使用connect()系統調用來實現這項功能。使用-PT 來設定目標端口。默認的端口號是80,因為這個端口通常不會被過濾。
-PS: nmap使用TCP SYN包進行掃描。對於root用戶,這個選項讓nmap使用SYN包而不是ACK包來對目標主機進行掃描。如果主機正在運行就返回一個RST包(或者一個SYN/ACK包)。
-PI:nmap進行Ping掃描。設置這個選項,讓nmap使用真正的ping(ICMP echo請求)來掃描目標主機是否正在運行。使用這個選項讓nmap發現正在運行的主機的同時,nmap也會對你的直接子網廣播地址進行觀察。直接子網廣播地址一些外部可達的IP地址,把外部的包轉換為一個內向的IP廣播包,向一個計算機子網發送。這些IP廣播包應該刪除,因為會造成拒絕服務攻擊(例如 smurf)。
-PB:結合-PT和-PI功能,這是默認的ping掃描選項。它使用ACK(-PT)和ICMP(-PI)兩種掃描類型並行掃描。如果防火牆能夠過濾其中一種包,使用這種方法,你就能夠穿過防火牆。
-O:Nmap掃描TCP/IP指紋特征,確定目標主機系統類型。
-I:反向標志掃描,掃描監聽端口的用戶
-f:分片發送SYN、FIN、Xmas、和Null掃描的數據包
-v:冗余模式掃描,可以得到掃描詳細信息
-oN: 掃描結果重定向到文件
-resume:使被中斷的掃描可以繼續
-iL:-iL,掃描目錄文件列表
-p:-p 指定端口或掃描端口列表及范圍,默認掃描1-1024端口和/usr/share/nmap/nmap-services文件中指定端口。-p例:23;20-30,139,60000-這個選項讓你選擇要進行掃描的端口號的范圍。例如,-p 23表示:只掃描目標主機的23號端口。-p 20-30,139,60000-表示:掃描20到30號端口,139號端口以及所有大於60000的端口。
掃描目標
掃描目標通常為IP地址或IP列表
192.168.10.1
192.168.10.0/24
192.168.*.*
nmap掃描基本場景
1、使用TCP SYN發現活躍主機
nmap -PS 192.168.1.0/24
2、使用TCP方式掃描端口
nmap -sS -sV -n -p1-65535 -oX tcp.xml 192.168.1.0
3、使用UDP方式掃描端口
nmap -sS -sU -n -p1-65535 -oX udp.xml 192.168.1.0
4、判斷操作系統
nmap -O 192.168.1.0/24
5、判斷服務版本
nmap -sV 192.168.1.0/24
端口分類和掃描端口狀態分析
1、端口分類
公認端口(well-known port):從0至1024,最常用端口,通常與協議綁定;
注冊端口(registered port):從1025至49151,這些端口已經注冊到服務協議上;
動態或私有端口(dynamic/private port):從49152至65535。
另外,端口還與協議相關;比如:UDP端口53通常用於DNS查詢、TCP端口53通常用於DNS記錄遷移。
2、掃描結果端口狀態說明
open:目標端口開啟。
closed:目標端口關閉。
filtered:通常被防火牆攔截,無法判斷目標端口開啟與否。
unfiltered:目標端口可以訪問,但無法判斷開啟與否。
open | filtered:無法確定端口是開啟還是filtered。
closed | filtered:無法確定端口是關閉還是filtered。
nmap工具使用FAQ
1、使用UDP掃描端口狀態速度非常慢,如何加快掃描速度?
在/proc/sys/net/ipv4目錄下,將icmp_ratemask的值改為0(默認為6168),操作步驟如下:
Step1:cat /proc/sys/net/ipv4/icmp_ratemask,記錄數值,通常為6168。
Step2:echo "0" > /proc/sys/net/ipv4/icmp_ratemask。不需要重啟系統。
Step:3:nmap掃描,完成后執行Step3回復。
Step4:echo "6168" > /proc/sys/net/ipv4/icmp_ratemask。
小結
本文介紹nmap端口掃描工具的基本使用方法,方便工具使用時查詢。后續根據工具使用場景再進一步刷新。
參考資料