語法結構:nmap [Scan Type(s)] [Options] {target specification}
端口狀態介紹
-
open:確定端口開放,可達
-
closed :關閉的端口對於nmap也是可訪問的, 它接收nmap探測報文並作出響應。但沒有應用程序在其上監聽。
-
filtered :由於包過濾阻止探測報文到達端口,Nmap無法確定該端口是否開放。過濾可能來自專業的防火牆設備,路由規則 或者主機上的軟件防火牆。
-
unfiltered :未被過濾狀態意味着端口可訪問,但是Nmap無法確定它是開放還是關閉。 只有用於映射防火牆規則集的 ACK 掃描才會把端口分類到這個狀態。
-
open | filtered :無法確定端口是開放還是被過濾, 開放的端口不響應就是一個例子。沒有響應也可能意味着報文過濾器丟棄了探測報文或者它引發的任何反應。UDP,IP協議,FIN, Null 等掃描會引起。
-
closed|filtered:(關閉或者被過濾的):無法確定端口是關閉的還是被過濾的
掃描目標格式
-
示例: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
-
-iL:從文件中加載目標
-
-iR:隨機掃描
-
--exclude <host or network>:排除網段或主機地址
-
--excledefile:排除文件中的地址
主機發現
-
-sL:列出需要掃描的目標,不掃描
-
-sn:只做ping掃描,不做端口掃描
-
-Pn:跳過主機發現,視所有主機都在線
-
-PS/PA/PU/PY[portlist]:基於TCP(SYN、ACK)、UDP、SCTP的指定端口的主機發現
-
-PE/PP/PM:基於ICMP的echo、timestamp、network request的主機發現
-
-PO[Protocol list]:基於IP協議字段的ping掃描
-
-n/-R: -n表示不對目標最DNS解析,-R表示進行DNS解析,缺省為必要時候進行DNS解析
-
--dns-servers <serv1[,serv2],...>: 指定DNS 服務器
-
--system-dns:調用系統的DNS服務器
-
--traceroute:顯示追蹤到目標的路徑
掃描技術
-
-sS/sT/sA/sW/sM:TCP掃描
-
S是SYN掃描,半連接掃描,nmap只發送SYN報文,通過服務器是否響應SYN+ACK來判斷對應端口是否開放
-
T是全連接掃描會和服務器建立完整的三次握手,效率低
-
A發送ACK報文,通過服務器響應來判斷是否開放,有的服務器不開會回復ICMP端口不可達,當回復RST時表示可能被攔截或者端口開放,不是一個准確的判斷條件
-
W 是窗口掃描,發出的報文和ACK一樣,利用的是在某些系統中如果端口開放,收到ACK包后會響應一個窗口非0的RST包
-
M是Maimon掃描,使用發現者的名字命名。其原理是向目標服務器發送FIN/ACK 報文,在某些系統中如果端口開放則會丟棄該報文不做響應,如果端口關閉則回復RST或者ICMP,Nmap可借此判斷服務器端口的開放情況。不准
-
-
-sU:UDP掃描,某些系統如果UDP端口不開放會回復ICMP差錯報文(這也是Linux系統中traceroute的實現原理)。Nmap UDP端口掃描的強大之處在於它會針對知名端口構造初始交互報文,比如會針對UDP 500構造一個主模式協商的IKE報文
-
-sN/sF/sX:特定TCP標志位的掃描,N是空標志位;F是FIN置位;X是Xmas掃描將FIN、PSH、URG同時置位。收到RST說明端口關閉,無響應說明被過濾或者端口開放,不准。
-
--scanflags <flags>:實現上同上面幾種類似,可以讓用戶自定義TCP標志位。
-
-sI <zombie host[:probeport]>: Idle掃描需要一台沒有流量的僵屍主機,這種掃描的實現原理是在一定的時間里,同一台主機發出的IP數據報文其ip頭中的identification字段是累加的。探測分為3步:1、Nmap主機向僵屍機發包,通過僵屍機的響應包探測其ID;2、Nmap主機偽造僵屍機源地址向服務器的特定端口發送SYN包;3、Nmap主機再次探測僵屍機的ip.id。如果目標服務器端口開放,則必然會向僵屍機發送SYN/ACK,由於莫名其妙收到一個SYN/ACK 報文,僵屍機會向目標服務器發送RST報文,該報文的ip.id 是第一步+1,則第三步Nmap主機探測到的ip.id應該是第一步+2,說明目標主機端口開放。反之,如果目標主機端口未開放,則收到第二步的報文后會向僵屍機回復RST或者直接丟棄該報文不響應,無論哪種情況,都不會觸發僵屍機發包,進而僵屍機的ip.id不會變化,第三步Nmap探測到的id應該是第一步+1.
-
-sY/sZ:SCTP協議INIT或cookie-echo掃描
-
-sO:基於IP協議的掃描,通過變換IP報文頭中的Protocol值來對服務器進行探測
-
-b <FTP relay host>::FTP反彈掃描,借助FTP特性,通過FTP服務器連接想要掃描的主機實現隱身的目的
端口相關參數
-
-p:指定端口掃描范圍,如:-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
-
--exclude-ports <port ranges>: 排除端口
-
-F:掃描比缺省少的端口(缺省1000,加了-F100)
-
-r:順序掃描端口,缺省是隨機分組掃描
-
--top-ports <number>:按top排序掃描知名端口
-
--port-ratio <ratio>: 按比例掃描知名端口,值在0-1之間,越小掃的越多
系統/版本探測
-
-sV:探測開放的端口的系統/服務信息
-
--version-intensity <level>:設置版本檢測的詳程度級別,0-9,越高越詳細
-
--version-light:輸出最可能的版本信息,缺省是2
-
--version-all:使用所有的探測條件進行版本/系統探測
-
--version-trace:打印詳細的版本掃描過程
腳本掃描
-
--script=<Lua scripts>:指定腳本名稱
-
--script-args=<n1=v1,[n2=v2,...]>:為腳本指定參數
-
--script-help=<Lua scripts>: 查看腳本幫助信息
-
--script-updatedb:更新腳本數據庫
系統探測
-
-O:激活系統探測
-
--osscan-limit:只對開放端口的有效主機進行系統探測
-
--osscan-guess:推測系統信息
其他
-
-T<0-5>:時間模板,越大速度越快
-
-6:使能IPV6探測
-
-A:使能系統探測、版本檢測、腳本掃描、路由追蹤
-
-V:打印版本號
-
-v:增加輸出的詳細程度