1、簡介html
端口掃描是網絡安全工做者的必備的利器,經過對端口的掃描,瞭解網站中出現的漏洞以及端口的開放狀況,對網站安全方面有着不可或缺的貢獻,Nmap是一款開源免費的網絡發現(Network Discovery)和安全審計(Security Auditing)工具。nmap成爲世界千萬安全專家列爲必備的工具之一。nmap具備如下的這一些優勢:
一、多種多樣的參數,豐富的腳本庫,知足用戶的我的定製需求,其中腳本庫還提供了不少強大的功能任你選擇
二、強大的可移植性,基本上能在全部的主流系統上運行,並且代碼是開源的
三、詳細的文檔說明,和強大的社區團隊進行支持,方面新人上手mysql
下載nmap,而後安裝的步驟跟其餘的軟件同樣,最後確認安裝成功只須要在命令行中輸入nmap回車,有相關的參數輸出即爲安裝成功。Nmap掃描輸出的XML文件能夠直接使用文本編輯器打開,也能夠在windows上使用Nmap的圖形化界面打開,這樣查看起來更方便。全面掃描某些主機時,可能會致使主機崩潰、停機或數據丟失等不良結果。因此,在掃描關鍵任務時要當心謹慎。linux
當目標主機上使用了防火牆、路由器、代理服務或其它安全設備時,使用Nmap掃描結果可能會存在一些誤差。或者當掃描的遠程目標主機不在本地網絡內時,也有可能會出現誤導信息。在使用Nmap實施掃描時,一些選項須要提高權限。在Unix和Linux系統中,必須使用root登陸或者使用sudo命令執行Nmap命令。ios
2、使用
Nmap可實現:主機發現,端口掃描,服務和版本探測,OS版本探測
Nmap工具默認掃描前1000個端口,即1-1000。若是用戶想掃描1000以上端口的話,須要使用-p選項來指定。算法
端口掃描基礎
許多傳統的端口掃描器只列出全部端口是開放仍是關閉的, Nmap的信息粒度比它們要細得多。 它把端口分紅六個狀態: open(開放的), closed(關閉的),filtered(被過濾的), unfiltered(未被過濾的), open|filtered(開放或者被過濾的),或者 closed|filtered(關閉或者被過濾的)。
Nmap所識別的6個端口狀態。sql
open(開放的)
應用程序正在該端口接收TCP 鏈接或者UDP報文。發現這一點經常是端口掃描 的主要目標。安全意識強的人們知道每一個開放的端口 都是攻擊的入口。攻擊者或者入侵測試者想要發現開放的端口。 而管理員則試圖關閉它們或者用防火牆保護它們以避免妨礙了合法用戶。 非安全掃描可能對開放的端口也感興趣,由於它們顯示了網絡上那些服務可供使用。數據庫
closed(關閉的)
關閉的端口對於Nmap也是可訪問的(它接受Nmap的探測報文並做出響應), 但沒有應用程序在其上監聽。 它們能夠顯示該IP地址上(主機發現,或者ping掃描)的主機正在運行up 也對部分操做系統探測有所幫助。 由於關閉的關口是可訪問的,也許過會兒值得再掃描一下,可能一些又開放了。 系統管理員可能會考慮用防火牆封鎖這樣的端口。 那樣他們就會被顯示爲被過濾的狀態,下面討論。編程
filtered(被過濾的)
因爲包過濾阻止探測報文到達端口, Nmap沒法肯定該端口是否開放。過濾可能來自專業的防火牆設備,路由器規則 或者主機上的軟件防火牆。這樣的端口讓攻擊者感受很挫折,由於它們幾乎不提供 任何信息。有時候它們響應ICMP錯誤消息如類型3代碼13 (沒法到達目標: 通訊被管理員禁止),但更廣泛的是過濾器只是丟棄探測幀, 不作任何響應。 這迫使Nmap重試若干次以訪萬一探測包是因爲網絡阻塞丟棄的。 這使得掃描速度明顯變慢。windows
unfiltered(未被過濾的)
未被過濾狀態意味着端口可訪問,但Nmap不能肯定它是開放仍是關閉。 只有用於映射防火牆規則集的ACK掃描纔會把端口分類到這種狀態。 用其它類型的掃描如窗口掃描,SYN掃描,或者FIN掃描來掃描未被過濾的端口能夠幫助肯定 端口是否開放。api
open|filtered(開放或者被過濾的)
當沒法肯定端口是開放仍是被過濾的,Nmap就把該端口劃分紅 這種狀態。開放的端口不響應就是一個例子。沒有響應也可能意味着報文過濾器丟棄 了探測報文或者它引起的任何響應。所以Nmap沒法肯定該端口是開放的仍是被過濾的。 UDP,IP協議, FIN,Null,和Xmas掃描可能把端口納入此類。
closed|filtered(關閉或者被過濾的)
該狀態用於Nmap不能肯定端口是關閉的仍是被過濾的。 它只可能出如今IPID Idle掃描中。
若是Nmap報告狀態組合 open|filtered 和 closed|filtered時,那說明Nmap沒法肯定該端口處於兩個狀態中的哪個狀態。
目標說明
-iL <inputfilename>: 從列表中輸入(列表中包含hosts/IP)
-iR <hostnum>: 隨機選擇目標,選項 0 意味着永無休止的掃描。
--exclude <host1[,host2][,host3],...>: 排除主機/網絡
--excludefile <exclude_file>: 排除文件中的列表(文件中的列表用換行符,空格,或者製表符分隔)
主機發現:
(默認:ICMP,SYN,ACK,UDP Ping)
-sL: 列表掃描,列表掃描是主機發現的退化形式,它僅僅列出指定網絡上的每臺主機, 不發送任何報文到目標主機。
-sP: Ping掃描,該選項告訴Nmap僅僅 進行ping掃描 (主機發現),而後打印出對掃描作出響應的那些主機。它能夠很方便地得出 網絡上有多少機器正在運行或者監視服務器是否正常運行。經常有人稱它爲 地毯式ping
-P0 (無ping)
該選項徹底跳過Nmap發現階段。 一般Nmap在進行高強度的掃描時用它肯定正在運行的機器。 默認狀況下,Nmap只對正在運行的主機進行高強度的探測如 端口掃描,版本探測,或者操做系統探測。用-P0禁止 主機發現會使Nmap對每個指定的目標IP地址 進行所要求的掃描。因此若是在命令行指定一個B類目標地址空間(/16), 全部 65,536 個IP地址都會被掃描。 -P0的第二個字符是數字0而不是字母O。 和列表掃描同樣,跳過正常的主機發現,但不是打印一個目標列表, 而是繼續執行所要求的功能,就好像每一個IP都是活動的。
-PS [portlist] (TCP SYN Ping)
該選項發送一個設置了SYN標誌位的空TCP報文。 默認目的端口爲80 (能夠經過改變nmap.h) 文件中的DEFAULT-TCP-PROBE-PORT值進行配置,但不一樣的端口也能夠做爲選項指定。 甚至能夠指定一個以逗號分隔的端口列表(如 -PS22,23,25,80,113,1050,35000), 在這種狀況下,每一個端口會被併發地掃描。
SYN標誌位告訴對方您正試圖創建一個鏈接。 一般目標端口是關閉的,一個RST (復位) 包會發回來。 若是碰巧端口是開放的,目標會進行TCP三步握手的第二步,迴應 一個SYN/ACK TCP報文。而後運行Nmap的機器則會扼殺這個正在創建的鏈接, 發送一個RST而非ACK報文,不然,一個徹底的鏈接將會創建。 RST報文是運行Nmap的機器而不是Nmap自己響應的,由於它對收到 的SYN/ACK感到很意外。
Nmap並不關心端口開放仍是關閉。 不管RST仍是SYN/ACK響應都告訴Nmap該主機正在運行。
在UNIX機器上,一般只有特權用戶 root 可否發送和接收 原始的TCP報文。所以做爲一個變通的方法,對於非特權用戶, Nmap會爲每一個目標主機進行系統調用connect(),它也會發送一個SYN 報文來嘗試創建鏈接。若是connect()迅速返回成功或者一個ECONNREFUSED 失敗,下面的TCP堆棧必定已經收到了一個SYN/ACK或者RST,該主機將被 標誌位爲在運行。 若是鏈接超時了,該主機就標誌位爲down掉了。這種方法也用於IPv6 鏈接,由於Nmap目前還不支持原始的IPv6報文。
-PA [portlist] (TCP ACK Ping)
TCP ACK ping和剛纔討論的SYN ping至關相似。 也許您已經猜到了,區別就是設置TCP的ACK標誌位而不是SYN標誌位。 ACK報文表示確認一個創建鏈接的嘗試,但該鏈接還沒有徹底創建。 因此遠程主機應該老是迴應一個RST報文, 由於它們並無發出過鏈接請求到運行Nmap的機器,若是它們正在運行的話。
-PA選項使用和SYN探測相同的默認端口(80),也能夠 用相同的格式指定目標端口列表。若是非特權用戶嘗試該功能, 或者指定的是IPv6目標,前面說過的connect()方法將被使用。 這個方法並不完美,由於它實際上發送的是SYN報文,而不是ACK報文。
提供SYN和ACK兩種ping探測的緣由是使經過防火牆的機會盡量大。 許多管理員會配置他們的路由器或者其它簡單的防火牆來封鎖SYN報文,除非 鏈接目標是那些公開的服務器像公司網站或者郵件服務器。 這能夠阻止其它進入組織的鏈接,同時也容許用戶訪問互聯網。 這種無狀態的方法幾乎不佔用防火牆/路由器的資源,於是被硬件和軟件過濾器 普遍支持。Linux Netfilter/iptables 防火牆軟件提供方便的 --syn選項來實現這種無狀態的方法。 當這樣的無狀態防火牆規則存在時,發送到關閉目標端口的SYN ping探測 (-PS) 極可能被封鎖。這種狀況下,ACK探測格外有閃光點,由於它正好利用了 這樣的規則。
另一種經常使用的防火牆用有狀態的規則來封鎖非預期的報文。 這一特性已開始只存在於高端防火牆,可是這些年類它愈來愈廣泛了。 Linux Netfilter/iptables 經過 --state選項支持這一特性,它根據鏈接狀態把報文 進行分類。SYN探測更有可能用於這樣的系統,因爲沒頭沒腦的ACK報文 一般會被識別成僞造的而丟棄。解決這個兩難的方法是經過即指定 -PS又指定-PA來即發送SYN又發送ACK。
-PU [portlist] (UDP Ping)
還有一個主機發現的選項是UDP ping,它發送一個空的(除非指定了--data-length UDP報文到給定的端口。端口列表的格式和前面討論過的-PS和-PA選項仍是同樣。 若是不指定端口,默認是31338。該默認值能夠經過在編譯時改變nmap.h文件中的 DEFAULT-UDP-PROBE-PORT值進行配置。默認使用這樣一個奇怪的端口是由於對開放端口 進行這種掃描通常都不受歡迎。
若是目標機器的端口是關閉的,UDP探測應該立刻獲得一個ICMP端口沒法到達的迴應報文。 這對於Nmap意味着該機器正在運行。 許多其它類型的ICMP錯誤,像主機/網絡沒法到達或者TTL超時則表示down掉的或者不可到達的主機。 沒有迴應也被這樣解釋。若是到達一個開放的端口,大部分服務僅僅忽略這個 空報文而不作任何迴應。這就是爲何默認探測端口是31338這樣一個 極不可能被使用的端口。少數服務如chargen會響應一個空的UDP報文, 從而向Nmap代表該機器正在運行。
該掃描類型的主要優點是它能夠穿越只過濾TCP的防火牆和過濾器。 例如。我曾經有過一個Linksys BEFW11S4無線寬帶路由器。默認狀況下, 該設備對外的網卡過濾全部TCP端口,但UDP探測仍然會引起一個端口不可到達 的消息,從而暴露了它本身。
-PE; -PP; -PM (ICMP Ping Types)
除了前面討論的這些不常見的TCP和UDP主機發現類型, Nmap也能發送世人皆知的ping 程序所發送的報文。Nmap發送一個ICMP type 8 (回聲請求)報文到目標IP地址, 期待從運行的主機獲得一個type 0 (回聲響應)報文。 對於網絡探索者而言,不幸的是,許多主機和 防火牆如今封鎖這些報文,而不是定期望的那樣響應, 參見RFC 1122。所以,僅僅ICMP掃描對於互聯網上的目標一般是不夠的。 但對於系統管理員監視一個內部網絡,它們多是實際有效的途徑。 使用-PE選項打開該回聲請求功能。
雖然回聲請求是標準的ICMP ping查詢, Nmap並不止於此。ICMP標準 (RFC 792)還規範了時間戳請求,信息請求 request,和地址掩碼請求,它們的代碼分別是13,15和17。 雖然這些查詢的表面目的是獲取信息如地址掩碼和當前時間, 它們也能夠很容易地用於主機發現。 很簡單,迴應的系統就是在運行的系統。Nmap目前沒有實現信息請求報文, 由於它們尚未被普遍支持。RFC 1122 堅持 「主機不該該實現這些消息」。 時間戳和地址掩碼查詢能夠分別用-PP和-PM選項發送。 時間戳響應(ICMP代碼14)或者地址掩碼響應(代碼18)表示主機在運行。 當管理員特別封鎖了回聲請求報文而忘了其它ICMP查詢可能用於 相同目的時,這兩個查詢可能頗有價值。
-PR (ARP Ping)
最多見的Nmap使用場景之一是掃描一個以太局域網。 在大部分局域網上,特別是那些使用基於 RFC1918私有地址範圍的網絡,在一個給定的時間絕大部分 IP地址都是不使用的。 當Nmap試圖發送一個原始IP報文如ICMP回聲請求時, 操做系統必須肯定對應於目標IP的硬件 地址(ARP),這樣它才能把以太幀送往正確的地址。 這通常比較慢並且會有些問題,由於操做系統設計者認爲通常不會在短期內 對沒有運行的機器做幾百萬次的ARP請求。
當進行ARP掃描時,Nmap用它優化的算法管理ARP請求。 當它收到響應時, Nmap甚至不須要擔憂基於IP的ping報文,既然它已經知道該主機正在運行了。 這使得ARP掃描比基於IP的掃描更快更可靠。 因此默認狀況下,若是Nmap發現目標主機就在它所在的局域網上,它會進行ARP掃描。 即便指定了不一樣的ping類型(如 -PI或者 -PS) ,Nmap也會對任何相同局域網上的目標機使用ARP。 若是您真的不想要ARP掃描,指定 --send-ip。
-n (不用域名解析)
告訴Nmap 永不對它發現的活動IP地址進行反向域名解析。 既然DNS通常比較慢,這可讓事情更快些。
-R (爲全部目標解析域名)
告訴Nmap 永遠 對目標IP地址做反向域名解析。 通常只有當發現機器正在運行時才進行這項操做。
--system-dns (使用系統域名解析器)
默認狀況下,Nmap經過直接發送查詢到您的主機上配置的域名服務器 來解析域名。爲了提升性能,許多請求 (通常幾十個 ) 併發執行。若是您但願使用系統自帶的解析器,就指定該選項 (經過getnameinfo()調用一次解析一個IP)。除非Nmap的DNS代碼有bug--若是是這樣,請聯繫咱們。 通常不使用該選項,由於它慢多了。系統解析器老是用於IPv6掃描。
端口說明和掃描順序
Nmap提供選項說明那些端口被掃描以及掃描是隨機仍是順序進行。 默認狀況下,Nmap用指定的協議對端口1到1024以及nmap-services 文件中列出的更高的端口在掃描。
-p <port ranges> (只掃描指定的端口)
該選項指明您想掃描的端口,覆蓋默認值。 單個端口和用連字符表示的端口範圍(如 1-1023)均可以。 範圍的開始以及/或者結束值能夠被省略, 分別致使Nmap使用1和65535。因此您能夠指定 -p-從端口1掃描到65535。 若是您特別指定,也能夠掃描端口0。 對於IP協議掃描(-sO),該選項指定您但願掃描的協議號 (0-255)。
當既掃描TCP端口又掃描UDP端口時,您能夠經過在端口號前加上T: 或者U:指定協議。 協議限定符一直有效您直到指定另外一個。 例如,參數 -p U:53,111,137,T:21-25,80,139,8080 將掃描UDP 端口53,111,和137,同時掃描列出的TCP端口。注意,要既掃描 UDP又掃描TCP,您必須指定 -sU ,以及至少一個TCP掃描類型(如 -sS,-sF,或者 -sT)。若是沒有給定協議限定符, 端口號會被加到全部協議列表。
-F (快速 (有限的端口) 掃描)
在nmap的nmap-services 文件中(對於-sO,是協議文件)指定您想要掃描的端口。 這比掃描全部65535個端口快得多。 由於該列表包含如此多的TCP端口(1200多),這和默認的TCP掃描 scan (大約1600個端口)速度差異不是很大。若是您用--datadir選項指定您本身的 小小的nmap-services文件 ,差異會很驚人。
-r (不要按隨機順序掃描端口)
默認狀況下,Nmap按隨機順序掃描端口 (除了出於效率的考慮,經常使用的端口前移)。這種隨機化一般都是受歡迎的, 但您也能夠指定-r來順序端口掃描。
端口掃描技術
-sS (TCP SYN掃描)
SYN掃描做爲默認的也是最受歡迎的掃描選項,是有充分理由的。 它執行得很快,在一個沒有入侵防火牆的快速網絡上,每秒鐘能夠掃描數千個 端口。 SYN掃描相對來講不張揚,不易被注意到,由於它歷來不完成TCP鏈接。 它也不像Fin/Null/Xmas,Maimon和Idle掃描依賴於特定平臺,而能夠應對任何兼容的 TCP協議棧。 它還能夠明確可靠地區分open(開放的), closed(關閉的),和filtered(被過濾的) 狀態
它經常被稱爲半開放掃描, 由於它不打開一個徹底的TCP鏈接。它發送一個SYN報文, 就像您真的要打開一個鏈接,而後等待響應。 SYN/ACK表示端口在監聽 (開放),而 RST (復位)表示沒有監聽者。若是數次重發後仍沒響應, 該端口就被標記爲被過濾。若是收到ICMP不可到達錯誤 (類型3,代碼1,2,3,9,10,或者13),該端口也被標記爲被過濾。
-sT (TCP connect()掃描)
當SYN掃描不能用時,CP Connect()掃描就是默認的TCP掃描。 當用戶沒有權限發送原始報文或者掃描IPv6網絡時,就是這種狀況。 Instead of writing raw packets as most other scan types do,Nmap經過建立connect() 系統調用要求操做系統和目標機以及端口創建鏈接,而不像其它掃描類型直接發送原始報文。 這是和Web瀏覽器,P2P客戶端以及大多數其它網絡應用程序用以創建鏈接同樣的 高層系統調用。它是叫作Berkeley Sockets API編程接口的一部分。Nmap用 該API得到每一個鏈接嘗試的狀態信息,而不是讀取響應的原始報文。
當SYN掃描可用時,它一般是更好的選擇。由於Nmap對高層的 connect()調用比對原始報文控制更少, 因此前者效率較低。 該系統調用徹底鏈接到開放的目標端口而不是像SYN掃描進行 半開放的復位。這不只花更長時間,須要更多報文獲得一樣信息,目標機也更可能 記錄下鏈接。IDS(入侵檢測系統)能夠捕獲二者,但大部分機器沒有這樣的警報系統。 當Nmap鏈接,而後不發送數據又關閉鏈接, 許多普通UNIX系統上的服務會在syslog留下記錄,有時候是一條加密的錯誤消息。 此時,有些真正可憐的服務會崩潰,雖然這不常發生。若是管理員在日誌裏看到來自同一系統的 一堆鏈接嘗試,她應該知道她的系統被掃描了。
-sU (UDP掃描)
雖然互聯網上不少流行的服務運行在TCP 協議上,UDP服務也很多。 DNS,SNMP,和DHCP (註冊的端口是53,161/162,和67/68)是最多見的三個。 由於UDP掃描通常較慢,比TCP更困難,一些安全審覈人員忽略這些端口。 這是一個錯誤,由於可探測的UDP服務至關廣泛,攻擊者固然不會忽略整個協議。 所幸,Nmap能夠幫助記錄並報告UDP端口。
UDP掃描用-sU選項激活。它能夠和TCP掃描如 SYN掃描 (-sS)結合使用來同時檢查兩種協議。
UDP掃描發送空的(沒有數據)UDP報頭到每一個目標端口。 若是返回ICMP端口不可到達錯誤(類型3,代碼3), 該端口是closed(關閉的)。 其它ICMP不可到達錯誤(類型3, 代碼1,2,9,10,或者13)代表該端口是filtered(被過濾的)。 偶爾地,某服務會響應一個UDP報文,證實該端口是open(開放的)。 若是幾回重試後尚未響應,該端口就被認爲是 open|filtered(開放|被過濾的)。 這意味着該端口多是開放的,也可能包過濾器正在封鎖通訊。 能夠用版本掃描(-sV)幫助區分真正的開放端口和被過濾的端口。
UDP掃描的巨大挑戰是怎樣使它更快速。 開放的和被過濾的端口不多響應,讓Nmap超時而後再探測,以防探測幀或者 響應丟失。關閉的端口經常是更大的問題。 它們通常發回一個ICMP端口沒法到達錯誤。可是不像關閉的TCP端口響應SYN或者Connect 掃描所發送的RST報文,許多主機在默認狀況下限制ICMP端口不可到達消息。 Linux和Solaris對此特別嚴格。例如, Linux 2.4.20內核限制一秒鐘只發送一條目標不可到達消息 (見net/ipv4/icmp。c)。
Nmap探測速率限制並相應地減慢來避免用那些目標機會丟棄的無用報文來阻塞 網絡。不幸的是,Linux式的一秒鐘一個報文的限制使65,536個端口的掃描要花 18小時以上。加速UDP掃描的方法包括併發掃描更多的主機,先只對主要端口進行快速 掃描,從防火牆後面掃描,使用--host-timeout跳過慢速的 主機。
-sN; -sF; -sX (TCP Null,FIN,and Xmas掃描)
這三種掃描類型 (甚至用下一節描述的 --scanflags 選項的更多類型) 在TCP RFC 中發掘了一個微妙的方法來區分open(開放的)和 closed(關閉的)端口。第65頁說「若是 [目標]端口狀態是關閉的.... 進入的不含RST的報文致使一個RST響應。」 接下來的一頁 討論不設置SYN,RST,或者ACK位的報文發送到開放端口: 「理論上,這不該該發生,若是您確實收到了,丟棄該報文,返回。 」
若是掃描系統遵循該RFC,當端口關閉時,任何不包含SYN,RST,或者ACK位的報文會致使 一個RST返回,而當端口開放時,應該沒有任何響應。只要不包含SYN,RST,或者ACK, 任何其它三種(FIN,PSH,and URG)的組合都行。Nmap有三種掃描類型利用這一點:
Null掃描 (-sN)
不設置任何標誌位(tcp標誌頭是0)
FIN掃描 (-sF)
只設置TCP FIN標誌位。
Xmas掃描 (-sX)
設置FIN,PSH,和URG標誌位,就像點亮聖誕樹上全部的燈同樣。
除了探測報文的標誌位不一樣,這三種掃描在行爲上徹底一致。 若是收到一個RST報文,該端口被認爲是 closed(關閉的),而沒有響應則意味着 端口是open|filtered(開放或者被過濾的)。 若是收到ICMP不可到達錯誤(類型 3,代號 1,2,3,9,10,或者13),該端口就被標記爲 被過濾的。
這些掃描的關鍵優點是它們能躲過一些無狀態防火牆和報文過濾路由器。 另外一個優點是這些掃描類型甚至比SYN掃描還要隱祕一些。可是別依賴它 -- 多數 現代的IDS產品能夠發現它們。一個很大的不足是並不是全部系統都嚴格遵循RFC 793。 許多系統無論端口開放仍是關閉,都響應RST。 這致使全部端口都標記爲closed(關閉的)。 這樣的操做系統主要有Microsoft Windows,許多Cisco設備,BSDI,以及IBM OS/400。 可是這種掃描對多數UNIX系統都能工做。這些掃描的另外一個不足是 它們不能辨別open(開放的)端口和一些特定的 filtered(被過濾的)端口,從而返回 open|filtered(開放或者被過濾的)。
-sA (TCP ACK掃描)
這種掃描與目前爲止討論的其它掃描的不一樣之處在於 它不能肯定open(開放的)或者 open|filtered(開放或者過濾的))端口。 它用於發現防火牆規則,肯定它們是有狀態的仍是無狀態的,哪些端口是被過濾的。
ACK掃描探測報文只設置ACK標誌位(除非您使用 --scanflags)。當掃描未被過濾的系統時, open(開放的)和closed(關閉的) 端口 都會返回RST報文。Nmap把它們標記爲 unfiltered(未被過濾的),意思是 ACK報文不能到達,但至於它們是open(開放的)或者 closed(關閉的) 沒法肯定。不響應的端口 或者發送特定的ICMP錯誤消息(類型3,代號1,2,3,9,10, 或者13)的端口,標記爲 filtered(被過濾的)。
-sW (TCP窗口掃描)
除了利用特定系統的實現細節來區分開放端口和關閉端口,當收到RST時不老是打印unfiltered, 窗口掃描和ACK掃描徹底同樣。 它經過檢查返回的RST報文的TCP窗口域作到這一點。 在某些系統上,開放端口用正數表示窗口大小(甚至對於RST報文) 而關閉端口的窗口大小爲0。所以,當收到RST時,窗口掃描不老是把端口標記爲 unfiltered, 而是根據TCP窗口值是正數仍是0,分別把端口標記爲open或者 closed
該掃描依賴於互聯網上少數系統的實現細節, 所以您不能永遠相信它。不支持它的系統會一般返回全部端口closed。 固然,一臺機器沒有開放端口也是有可能的。 若是大部分被掃描的端口是 closed,而一些常見的端口 (如 22, 25,53) 是 filtered,該系統就很是可疑了。 偶爾地,系統甚至會顯示偏偏相反的行爲。 若是您的掃描顯示1000個開放的端口和3個關閉的或者被過濾的端口, 那麼那3個極可能也是開放的端口。
-sM (TCP Maimon掃描)
Maimon掃描是用它的發現者Uriel Maimon命名的。他在 Phrack Magazine issue #49 (November 1996)中描述了這一技術。 Nmap在兩期後加入了這一技術。 這項技術和Null,FIN,以及Xmas掃描徹底同樣,除了探測報文是FIN/ACK。 根據RFC 793 (TCP),不管端口開放或者關閉,都應該對這樣的探測響應RST報文。 然而,Uriel注意到若是端口開放,許多基於BSD的系統只是丟棄該探測報文。
--scanflags (定製的TCP掃描)
真正的Nmap高級用戶不須要被這些現成的掃描類型束縛。 --scanflags選項容許您經過指定任意TCP標誌位來設計您本身的掃描。 讓您的創造力流動,躲開那些僅靠本手冊添加規則的入侵檢測系統!
--scanflags選項能夠是一個數字標記值如9 (PSH和FIN), 但使用字符名更容易些。 只要是URG, ACK,PSH, RST,SYN,and FIN的任何組合就行。例如,--scanflags URGACKPSHRSTSYNFIN設置了全部標誌位,可是這對掃描沒有太大用處。 標誌位的順序不重要。
除了設置須要的標誌位,您也能夠設置 TCP掃描類型(如-sA或者-sF)。 那個基本類型告訴Nmap怎樣解釋響應。例如, SYN掃描認爲沒有響應意味着 filtered端口,而FIN掃描則認爲是 open|filtered。 除了使用您指定的TCP標記位,Nmap會和基本掃描類型同樣工做。 若是您不指定基本類型,就使用SYN掃描。
-sI <zombie host[:probeport]> (Idlescan)
這種高級的掃描方法容許對目標進行真正的TCP端口盲掃描 (意味着沒有報文從您的真實IP地址發送到目標)。相反,side-channel攻擊 利用zombie主機上已知的IP分段ID序列生成算法來窺探目標上開放端口的信息。 IDS系統將顯示掃描來自您指定的zombie機(必須運行而且符合必定的標準)。 這種奇妙的掃描類型太複雜了,不能在此徹底描述,因此我寫一篇非正式的論文, 發佈在https://nmap.org/book/idlescan.html。
除了極端隱蔽(因爲它不從真實IP地址發送任何報文), 該掃描類型能夠創建機器間的基於IP的信任關係。 端口列表從zombie 主機的角度。顯示開放的端口。 所以您能夠嘗試用您認爲(經過路由器/包過濾規則)可能被信任的 zombies掃描目標。
若是您因爲IPID改變但願探測zombie上的特定端口, 您能夠在zombie 主機後加上一個冒號和端口號。 不然Nmap會使用默認端口(80)。
-sO (IP協議掃描)
IP 協議掃描可讓您肯定目標機支持哪些IP協議 (TCP,ICMP,IGMP,等等)。從技術上說,這不是端口掃描 ,既然它遍歷的是IP協議號而不是TCP或者UDP端口號。 可是它仍使用 -p選項選擇要掃描的協議號, 用正常的端口表格式報告結果,甚至用和真正的端口掃描同樣 的掃描引擎。所以它和端口掃描很是接近,也被放在這裏討論。
除了自己頗有用,協議掃描還顯示了開源軟件的力量。 儘管基本想法很是簡單,我過去從沒想過增長這一功能也沒收到任何對它的請求。 在2000年夏天,Gerhard Rieger孕育了這個想法,寫了一個很棒的補丁程序,發送到nmap-hackers郵件列表。 我把那個補丁加入了Nmap,次日發佈了新版本。 幾乎沒有商業軟件會有用戶有足夠的熱情設計並貢獻他們的改進。
協議掃描以和UDP掃描相似的方式工做。它不是在UDP報文的端口域上循環, 而是在IP協議域的8位上循環,發送IP報文頭。 報文頭一般是空的,不包含數據,甚至不包含所申明的協議的正確報文頭 TCP,UDP,和ICMP是三個例外。它們三個會使用正常的協議頭,由於不然某些系 統拒絕發送,並且Nmap有函數建立它們。協議掃描不是注意ICMP端口不可到達消息, 而是ICMP 協議不可到達消息。若是Nmap從目標主機收到 任何協議的任何響應,Nmap就把那個協議標記爲open。 ICMP協議不可到達 錯誤(類型 3,代號 2) 致使協議被標記爲 closed。其它ICMP不可到達協議(類型 3,代號 1,3,9,10,或者13) 致使協議被標記爲 filtered (雖然同時他們證實ICMP是 open )。若是重試以後仍沒有收到響應, 該協議就被標記爲open|filtered
-b <ftp relay host> (FTP彈跳掃描)
FTP協議的一個有趣特徵(RFC 959) 是支持所謂代理ftp鏈接。它容許用戶鏈接到一臺FTP服務器,而後要求文件送到一臺第三方服務器。 這個特性在不少層次上被濫用,因此許多服務器已經中止支持它了。其中一種就是致使FTP服務器對其它主機端口掃描。 只要請求FTP服務器輪流發送一個文件到目標主機上的所感興趣的端口。 錯誤消息會描述端口是開放仍是關閉的。 這是繞過防火牆的好方法,由於FTP服務器經常被置於能夠訪問比Web主機更多其它內部主機的位置。 Nmap用-b選項支持ftp彈跳掃描。參數格式是 <username>:<password>@<server>:<port>。 <Server> 是某個脆弱的FTP服務器的名字或者IP地址。 您也許能夠省略<username>:<password>, 若是服務器上開放了匿名用戶(user:anonymous password:-wwwuser@)。 端口號(以及前面的冒號) 也能夠省略,若是<server>使用默認的FTP端口(21)。
當Nmap1997年發佈時,這個弱點被普遍利用,但如今大部分已經被fix了。 脆弱的服務器仍然存在,因此若是其它都失敗了,這也值得一試。 若是您的目標是繞過防火牆,掃描目標網絡上的開放的21端口(或者 甚至任何ftp服務,若是您用版本探測掃描全部端口), 而後對每一個嘗試彈跳掃描。Nmap會告訴您該主機脆弱與否。 若是您只是試着玩Nmap,您沒必要(事實上,不該該)限制您本身。 在您隨機地在互聯網上尋找脆弱的FTP服務器時,考慮一下系統管理員不太喜歡您這樣濫用他們的服務器。
服務和版本探測
Nmap試圖肯定服務協議 (如 ftp,ssh,telnet,http),應用程序名(如ISC Bind,Apache httpd,Solaris telnetd),版本號, 主機名,設備類型(如 打印機,路由器),操做系統家族 (如Windows,Linux)以及其它的細節,如 如是否能夠鏈接X server,SSH協議版本 ,或者KaZaA用戶名)。固然,並不是全部服務都提供全部這些信息。
-sV (版本探測)
打開版本探測。 您也能夠用-A同時打開操做系統探測和版本探測。
--allports (不爲版本探測排除任何端口)
默認狀況下,Nmap版本探測會跳過9100 TCP端口,由於一些打印機簡單地打印送到該端口的 任何數據,這回致使數十頁HTTP get請求,二進制 SSL會話請求等等被打印出來。這一行爲能夠經過修改或刪除nmap-service-probes 中的Exclude指示符改變, 您也能夠不理會任何Exclude指示符,指定--allports掃描全部端口
--version-intensity <intensity> (設置 版本掃描強度)
當進行版本掃描(-sV)時,nmap發送一系列探測報文 ,每一個報文都被賦予一個1到9之間的值。 被賦予較低值的探測報文對大範圍的常見服務有效,而被賦予較高值的報文 通常沒什麼用。強度水平說明了應該使用哪些探測報文。數值越高, 服務越有可能被正確識別。 然而,高強度掃描花更多時間。強度值必須在0和9之間。 默認是7。當探測報文經過nmap-service-probes ports指示符 註冊到目標端口時,不管什麼強度水平,探測報文都會被嘗試。這保證了DNS 探測將永遠在任何開放的53端口嘗試, SSL探測將在443端口嘗試,等等。
--version-light (打開輕量級模式)
這是 --version-intensity 2的方便的別名。輕量級模式使 版本掃描快許多,但它識別服務的可能性也略微小一點。
--version-all (嘗試每一個探測)
--version-intensity 9的別名, 保證對每一個端口嘗試每一個探測報文。
--version-trace (跟蹤版本掃描活動)
這致使Nmap打印出詳細的關於正在進行的掃描的調試信息。 它是您用--packet-trace所獲得的信息的子集。
-sR (RPC掃描)
這種方法和許多端口掃描方法聯合使用。 它對全部被發現開放的TCP/UDP端口執行SunRPC程序NULL命令,來試圖 肯定它們是否RPC端口,若是是, 是什麼程序和版本號。所以您能夠有效地得到和rpcinfo -p同樣的信息, 即便目標的端口映射在防火牆後面(或者被TCP包裝器保護)。Decoys目前不能和RPC scan一塊兒工做。 這做爲版本掃描(-sV)的一部分自動打開。 因爲版本探測包括它而且全面得多,-sR不多被須要。
操做系統探測
Nmap採用TCP/IP協議棧fingerprinting進行遠程操做系統探測。 Nmap發送一系列TCP和UDP報文到遠程主機,檢查響應中的每個比特,把結果和數據庫nmap-os-fingerprints中超過 1500個已知的操做系統的fingerprints進行比較,若是有匹配,就打印出操做系統的詳細信息。 每一個fingerprint包括一個自由格式的關於OS的描述文本, 和一個分類信息,它提供供應商名稱(如Sun),下面的操做系統(如Solaris),OS版本(如10), 和設備類型(通用設備,路由器,switch,遊戲控制檯, 等)
-O (啓用操做系統檢測)
也能夠使用-A來同時啓用操做系統檢測和版本檢測。
--osscan-limit (針對指定的目標進行操做系統檢測)
若是發現一個打開和關閉的TCP端口時,操做系統檢測會更有效。 採用這個選項,Nmap只對知足這個條件的主機進行操做系統檢測,這樣能夠 節約時間,特別在使用-P0掃描多個主機時。這個選項僅在使用 -O或-A 進行操做系統檢測時起做用。
--osscan-guess; --fuzzy (推測操做系統檢測結果)
當Nmap沒法肯定所檢測的操做系統時,會盡量地提供最相近的匹配,Nmap默認 進行這種匹配,使用上述任一個選項使得Nmap的推測更加有效。
防火牆/IDS躲避和哄騙
-f (報文分段); --mtu (使用指定的MTU)
-f選項要求掃描時(包挺ping掃描)使用 小的IP包分段。其思路是將TCP頭分段在幾個包中,使得包過濾器、 IDS以及其它工具的檢測更加困難。必須當心使用這個選項,有些系 統在處理這些小包時存在問題,例如舊的網絡嗅探器Sniffit在接收 到第一個分段時會馬上出現分段錯誤。該選項使用一次,Nmap在IP 頭後將包分紅8個字節或更小。所以,一個20字節的TCP頭會被分紅3個 包,其中2個包分別有TCP頭的8個字節,另1個包有TCP頭的剩下4個字 節。固然,每一個包都有一個IP頭。再次使用-f可以使用 16字節的分段(減小分段數量)。使用--mtu選項可 以自定義偏移的大小,使用時不須要-f,偏移量必須 是8的倍數。包過濾器和防火牆對全部的IP分段排隊,如Linux核心中的 CONFIG-IP-ALWAYS-DEFRAG配置項,分段包不會直接使用。一些網絡沒法 承受這樣所帶來的性能衝擊,會將這個配置禁止。其它禁止的緣由有分段 包會經過不一樣的路由進入網絡。一些源系統在內核中對發送的報文進行 分段,使用iptables鏈接跟蹤模塊的Linux就是一個例子。當使用相似Ethereal 的嗅探器時,掃描必須保證發送的報文要分段。若是主機操做系統會產 生問題,嘗試使用--send-eth選項以避開IP層而直接 發送原始的以太網幀。
-D <decoy1 [,decoy2][,ME],...> (使用誘餌隱蔽掃描)
爲使誘餌掃描起做用,須要使遠程主機認爲是誘餌在掃描目標網絡。 IDS可能會報個某個IP的5-10個端口掃描,但並不知道哪一個IP在掃描以及 哪些不是誘餌。但這種方式能夠經過路由跟蹤、響應丟棄以及其它主動 機制在解決。這是一種經常使用的隱藏自身IP地址的有效技術。
使用逗號分隔每一個誘餌主機,也可用本身的真實IP做爲誘餌,這時可以使用 ME選項說明。若是在第6個位置或 更後的位置使用ME選項,一些經常使用 端口掃描檢測器(如Solar Designer's excellent scanlogd)就不會報告 這個真實IP。若是不使用ME選項,Nmap 將真實IP放在一個隨機的位置
注意,做爲誘餌的主機須在工做狀態,不然會致使目標主機的SYN洪水攻擊。 若是在網絡中只有一個主機在工做,那就很容易肯定哪一個主機在掃描。也可 使用IP地址代替主機名(被誘騙的網絡就不可能在名字服務器日誌中發現)。
誘餌可用在初始的ping掃描(ICMP、SYN、ACK等)階段或真正的端口掃描 階段。誘餌也能夠用於遠程操做系統檢測(-O)。在進行版 本檢測或TCP鏈接掃描時,誘餌無效。
使用過多的誘餌沒有任何價值,反而致使掃描變慢而且結果不許確。 此外,一些ISP會過濾哄騙的報文,但不少對欺騙IP包沒有任何限制。
-S <IP_Address> (源地址哄騙)
在某些狀況下,Nmap可能沒法肯定你的源地址(若是這樣,Nmap會給出 提示)。此時,使用-S選項並說明所需發送包的接口IP地址。
這個標誌的另外一個用處是哄騙性的掃描,使得目標認爲是另 一個地址在進行掃描。能夠想象某一個競爭對手在不斷掃描某個公司! -e選項常在這種狀況下使用,也可採用-P0選項。
-e <interface> (使用指定的接口)
告訴Nmap使用哪一個接口發送和接收報文,Nmap能夠進行自動檢測, 若是檢測不出會給出提示。
--source-port <portnumber>; -g <portnumber> (源端口哄騙)
僅依賴於源端口號就信任數據流是一種常見的錯誤配置,這個問題很是 好理解。例如一個管理員部署了一個新的防火牆,但招來了不少用戶的不滿,由於 他們的應用中止工做了。多是因爲外部的UDP DNS服務器響應沒法進入網絡,而致使 DNS的崩潰。FTP是另外一個常見的例子,在FTP傳輸時,遠程服務器嘗試和內部用 創建鏈接以傳輸數據。
對這些問題有安全解決方案,一般是應用級代理或協議分析防火牆模塊。 但也存在一些不安全的方案。注意到DNS響應來自於53端口,FTP鏈接 來自於20端口,不少管理員會掉入一個陷阱,即容許來自於這些端口的數據進入 網絡。他們認爲這些端口裏不會有值得注意的攻擊和漏洞利用。此外,管理員 或許認爲這是一個短時間的措施,直至他們採起更安全的方案。但他們忽視了安全的 升級。
不只僅是工做量過多的網絡管理員掉入這種陷阱,不少產品自己也會有這類 不安全的隱患,甚至是微軟的產品。Windows 2000和Windows XP中包含的IPsec過濾 器也包含了一些隱含規則,容許全部來自88端口(Kerberos)的TCP和UDP數據流。另 一個常見的例子是Zone Alarm我的防火牆到2.1.25版本仍然容許源端口53(DNS)或 67(DHCP)的UDP包進入。
Nmap提供了-g和--source-port選項(它們是 等價的),用於利用上述弱點。只須要提供一個端口號,Nmap就能夠從這些 端口發送數據。爲使特定的操做系統正常工做,Nmap必須使用不一樣的端口號。 DNS請求會忽略--source-port選項,這是由於Nmap依靠系 統庫來處理。大部分TCP掃描,包括SYN掃描,能夠徹底支持這些選項,UDP掃 描一樣如此。
--data-length <number> (發送報文時 附加隨機數據)
正常狀況下,Nmap發送最少的報文,只含一個包頭。所以TCP包一般 是40字節,ICMP ECHO請求只有28字節。這個選項告訴Nmap在發送的報文上 附加指定數量的隨機字節。操做系統檢測(-O)包不受影響, 但大部分ping和端口掃描包受影響,這會使處理變慢,但對掃描的影響較小。
--ttl <value> (設置IP time-to-live域)
設置IPv4報文的time-to-live域爲指定的值。
--randomize-hosts (對目標主機的順序隨機排列)
告訴Nmap在掃描主機前對每一個組中的主機隨機排列,最多可達 8096個主機。這會使得掃描針對不一樣的網絡監控系統來講變得不是很 明顯,特別是配合值較小的時間選項時更有效。若是須要對一個較大 的組進行隨機排列,須要增大nmap.h文件中 PING-GROUP-SZ的值,並從新編譯。另外一種方法是使用列表掃描 (-sL -n -oN <filename>),產生目標IP的列表, 使用Perl腳本進行隨機化,而後使用-iL提供給Nmap。
--spoof-mac <mac address,prefix,or vendor name> (MAC地址哄騙)
要求Nmap在發送原以太網幀時使用指定的MAC地址,這個選項隱含了 --send-eth選項,以保證Nmap真正發送以太網包。MAC地址有幾 種格式。若是簡單地使用字符串「0」,Nmap選擇一個徹底隨機的MAC 地址。若是給定的字符品是一個16進制偶數(使用:分隔),Nmap將使用這個MAC地址。 若是是小於12的16進制數字,Nmap會隨機填充剩下的6個字節。若是參數不是0或16進 制字符串,Nmap將經過nmap-mac-prefixes查找 廠商的名稱(大小寫區分),若是找到匹配,Nmap將使用廠商的OUI(3字節前綴),而後 隨機填充剩餘的3個節字。正確的--spoof-mac參數有, Apple, 0,01:02:03:04:05:06, deadbeefcafe,0020F2, 和Cisco.
輸出
Nmap提供5種不一樣的輸出格式,其中XML輸出是最重要的輸出類型,可被轉換成HTML,對於程序處理很是方便, 如用於Nmap圖形用戶接口或導入數據庫。除了提供輸出格式外,Nmap還提供了選項來控制輸出的細節以及調試信息。輸出內容可發送給標準輸出或命名文件,能夠追加或覆蓋。輸出文件還可被用於繼續中斷的掃描。
-oN <filespec> (標準輸出)
要求將標準輸出直接寫入指定 的文件。如上所述,這個格式與交互式輸出 略有不一樣。
-oX <filespec> (XML輸出)
要求XML輸出直接寫入指定 的文件。Nmap包含了一個文檔類型定義(DTD),使XML解析器有效地 進行XML輸出。這主要是爲了程序應用,同時也能夠協助人工解釋 Nmap的XML輸出。DTD定義了合法的格式元素,列舉可以使用的屬性和 值。最新的版本可在 http://www.insecure.org/nmap/data/nmap.dtd獲取。
XML提供了可供軟件解析的穩定格式輸出,主要的計算機 語言都提供了免費的XML解析器,如C/C++,Perl,Python和Java。 針對這些語言有一些捆綁代碼用於處理Nmap的輸出和特定的執行程序。 例如perl CPAN中的Nmap::Scanner 和Nmap::Parser。 對幾乎全部與Nmap有接口的主要應用來講,XML是首選的格式。
XML輸出引用了一個XSL樣式表,用於格式化輸出結果,相似於 HTML。最方便的方法是將XML輸出加載到一個Web瀏覽器,如Firefox 或IE。因爲nmap.xsl文件的絕對 路徑,所以一般只能在運行了Nmap的機器上工做(或相似配置的機器)。 相似於任何支持Web機器的HTML文件,--stylesheet 選項可用於創建可移植的XML文件。
-oS <filespec> (ScRipT KIdd|3 oUTpuT)
腳本小子輸出相似於交互工具輸出,這是一個過後處理,適合於 'l33t HaXXorZ, 因爲原來全都是大寫的Nmap輸出。這個選項和腳本小子開了玩笑,看上去彷佛是爲了 「幫助他們」。
-oG <filespec> (Grep輸出)
這種方式最後介紹,由於不建議使用。XML輸格式很強大,便於有經驗 的用戶使用。XML是一種標準,由許多解析器構成,而Grep輸屆更簡化。XML 是可擴展的,以支持新發布的Nmap特色。使用Grep輸出的目的是忽略這些 特色,由於沒有足夠的空間。
然面,Grep輸出仍然很常使用。它是一種簡單格式,每行一個主機,能夠 經過UNIX工具(如grep、awk、cut、sed、diff)和Perl方便地查找和分解。常可 用於在命令行上進行一次性測式。查找ssh端口打開或運行Sloaris的主機,只需 要一個簡單的grep主機說明,使用通道並經過awk或cut命令打印所需的域。
Grep輸出能夠包含註釋(每行由#號開始)。每行由6個標記的域組成,由製表符及 冒號分隔。這些域有主機,端口, 協議,忽略狀態, 操做系統,序列號, IPID和狀態。
這些域中最重要的是Ports,它提供 了所關注的端口的細節,端口項由逗號分隔。每一個端口項表明一個所關注的端口, 每一個子域由/分隔。這些子域有:端口號, 狀態,協議, 擁有者,服務, SunRPCinfo和版本信息。
對於XML輸出,本手冊沒法列舉全部的格式,有關Nmap Grep輸出的更詳細信息可 查閱http://www.unspecific.com/nmap-oG-output。
-oA <basename> (輸出至全部格式)
爲使用方便,利用-oA<basename>選項 可將掃描結果以標準格式、XML格式和Grep格式一次性輸出。分別存放在 <basename>.nmap,<basename>.xml和 <basename>.gnmap文件中。也能夠在文件名前 指定目錄名,如在UNIX中,使用~/nmaplogs/foocorp/, 在Window中,使用c:\hacking\sco on Windows。
細節和調試選項
-v (提升輸出信息的詳細度)
經過提升詳細度,Nmap能夠輸出掃描過程的更多信息。 輸出發現的打開端口,若Nmap認爲掃描須要更多時間會顯示估計 的結束時間。這個選項使用兩次,會提供更詳細的信息。這個選 項使用兩次以上不起做用。
大部分的變化僅影響交互式輸出,也有一些影響標準和腳本 小子輸出。其它輸出類型由機器處理,此時Nmap默認提供詳細的信 息,不須要人工干預。然而,其它模式也會有一些變化,省略一些 細節能夠減少輸出大小。例如,Grep輸出中的註釋行提供全部掃描 端口列表,但因爲這些信息過長,所以只能在細節模式中輸出。
-d [level] (提升或設置調試級別)
當詳細模式也不能爲用戶提供足夠的數據時,使用調試能夠獲得更 多的信息。使用細節選項(-v)時,可啓用命令行參數 (-d),屢次使用可提升調試級別。也可在-d 後面使用參數設置調試級別。例如,-d9設定級別9。這是 最高的級別,將會產生上千行的輸出,除非只對不多的端口和目標進行簡單掃描。
若是Nmap由於Bug而掛起或者對Nmap的工做及原理有疑問,調試輸出 很是有效。主要是開發人員用這個選項,調試行不具有自我解釋的特色。 例如,Timeoutvals: srtt: -1 rttvar: -1 to: 1000000 delta 14987 ==> srtt: 14987 rttvar: 14987 to: 100000。若是對某行輸出不明白, 能夠忽略、查看源代碼或向開發列表(nmap-dev)求助。有些輸出行會有自 我解釋的特色,但隨着調試級別的升高,會愈來愈含糊。
--packet-trace (跟蹤發送和接收的報文)
要求Nmap打印發送和接收的每一個報文的摘要,一般用於 調試,有助於新用戶更好地理解Nmap的真正工做。爲避免輸出過 多的行,能夠限制掃描的端口數,如-p20-30。 若是隻需進行版本檢測,使用--version-trace。
--iflist (列舉接口和路由)
輸出Nmap檢測到的接口列表和系統路由,用於調試路由 問題或設備描述失誤(如Nmap把PPP鏈接看成以太網對待)。
--append-output (在輸出文件中添加)
當使用文件做爲輸出格式,如-oX或-oN, 默認該文件被覆蓋。若是但願文件保留現有內容,將結果添加在現 有文件後面,使用--append-output選項。全部指 定的輸出文件都被添加。但對於XML(-oX)掃描輸出 文件無效,沒法正常解析,須要手工修改。
--resume <filename> (繼續中斷的掃描)
一些擴展的Nmap運行須要很長的時間 -- 以天計算,這類掃描 每每不會結束。能夠進行一些限制,禁止Nmap在工做時間運行,致使 網絡中斷、運行Nmap的主機計劃或非計劃地重啓、或者Nmap本身中斷。 運行Nmap的管理員能夠因其它緣由取消運行,按下ctrl-C 便可。從頭開始啓動掃描可能使人不快,幸運的是,若是標準掃描 (-oN)或Grep掃描(-oG)日誌 被保留,用戶能夠要求Nmap恢復終止的掃描,只須要簡單地使用選項 --resume並說明標準/Grep掃描輸出文件,不容許 使用其它參數,Nmap會解析輸出文件並使用原來的格式輸出。使用方式 如nmap --resume <logfilename>。 Nmap將把新地結果添加到文件中,這種方式不支持XML輸出格式,緣由是 將兩次運行結果合併至一個XML文件比較困難。
--stylesheet <path or URL> (設置XSL樣式表,轉換XML輸出)
Nmap提從了XSL樣式表nmap.xsl,用於查看 或轉換XML輸出至HTML。XML輸出包含了一個xml-stylesheet, 直接指向nmap.xml文件, 該文件由Nmap安裝(或位於Windows當前工做目錄)。在Web瀏覽器 中打開Nmap的XML輸出時,將會在文件系統中尋找nmap.xsl文件, 並使用它輸出結果。若是但願使用不一樣的樣式表,將它做爲 --stylesheet的參數,必段指明完整的路 徑或URL,常見的調用方式是--stylesheet http://www.insecure.org/nmap/data/nmap.xsl。 這告訴瀏覽器從Insecire.Org中加載最新的樣式表。這使得 沒安裝Nmap(和nmap.xsl) 的機器中能夠方便地查看結果。所以,URL更方便使用,本地文件系統 的nmap.xsl用於默認方式。
--no-stylesheet (忽略XML聲明的XSL樣式表)
使用該選項禁止Nmap的XML輸出關聯任何XSL樣式表。 xml-stylesheet指示被忽略。
其它選項
-6 (啓用IPv6掃描)
從2002年起,Nmap提供對IPv6的一些主要特徵的支持。ping掃描(TCP-only)、 鏈接掃描以及版本檢測都支持IPv6。除增長-6選項外, 其它命令語法相同。固然,必須使用IPv6地址來替換主機名,如 3ffe:7501:4819:2000:210:f3ff:fe03:14d0。 除「所關注的端口」行的地址部分爲IPv6地址。
IPv6目前未在全球普遍採用,目前在一些國家(亞洲)應用較多, 一些高級操做系統支持IPv6。使用Nmap的IPv6功能,掃描的源和目 的都須要配置IPv6。若是ISP(大部分)不分配IPv6地址,Nmap能夠採用 免費的隧道代理。一種較好的選擇是BT Exact,位於https://tb.ipv6.btexact.com/。 此外,還有Hurricane Electric,位於http://ipv6tb.he.net/。6to4隧道是 另外一種經常使用的免費方法。
-A (激烈掃描模式選項)
這個選項啓用額外的高級和高強度選項,目前還未肯定表明 的內容。目前,這個選項啓用了操做系統檢測(-O) 和版本掃描(-sV),之後會增長更多的功能。 目的是啓用一個全面的掃描選項集合,不須要用戶記憶大量的 選項。這個選項僅僅啓用功能,不包含用於可能所須要的 時間選項(如-T4)或細節選項(-v)。
--datadir <directoryname> (說明用戶Nmap數據文件位置)
Nmap在運行時從文件中得到特殊的數據,這些文件有 nmap-service-probes, nmap-services, nmap-protocols, nmap-rpc, nmap-mac-prefixes和 nmap-os-fingerprints。Nmap首先 在--datadir選項說明的目錄中查找這些文件。 未找到的文件,將在BMAPDIR環境變量說明的目錄中查找。 接下來是用於真正和有效UID的~/.nmap 或Nmap可執行代碼的位置(僅Win32);而後是是編譯位置, 如/usr/local/share/nmap 或/usr/share/nmap。 Nmap查找的最後一個位置是當前目錄。
--send-eth (使用原以太網幀發送)
要求Nmap在以太網(數據鏈路)層而不是IP(網絡層)發送 報文。默認方式下,Nmap選擇最適合其運行平臺的方式,原套接 字(IP層)是UNIX主機最有效的方式,而以太網幀最適合Windows操做 系統,由於Microsoft禁用了原套接字支持。在UNIX中,若是沒有其 它選擇(如無以太網鏈接),無論是否有該選項,Nmap都使用原IP包。
--send-ip (在原IP層發送)
要求Nmap經過原IP套接字發送報文,而不是低層的以 太網幀。這是--send-eth選項的補充。
--privileged (假定用戶具備所有權限)
告訴Nmap假定其具備足夠的權限進行源套接字包發送、 報文捕獲和相似UNIX系統中根用戶操做的權限。默認狀態下, 若是由getuid()請求的相似操做不爲0,Nmap將退出。 --privileged在具備Linux內核性能的相似 系統中使用很是有效,這些系統配置容許非特權用戶能夠進行 原報文掃描。須要明確的是,在其它選項以前使用這些須要權 限的選項(SYN掃描、操做系統檢測等)。Nmap-PRIVILEGED變量 設置等價於--privileged選項。
-V; --version (打印版本信息)
打印Nmap版本號並退出。
-h; --help (打印幫助摘要面)
打印一個短的幫助屏幕,列出大部分經常使用的 命令選項,這個功能與不帶參數運行Nmap是相同的。
3、實例
一、Nmap掃描掃描單個目標
經過指定單個目標,使用Nmap工具能夠實現一個基本的掃描。指定的目標能夠是一個IP地址,也能夠是主機名(Nmap會自動解析其主機名)。其中,語法格式以下所示:
nmap [目標]
# nmap 192.168.1.105
Starting Nmap 6.47 ( http://nmap.org ) at 2015-05-05 18:44 CST
Nmap scan report for localhost (192.168.1.105)
Host is up (0.00010s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
111/tcp open rpcbind
445/tcp open microsoft-ds
MAC Address: 00:0C:29:31:02:17 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 0.87 seconds
能夠看到目標主機192.168.1.105上開啓的端口有2一、2二、2三、1十一、445,及這些端口所對應的服務。並且,還能夠看到該目標主機的MAC地址爲00:0C:29:31:02:17。從最後一行信息,能夠看出目標主機是活動的(up),而且掃描該目標主機共用了0.87秒。
使用Nmap掃描單個目標時,指定的IP地址能夠是IPv4,也能夠是IPv6。上例中指定掃描的目標是使用IPv4類地址。若是用戶指定掃描目標地址是IPv6類地址時,須要使用-6選項。若是要使用IPv6類地址做爲目標時,則掃描主機和目標主機都必須支持IPv6協議。不然沒法實施掃描。例如,掃描IP地址爲fe80::20c:29ff:fe31:217的目標主機,則執行命令以下所示:
# nmap -6 fe80::20c:29ff:fe31:217
二、Nmap掃描掃描多個目標
Nmap能夠用來同時掃描多個主機。當用戶須要掃描多個目標時,能夠在命令行中同時指定多個目標,每一個目標之間使用空格分割。其中,語法格式以下所示:
nmap [目標1 目標2 ...]
# nmap 192.168.1.1 192.168.1.101 192.168.1.105
Starting Nmap 6.47 ( http://nmap.org ) at 2015-05-05 19:07 CST
Nmap scan report for localhost (192.168.1.1)
Host is up (0.00094s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
80/tcp open http
1900/tcp open upnp
49152/tcp open unknown
MAC Address: 14:E6:E4:84:23:7A (Tp-link Technologies CO.)
Nmap scan report for localhost (192.168.1.101)
Host is up (0.0060s latency).
All 1000 scanned ports on localhost (192.168.1.101) are closed
MAC Address: 14:F6:5A:CE:EE:2A (Xiaomi)
Nmap scan report for localhost (192.168.1.105)
Host is up (0.00038s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
111/tcp open rpcbind
445/tcp open microsoft-ds
MAC Address: 00:0C:29:31:02:17 (VMware)
Nmap done: 3 IP addresses (3 hosts up) scanned in 1.00 seconds
從以上輸出信息,能夠看到共掃描了三臺主機,而且依次顯示了每臺主機的掃描結果。在以上信息中,將掃描的每臺主機地址行已加粗,方便用戶瞭解其掃描結果。下面分別介紹這三臺主機的掃描結果,以下所示:
192.168.1.1:從輸出信息中能夠看到該主機開啓了三個端口,MAC地址爲14:E6:E4:84:23:7A。根據MAC地址後面括號中的信息,能夠推斷出該主機是一個Tp-link路由器。
192.168.1.101:從輸出信息中,能夠看到該主機上前1000個端口是關閉的。可是,能夠看到該主機的MAC地址爲14:F6:5A:CE:EE:2A,設備類型爲Xiaomi。由此能夠判斷出,該主機是一個小米手機設備。
192.168.1.105:從輸出信息中,能夠看到該主機上995個端口是關閉的,五個端口是開啓的。其中,MAC地址爲00:0C:29:31:02:17,並且是一臺VMware(虛擬機)操做系統。
三、Nmap掃描掃描一個目標列表
當用戶有大量主機須要掃描時,能夠將這些主機的IP地址(或主機名)寫入到一個文本文件中。而後,使用Nmap工具進行掃描。這樣避免在命令行中手工輸入目標。其中,語法格式以下所示:
nmap -iL [IP地址列表文件]
iL選項,就是用來從IP地址列表文件中提取全部地址的。IP地址列表文件中包含了一列被掃描的主機IP地址。在IP地址列表文件中的每一個條目必須使用空格、Tab鍵或換行符分割。
(1)建立list.txt文本文件,並將掃描的主機IP地址寫入到該文本文件中。以下所示:
# vi list.txt
192.168.1.1
192.168.1.100
192.168.1.101
192.168.1.102
192.168.1.103
192.168.1.104
192.168.1.105
(2)掃描list.txt文件中指定的全部主機。執行命令以下所示:
# nmap -iL list.txt
四、Nmap掃描掃描隨機目標
Nmap工具提供了一個-iR選項,能夠用來選擇隨機的互聯網主機來掃描。Nmap工具將會隨機的生成指定數量的目標進行掃描。其中,語法格式以下所示:
nmap -iR [主機數量]
# nmap -iR 2 #選擇兩個目標主機進行掃描
Starting Nmap 6.47 ( http://nmap.org ) at 2015-05-06 11:07 CST
Nmap scan report for suncokret.vguk.hr (161.53.173.3)
Host is up (0.43s latency).
Not shown: 984 closed ports
PORT STATE SERVICE
21/tcp open ftp
25/tcp open smtp
53/tcp open domain
80/tcp open http
81/tcp open hosts2-ns
110/tcp open pop3
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
143/tcp open imap
443/tcp open https
444/tcp open snpp
445/tcp filtered microsoft-ds
593/tcp filtered http-rpc-epmap
2002/tcp open globe
3306/tcp open mysql
4444/tcp filtered krb524
Nmap done: 3 IP addresses (1 host up) scanned in 29.64 seconds
從輸出信息中,能夠看到Nmap工具隨機生成了三個IP地址。可是,只有主機161.53.137.3是活動的,而且顯示了對該主機的掃描結果。
提示:通常狀況下,不建議用戶實施隨機掃描。除非你是在作一個研究項目。不然常常實施隨機掃描可能會給本身的互聯網服務提供商帶來麻煩。
五、Nmap指定IP地址範圍掃描
用戶在指定掃描範圍時,能夠經過IP地址或子網的方式來實現。下面將介紹使用IP地址指定掃描範圍的方法。其中,語法格式以下所示:
nmap [IP地址範圍] # IP地址範圍之間使用短連字符(-)
使用Nmap工具掃描192.168.1.1到100之間的全部主機。執行命令以下所示:
# nmap 192.168.1.1-100
Starting Nmap 6.47 ( http://nmap.org ) at 2015-05-05 19:40 CST
Nmap scan report for localhost (192.168.1.1)
Host is up (0.0014s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
80/tcp open http
1900/tcp open upnp
49152/tcp open unknown
MAC Address: 14:E6:E4:84:23:7A (Tp-link Technologies CO.)
Nmap scan report for localhost (192.168.1.100)
Host is up (0.00025s latency).
Not shown: 986 closed ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
902/tcp open iss-realsecure
912/tcp open apex-mesh
1033/tcp open netinfo
1034/tcp open zincite-a
1035/tcp open multidropper
1037/tcp open ams
1039/tcp open sbl
1041/tcp open danf-ak2
2869/tcp open icslap
5357/tcp open wsdapi
MAC Address: 00:E0:1C:3C:18:79 (Cradlepoint)
Nmap done: 100 IP addresses (2 hosts up) scanned in 3.34 seconds
從以上輸出信息中,能夠看到192.168.1-100之間,只有192.168.1.1和192.168.1.100兩臺主機是活動的。
用戶也能夠指定掃描多個網絡/子網範圍的主機。例如,掃描C類IP網絡192.168.1.*到192.168.100.*之間的全部主機。則執行命令以下所示:
nmap 192.168.1-100.* #星號(*)是一個通配符,表示0-255之間全部有效的主機。
六、Nmap掃描整個子網
Nmap也能夠使用CIDR(無類別域間路由)格式來掃描整個子網。CIDR是由網絡地址和子網掩碼兩部分組成,而且中間使用斜槓(/)分割。CIDR 地址中包含標準的32位IP地址和有關網絡前綴位數的信息。以CIDR地址222.80.18.18/25爲例,其中「/25」表示其前面地址中的前25位表明網絡部分,其他位表明主機部分。語法格式以下所示:
nmap [CIDR格式的網絡地址]
【示例2-9】使用Nmap掃描192.168.1.1/24整個子網中的全部主機。執行命令以下所示:
# nmap 192.168.1.1/24
Starting Nmap 6.47 ( http://nmap.org ) at 2015-05-05 19:41 CST
Nmap scan report for localhost (192.168.1.1)
Host is up (0.00064s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
80/tcp open http
1900/tcp open upnp
49152/tcp open unknown
MAC Address: 14:E6:E4:84:23:7A (Tp-link Technologies CO.)
Nmap scan report for localhost (192.168.1.100)
Host is up (0.00022s latency).
Not shown: 986 closed ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
902/tcp open iss-realsecure
912/tcp open apex-mesh
1033/tcp open netinfo
2869/tcp open icslap
5357/tcp open wsdapi
MAC Address: 00:E0:1C:3C:18:79 (Cradlepoint)
Nmap scan report for localhost (192.168.1.101)
Host is up (0.0041s latency).
All 1000 scanned ports on localhost (192.168.1.101) are closed
MAC Address: 14:F6:5A:CE:EE:2A (Xiaomi)
Nmap scan report for localhost (192.168.1.103)
Host is up (0.00027s latency).
Not shown: 977 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
53/tcp open domain
80/tcp open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
......
49157/tcp open unknown
MAC Address: 00:0C:29:DE:7E:04 (VMware)
Nmap scan report for localhost (192.168.1.102)
Host is up (0.0000040s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
80/tcp open http
9876/tcp open sd
Nmap done: 256 IP addresses (9 hosts up) scanned in 3.39 seconds
從輸出信息中,能夠看到共掃描了256個地址。其中,九臺主機是活動的,而且共用時間爲3.39秒。因爲章節的緣由,以上只列舉了五臺主機的掃描結果。其中,中間部份內容,使用省略號(......)代替了。
七、Nmap排除掃描目標
當用戶指定一個掃描範圍時(如局域網),在該範圍內可能會包括本身的主機,或者是本身搭建的一些服務等。可能不但願掃描這些主機。此時就能夠使用--exclude命令將這些主機排除。用戶使用--exclude選項,能夠指定排除單個主機、範圍或者整個網絡塊(使用CIDR格式)。例如,掃描192.168.1.1/24網絡內,除192.168.1.100-192.168.1.103以外的全部主機。則執行命令以下所示:
nmap [目標] --exclude [目標]
# nmap 192.168.1.1/24 --exclude 192.168.1.101 #掃描192.168.1.1/24網絡內除192.168.1.101之外的全部主機。
# nmap 192.168.1.1/24 --exclude 192.168.1.100-103
八、Nmap掃描排除列表中的目標
當用戶排除掃描的目標不少時,也能夠將這些目標主機的IP地址寫入到一個文本文件中。而後,使用--excludefile選項來指定排除掃描的目標。其中,排除掃描列表中目標的語法格式以下所示:
nmap [目標] --excludefile [目標列表]
使用Nmap掃描192.168.1.0/24網絡內主機,可是排除list.txt文件列表中指定的目標。具體操做步驟以下所示:
(1)建立list.txt文件,並寫入要排除掃描目標的IP地址。以下所示:
#vi list.txt
192.168.102
192.168.1.103
192.168.1.104
192.168.1.105
(2)實施掃描。執行命令以下所示:
# nmap 192.168.1.0/24 --excludefile list.txt
九、Nmap全面掃描
用戶能夠使用不一樣的選項,單獨掃描目標主機上的端口、應用程序版本或操做系統類型等。可是,選項-A能夠對目標主機實施全面掃描,掃描結果中包括各類類型的信息。
nmap -A [目標]
使用Nmap工具對目標主機192.168.1.105實施全面掃描。則執行命令以下所示:
# nmap -A 192.168.1.105
Starting Nmap 6.47 ( http://nmap.org ) at 2015-05-06 15:20 CST
Nmap scan report for localhost (192.168.1.105)
Host is up (0.00028s latency).
Not shown: 995 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.2.2 #FTP服務版本爲2.2.2,供應商是Vsftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230) #容許匿名登陸
|_drwxr-xr-x 2 14 0 4096 Apr 03 06:10 pub #FTP服務的根目錄爲pub
22/tcp open ssh OpenSSH 5.3 (protocol 2.0) #SSH服務版本是5.3,供應商是OpenSSH
| ssh-hostkey: #SSH服務密鑰
| 1024 83:9f:d0:8e:29:3c:7f:d9:11:da:a8:bb:b5:5a:4d:69 (DSA)
|_ 2048 2e:ea:ee:63:03:fd:9c:ae:39:9b:4c:e0:49:a9:8f:5d (RSA)
23/tcp open telnet Linux telnetd #Telnet服務
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo: #RPC詳細信息
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100024 1 34525/tcp status
|_ 100024 1 51866/udp status
445/tcp open netbios-ssn Samba smbd 3.X (workgroup: MYGROUP)#Samba服務版本爲3.X,供應商爲smbd
MAC Address: 00:0C:29:31:02:17 (VMware) #目標主機的MAC地址
Device type: general purpose #設備類型
Running: Linux 2.6.X|3.X #正在運行的系統
OS CPE: cpe:/o:linux:linux_kernel:2.6 cpe:/o:linux:linux_kernel:3 #操做系統中央處理單元
OS details: Linux 2.6.32 - 3.10 #操做系統詳細信息
Network Distance: 1 hop #網絡距離
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel #服務信息
Host script results:
| smb-os-discovery: #SMB操做系統發現
| OS: Unix (Samba 3.6.9-151.el6) #操做系統爲Unix,Samba版本爲3.6.9
| Computer name: router #計算機名
| NetBIOS computer name: #NetBIOS計算機名
| Domain name: #域名
| FQDN: router #徹底合格域名(FQDN)
|_ System time: 2015-05-06T15:20:28+08:00 #系統時間
| smb-security-mode:
| Account that was used for smb scripts: <blank>
| User-level authentication
| SMB Security: Challenge/response passwords supported
|_ Message signing disabled (dangerous, but default)
|_smbv2-enabled: Server doesn't support SMBv2 protocol
TRACEROUTE
HOP RTT ADDRESS
1 0.28 ms localhost (192.168.1.105)
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.51 seconds
能夠明顯看出比前面例子掃描結果更詳細。能夠看到目標主機上開啓的端口、服務器、版本、操做系統版本、內核、系統類型等。根據分析輸出的信息,可知目標主機上運行了FTP、SSH、Telnet等服務,而且能夠看到各服務的版本及權限信息。並且,還能夠知道目標主機的操做系統是Linux,內核版本爲2.6.32等。
十、端口掃描
一、TCP全連接掃描(-sT)
這是一種最爲普通的掃描方法,這種掃描方法的特色是:掃描的速度快,準確性高,對操做者沒有權限上的要求,可是容易被防火牆和IDS(防入侵系統)發現
運行的原理:經過創建TCP的三次握手鍊接來進行信息的傳遞
① Client端發送SYN;
② Server端返回SYN/ACK,代表端口開放;
③ Client端返回ACK,代表鏈接已創建;
④ Client端主動斷開鏈接。

二、SYN掃描(-sS)
這是一種祕密的掃描方式之一,由於在SYN掃描中Client端和Server端沒有造成3次握手,因此沒有創建一個正常的TCP鏈接,所以不被防火牆和日誌所記錄,通常不會再目標主機上留下任何的痕跡,可是這種掃描是須要root權限(對於windows用戶來講,是沒有root權限這個概念的,root權限是linux的最高權限,對應windows的管理員權限)
運行的原理圖以下:

三、NULL掃描
NULL掃描是一種反向的掃描方法,經過發送一個沒有任何標誌位的數據包給服務器,而後等待服務器的返回內容。這種掃描的方法比前面說起的掃描方法要隱蔽不少,可是這種方法的準確度也是較低的, 主要的用途是用來判斷操做系統是否爲windows,由於windows不遵照RFC 793標準,不論端口是開啓仍是關閉的都返回RST包

可是雖然NULL具備這樣的一些用處,可是本人卻認爲不宜使用NULL
一、NULL方法的精確度不高,端口的狀態返回的不是很準確
二、要獲取目標主機的運行系統,能夠使用參數(-O),來獲取對於一些操做系統沒法準確判斷的,能夠加上參數(-osscan-guess)
三、NULL掃描易被過濾
四、FIN掃描
FIN掃描的原理與NULL掃描的原理基本上是同樣的在這裏就不重複了
五、ACK掃描
ACK掃描的原理是發送一個ACK包給目標主機,不論目標主機的端口是否開啓,都會返回相應的RST包,經過判斷RST包中的TTL來判斷端口是否開啓
運行原理圖:

TTL值小於64端口開啓,大於64端口關閉
大體上主要的掃描方法就是這些,除了咱們能夠按照這樣些參數去執行掃描外,還能夠本身定義一個TCP掃描包
六、UDP掃描 sU(使用-sUV能增長掃描的準確性)
七、自定義TCP,參數爲--scanflags
例如:定製一個包含ACK掃描和SYN掃描的安裝包
命令:nmap --scanflags ACKSYN nmap.org

八、協議掃描 sO 獲取服務器支持哪些協議

九、輸出命令
-oN 文件名 輸出普通文件
-oX 文件名 輸出xml文件
十一、錯誤調試:
--log-errors 輸出錯誤日誌
--packet-trace 獲取從當前主機到目標主機的全部節點
接着講上節的內容,上節中提到了一個時間優化的問題是使用參數-n,經過不解析地址來進行優化時間的,可是優化時間的方法還有不少,好比說咱們能夠經過時間優化(0-5),指定單位時間內的探針數,設置組的大小
十二、時間優化(0-5)時間優化的參數是(-T0~5),最快的掃描速度爲-T5,最慢的掃描速度爲-T0,實現的原理:經過設置各個端口的掃描週期,從而來控制整個掃描的時間,好比說T0各個端口的掃描週期大約爲5分鐘,而T5各個端口的掃描週期爲5ms,可是過快的掃描也是有缺點的,掃描的週期過快,會很容易被防火牆和IDS發現並記錄,由於防火牆大多數會將端口週期過段識別爲掃描從而屏蔽掉,若是不對其進行設置的話,默認值爲T4--min-hostgroup/--max-hostgroup size 設置組的大小--min-parallelism/--max-parellelism time指定時間內的探針數具體的使用方法就不作介紹了,有興趣的話,能夠試一試研究一下變知道怎樣使用了在上節中還講漏了一個知識點獲取指定端口的參數(-p),這個參數的意義在於對於咱們有時候只想監控某個特定的端口的狀態,這個參數是即爲有用的,能夠節約了很多的時間例如:監控nmap.org的80端口的狀態命令:nmap -p 80 nmap.org