一、目标指定
1.CIDR标志位 192.168.1.0/24
2.指定範圍 192.168.1.1-255 192.168.1-255.1(任意位置)3.IPv6位址隻能用規範的IPv6位址或主機名指定。 CIDR 和八位位元組範圍不支援IPv6,因為它們對于IPv6幾乎沒什麼用。
-iL <檔案名>
主機名或者ip位址清單清單中的項可以是Nmap在 指令行上接受的任何格式(IP位址,主機名,CIDR,IPv6,或者八位位元組範圍)。 每一項必須以一個或多個空格,制表符或換行符分開。 如果您希望Nmap從标準輸入而不是實際檔案讀取清單, 您可以用一個連字元(-)作為檔案名。
-iR <數量>
随機選擇一定數量的目标
--exclude <主機名/位址>
不包含的主機
--excludefile <檔案名>
不包含的主機的清單
二、主機發現
1.如果沒有給出主機發現的選項,Nmap 就發送一個TCP ACK封包到80端口和一個ICMP回聲請求到每台目标機器。2.一個例外是ARP掃描用于區域網路上的任何目标機器。對于非特權UNIX shell使用者,使用connect()系統調用會發送一個SYN封包而不是ACK 這些預設行為和使用-PA -PE選項的效果相同。3.另外要注意的是即使您指定了其它 -P*選項,ARP發現(-PR)對于區域網路上的 目标而言是預設行為,因為它總是更快更有效。
-sL(清單掃描)
列出給出目标的具體内容,預設會對位址進行反向解析,顯示主機名。
-sn(不進行端口掃描)
與-sn一起完成的預設主機發現包括一個ICMP響應請求、TCP SYN到端口443、TCP ACK到端口80,以及一個ICMP的時間戳請求。
在以前的Nmap中,-sn被稱為-sP。-sP(Ping掃描)選項在預設情況下,發送一個ICMP回聲請求和一個TCP封包到80端口。如果非特權使用者執行,就發送一個SYN封包 (用connect()系統調用)到目标機的80端口。 當特權使用者掃描區域網路上的目标機時,會發送ARP請求(-PR), ,除非使用了--send-ip選項。 -sP選項可以和除-P0)之外的任何發現探測類型-P* 選項結合使用以達到更大的靈活性。 一旦使用了任何探測類型和端口選項,預設的探測(ACK和回應請求)就被覆寫了。
-Pn(無ping)
跳過主機發現階段,把每個都IP當成存活主機。
-P0 <協定号清單>(IP 協定 ping)
一個較新的主機發現選項是IP協定ping,它将IP資料包發送到IP報頭中指定的協定号。協定清單的格式與前面讨論的TCP、UDP和SCTP主機發現選項的端口清單相同。如果沒有指定協定,預設的是為ICMP(協定1)、IGMP(協定2)和ipin-IP(協定4)發送多個IP資料包。預設的協定可以在編譯時通過更改nmap.h中的預設proat探測端口規範來配置。注意,對于ICMP、IGMP、TCP(協定6)、UDP(協定17)和SCTP(協定132),資料包是用适當的協定标頭發送的,而其他協定被發送時,除了IP報頭之外沒有附加的資料(除非有任何資料——資料字元串,或者——資料長度選項被指定)。
-PS<端口清單>(TCP SYN Ping)
1.該選項發送一個設定了SYN标志位的空TCP封包,預設端口為80。不同的端口可以作為選項制定(如 -PS22,23,25,80,113,1050,3500)2.SYN标志位告訴對方您正試圖建立一個連接配接。 通常目标端口是關閉的,一個RST (複位) 包會發回來。 如果碰巧端口是開放的,目标會進行TCP三步握手的第二步,回應 一個SYN/ACK TCP封包。3.無論RST還是SYN/ACK響應都告訴Nmap該主機正在運作。然後運作Nmap的機器則會扼殺這個正在建立的連接配接, 發送一個RST而非ACK封包,ST封包是運作Nmap的機器而不是Nmap本身響應的,因為它對收到 的SYN/ACK感到很意外。
-PA<端口清單>(TCP ACK Ping)
1.ACK封包表示确認一個建立連接配接的嘗試,但該連接配接尚未完全建立。 是以遠端主機應該總是回應一個RST封包, 因為它們并沒有發出過連接配接請求到運作Nmap的機器,如果它們正在運作的話。2.如果非特權使用者嘗試該功能, 或者指定的是IPv6目标,前面說過的connect()方法将被使用。 這個方法并不完美,因為它實際上發送的是SYN封包,而不是ACK封包。3.他的預設端口和修改方法跟-PS一緻4.SYN探測更有可能用于這樣的系統,由于沒頭沒腦的ACK封包 通常會被識别成僞造的而丢棄。解決這個兩難的方法是通過即指定 -PS又指定-PA來即發送SYN又發送ACK。
-PU <端口清單>(UDP Ping)
1.發送一個空的(除非指定了--data-length UDP封包到給定的端口。端口清單的格式和前面讨論過的-PS和-PA選項還是一樣。 如果不指定端口,預設是31338。修改方法和-PA -PS一緻2.如果目标機器的端口是關閉的,UDP探測應該馬上得到一個ICMP端口無法到達的回應封包。 這對于Nmap意味着該機器正在運作。 許多其它類型的ICMP錯誤,像主機/網絡無法到達或者TTL逾時則表示down掉的或者不可到達的主機。 沒有回應也被這樣解釋。如果到達一個開放的端口,大部分服務僅僅忽略這個 空封包而不做任何回應。這就是為什麼預設探測端口是31338這樣一個 極不可能被使用的端口。少數服務如chargen會響應一個空的UDP封包, 進而向Nmap表明該機器正在運作。
-PR(ARP Ping)
如果Nmap發現目标主機就在它所在的區域網路上,它會進行ARP掃描。 即使指定了不同的ping類型(如 -PI或者 -PS) ,Nmap也會對任何相同區域網路上的目标機使用ARP。 如果您真的不想要ARP掃描,指定 --send-ip。對于IPv6(-6選項),-PR使用ICMPv6的鄰居發現而不是ARP。在RFC 4861中定義的鄰居發現可以看作是IPv6等效的。
--disable-arp-ping (No ARP or ND Ping)
不使用ARP發現和ICMPv6鄰居發現
-PY <端口清單> (SCTP INIT Ping)
1.一個SCTP INIT資料包,預設端口是80,如果要改變端口可以用如下形式: -PY22:-PY22,80,179,5060。注意PY和端口清單之間沒有空格。2.SCTP INIT資料包表示本機想跟目标主機關聯。一般情況下,目标主機的端口是關閉的,就會傳回一個SCTP 資料包。如果目标主機端口是開放的,它就會回複一個SCTP INIT-ACK資料包。如果運作nmap的本機支援SCTP協定棧的話,本機會給目标主機回複一個SCTP ABORT資料包,而不是SCTP COOKIE-ECHO資料包,這個資料包是由系統核心發送的,因為他沒有去向目标主機發起關聯請求。3.本技術用于主機發現,是以不必關心端口是否開放,隻要收到回複就可認為主機是存活的。4.在linux系統中,特權使用者發送和接收raw SCTP資料包,非特權使用者不支援這個掃描技術。
-PE; -PP; -PM(ICMP Ping Types)
-PE是ICMP echo請求時間戳和位址掩碼查詢可以分别用-PP和-PM選項發送。 時間戳響應(ICMP代碼14)或者位址掩碼響應(代碼18)表示主機在運作。
-n 不域名解析
-R 所有IP做反向域名解析
--system-dns 使用本機的dns伺服器
--dns-servers <server1,server2> (使用指定的dns伺服器)
如果指定dns伺服器無法使用,則會轉向使用本機配置的dns伺服器
三、端口狀态
open(開放的)
應用程式正在該端口接收TCP 連接配接或者UDP封包。
closed(關閉的)
關閉的端口對于Nmap也是可通路的(它接受Nmap的探測封包并作出響應), 但沒有應用程式在其上監聽。
filtered(被過濾的)
由于包過濾阻止探測封包到達端口, Nmap無法确定該端口是否開放。
unfiltered(未被過濾的)
未被過濾狀态意味着端口可通路,但Nmap不能确定它是開放還是關閉。
open|filtered(開放或者被過濾的)
當無法确定端口是開放還是被過濾的,Nmap就把該端口劃分成 這種狀态。開放的端口不響應就是一個例子。
closed|filtered(關閉或者被過濾的)
該狀态用于Nmap不能确定端口是關閉的還是被過濾的。 它隻可能出現在IPID Idle掃描中
四、端口掃描技術
-sS(TCP SYN掃描)
半開放掃描,不打開一個完整的TCP連結它發送一個SYN封包,然後等待響應。 SYN/ACK表示端口在監聽 (開放),而 RST (複位)表示沒有監聽者。如果數次重發後仍沒響應, 該端口就被标記為被過濾。如果收到ICMP不可到達錯誤 (類型3,代碼1,2,3,9,10,或者13),該端口也被标記為被過濾。
-sT(TCP connect()掃描)
Nmap通過建立connect() 系統調用要求作業系統和目标機以及端口建立連接配接,而不像其它掃描類型直接發送原始封包。 這是和Web浏覽器,P2P用戶端以及大多數其它網絡應用程式用以建立連接配接一樣的 高層系統調用。當Nmap連接配接,然後不發送資料又關閉連接配接, 許多普通UNIX系統上的服務會在syslog留下記錄,有時候是一條加密的錯誤消息。
-sU(UDP 掃描)
1.UDP掃描用-sU選項激活。它可以和TCP掃描如 SYN掃描 (-sS)結合使用來同時檢查兩種協定。2.UDP掃描發送空的(沒有資料)UDP報頭到每個目标端口。 如果傳回ICMP端口不可到達錯誤(類型3,代碼3), 該端口是closed(關閉的)。 其它ICMP不可到達錯誤(類型3, 代碼1,2,9,10,或者13)表明該端口是filtered(被過濾的)。 偶爾地,某服務會響應一個UDP封包,證明該端口是open(開放的)。 如果幾次重試後還沒有響應,該端口就被認為是 open|filtered(開放|被過濾的)。 這意味着該端口可能是開放的,也可能包過濾器正在封鎖通信。 可以用版本掃描(-sV)幫助區分真正的開放端口和被過濾的端口。
-sY(SCTP INIT scan)
SCTP INIT掃描類似TCP SYN掃描,他也是打開一個半開的連接配接,而不是建立一個完整的SCTP關聯。如果目标端口回複一個INIT-ACK資料包,則說明端口是開放的,如果回複一個ABORT資料包,端口是關閉的,如果沒有回複,端口會被标記标記為被過濾,當然如果收到了ICMP不可達的消息(type 3, code 0, 1, 2, 3, 9, 10, or 13)也會被标記為被過濾。
-sN; -sF; -sX (TCP Null,FIN,Xmas掃描)
1.如果掃描系統遵循該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标志位,就像點亮聖誕樹上所有的燈一樣。
2.除了探測封包的标志位不同,這三種掃描在行為上完全一緻。 如果收到一個RST封包,該端口被認為是 closed(關閉的),而沒有響應則意味着 端口是open|filtered(開放或者被過濾的)。 如果收到ICMP不可到達錯誤(類型 3,代号 1,2,3,9,10,或者13),該端口就被标記為 被過濾的。
-sA (TCP ACK掃描)
1.這種掃描與目前為止讨論的其它掃描的不同之處在于 它不能确定open(開放的)或者 open|filtered(開放或者過濾的))端口。 它用于發現防火牆規則,确定它們是有狀态的還是無狀态的,哪些端口是被過濾的。2.ACK掃描探測封包隻設定ACK标志位(除非您使用 --scanflags)。當掃描未被過濾的系統時, open(開放的)和closed(關閉的) 端口 都會傳回RST封包。Nmap把它們标記為 unfiltered(未被過濾的),意思是 ACK封包不能到達,但至于它們是open(開放的)或者 closed(關閉的) 無法确定。不響應的端口 或者發送特定的ICMP錯誤消息(類型3,代号1,2,3,9,10, 或者13)的端口,标記為 filtered(被過濾的)。
-sW(TCP視窗掃描)
在某些系統上,開放端口用正數表示視窗大小(甚至對于RST封包) 而關閉端口的視窗大小為0。是以,當收到RST時,視窗掃描不總是把端口标記為 unfiltered, 而是根據TCP視窗值是正數還是0,分别把端口标記為open或者 closed
-sM(TCP Maimon掃描)
探測封包是FIN/ACK。 根據RFC 793 (TCP),無論端口開放或者關閉,都應該對這樣的探測響應RST封包。 然而,Uriel注意到如果端口開放,許多基于BSD的系統隻是丢棄該探測封包。
--scanflags (定制的TCP掃描)
--scanflags選項可以是一個數字标記值如9 (PSH和FIN), 但使用字元名更容易些。 隻要是URG, ACK,PSH, RST,SYN,and FIN的任何組合就行。例如,--scanflags URGACKPSHRSTSYNFIN設定了所有标志位,但是這對掃描沒有太大用處。 标志位的順序不重要。
-sZ(SCTP COOKIE ECHO掃描)
如果目标端口開放,則會丢棄之前沒有發起關聯請求的SCTP COOKIE ECHO資料包,如果端口是關閉的則會傳回一個SCTP ABORT資料包。是以這個掃描技術,無法分辨過濾和開放,隻能分辨出關閉的端口。
--sI <僵屍主機位址:端口>(idlescan)
1.這種進階的掃描方法允許對目标進行真正的TCP端口盲掃描 (意味着沒有封包從您的真實IP位址發送到目标)。相反,side-channel攻擊 利用zombie主機上已知的IP分段ID序列生成算法來窺探目标上開放端口的資訊。2.如果您由于IPID改變希望探測zombie上的特定端口, 您可以在zombie 主機後加上一個冒号和端口号。 否則Nmap會使用預設端口(80)。
-sO(IP協定掃描)
IP 協定掃描可以讓您确定目标機支援哪些IP協定 (TCP,ICMP,IGMP,等等)。從技術上說,這不是端口掃描 ,既然它周遊的是IP協定号而不是TCP或者UDP端口号。 但是它仍使用 -p選項選擇要掃描的協定号, 用正常的端口表格式報告結果,甚至用和真正的端口掃描一樣 的掃描引擎。是以它和端口掃描非常接近,也被放在這裡讨論。
-b <ftp relay host>(FTP彈跳掃描)
1.FTP協定的一個有趣特征(RFC 959) 是支援所謂代理ftp連接配接。2.它允許使用者連接配接到一台FTP伺服器,然後要求檔案送到一台第三方伺服器。 這個特性在很多層次上被濫用,是以許多伺服器已經停止支援它了。其中一種就是導緻FTP伺服器對其它主機端口掃描。 隻要請求FTP伺服器輪流發送一個檔案到目标主機上的所感興趣的端口。 錯誤消息會描述端口是開放還是關閉的。3.這是繞過防火牆的好方法,因為FTP伺服器常常被置于可以通路比Web主機更多其它内部主機的位置。4.Nmap用-b選項支援ftp彈跳掃描。參數格式是 <username>:<password>@<server>:<port>。<Server> 是某個脆弱的FTP伺服器的名字或者IP位址。 您也許可以省略<username>:<password>, 如果伺服器上開放了匿名使用者(user:anonymous password:-wwwuser@)。 端口号(以及前面的冒号) 也可以省略,如果<server>使用預設的FTP端口(21)。
五、端口掃描設定
預設情況下,Nmap用指定的協定對端口1到1024以及nmap-services 檔案中列出的更高的端口在掃描。
-p <端口号,端口清單>
1.制定掃描某個或某些端口用逗号分隔,或者用連結符号表示範圍也可。2.對于-sO IP協定掃描,該選項用來指定協定号(0-255)。
--exclede-ports <端口清單>(排除的端口)
指定排除的端口,如果是指定排除的協定号的話,他的值在0-255之間
-F(快速掃描)
在nmap的nmap-services 檔案中(對于-sO,是協定檔案)指定您想要掃描的端口。 這比掃描所有65535個端口快得多。 因為該清單包含如此多的TCP端口(1200多),這和預設的TCP掃描 scan (大約1600個端口)速度差别不是很大。如果用--datadir選項指定小的nmap-services檔案 ,差别會很大。
-r(順序掃描端口)
預設情況下,Nmap按随機順序掃描端口 (除了出于效率的考慮,常用的端口前移)。可以指定-r來順序端口掃描。
--port-ratio <ratio>
掃描nmap-services中給出的目标的一定比例,這個值在1.0-0.0之間。
--top-ports
掃描nmap-services中的前多少個端口
六.服務和版本掃描
-sV(版本掃描)
掃描服務版本,也可以用-A同時進行作業系統探測和版本掃描。
--allports(版本掃描時,不排除任何端口)
1.預設情況下,Nmap版本探測會跳過9100 TCP端口,因為一些列印機簡單地列印送到該端口的 任何資料,這回導緻數十頁HTTP get請求,二進制 SSL會話請求等等被列印出來。2.這一行為可以通過修改或删除nmap-service-probes 中的Exclude訓示符改變
--version-intensity <強度>(版本掃描強度)
強度在1到9之間,一般來說,強度越大,服務越有可能被正确識别
--version-light
相當于 --version-intensity 2
--vension-all
相當于 --version-intensity 9
--version-trace
列印出正在進行的版本掃描的詳細資訊
七、作業系統探測
-O (啟用作業系統檢測)
也可以使用-A來同時啟用作業系統檢測和版本掃描。
--osscan-limit
隻對至少知曉一個端口開放或者關閉的主機進行作業系統探測
--osscan-guess;--fuzzy
無法确定作業系統類型的時候,預設進行推測。但是使用這兩項,會讓猜測更加準确。
--max-os-tries(作業系統識别重試次數)
預設重試五次,
八、掃描性能設定
--min-hostgroup <milliseconds>; --max-hostgroup <milliseconds> (調整并行掃描組的大小)
1.Nmap具有并行掃描多主機端口或版本的能力,Nmap将多個目标IP位址 空間分成組,然後在同一時間對一個組進行掃描。通常,大的組更有效。缺點是隻有當整個組掃描結束後才會提供主機的掃描結果。如果組的大小定義 為50,則隻有目前50個主機掃描結束後才能得到報告(詳細模式中的補充資訊 除外)。2.預設方式下,Nmap采取折衷的方法。開始掃描時的組較小, 最小為5,這樣便于盡快産生結果;随後增長組的大小,最大為1024。确切的 大小依賴于所給定的選項。為保證效率,針對UDP或少量端口的TCP掃描,Nmap 使用大的組。--max-hostgroup選項用于說明使用最大的組,Nmap不 會超出這個大小。--min-hostgroup選項說明最小的組,Nmap 會保持組大于這個值。如果在指定的接口上沒有足夠的目标主機來滿足所指定的最小值,Nmap可能會采用比所指定的值小的組。這兩個參數雖然很少使用, 但都用于保持組的大小在一個指定的範圍之内。3.這些選項的主要用途是說明一個最小組的大小,使得整個掃描更加快速。通常選擇256來掃描C類網段。對于端口數較多的掃描,超出該值沒有意義。對于 端口數較少的掃描,2048或更大的組大小是有幫助的。
--min-parallelism <milliseconds>; --max-parallelism <milliseconds> (調整探測封包的并行度)
這些選項控制用于主機組的探測封包數量,可用于端口掃描和主機發現。預設狀态下,Nmap基于網絡性能計算一個理想的并行度,這個值經常改變。如果封包被丢棄, Nmap降低速度,探測封包數量減少。随着網絡性能的改善,理想的探測封包數量會緩慢增加。這些選項确定這個變量的大小範圍。預設狀态下,當網絡不可靠時,理想的并行度值 可能為1,在好的條件下,可能會增長至幾百。最常見的應用是--min-parallelism值大于1,以加快 性能不佳的主機或網絡的掃描。這個選項具有風險,如果過高則影響準确度,同時也會降低Nmap基于網絡條件動态控制并行度的能力。這個值設為10較為合适, 這個值的調整往往作為最後的手段。
--max-parallelism選項通常設為1,以防止Nmap在同一時間 向主機發送多個探測封包,和選擇--scan-delay同時使用非常有用。
--min-rtt-timeout <milliseconds>, --max-rtt-timeout <milliseconds>, --initial-rtt-timeout<milliseconds> (調整探測封包逾時)
Nmap使用一個運作逾時值來确定等待探測封包響應的時間,随後會放棄或重新 發送探測封包。Nmap基于上一個探測封包的響應時間來計算逾時值,如果網絡延遲比較顯著 和不定,這個逾時值會增加幾秒。初始值的比較保守(高),而當Nmap掃描無響應 的主機時,這個保守值會保持一段時間。這些選項以毫秒為機關,采用小的--max-rtt-timeout值,使 --initial-rtt-timeout值大于預設值可以明顯減少掃描時間,特别 是對不能ping通的掃描(-P0)以及具有嚴格過濾的網絡。如果使用太 小的值,使得很多探測封包逾時進而重新發送,而此時可能響應消息正在發送,這使得整個掃描的時 間會增加。如果所有的主機都在本地網絡,對于--max-rtt-timeout值來 說,100毫秒比較合适。如果存在路由,首先使用ICMP ping工具ping主機,或使用其 它封包工具如hpings,可以更好地穿透防火牆。檢視大約10個包的最大往返時間,然後将 --initial-rtt-timeout設成這個時間的2倍,--max-rtt-timeout 可設成這個時間值的3倍或4倍。通常,不管ping的時間是多少,最大的rtt值不得小于100ms, 不能超過1000ms。--min-rtt-timeout這個選項很少使用,當網絡不可靠時, Nmap的預設值也顯得過于強烈,這時這個選項可起作用。當網絡看起來不可靠時,Nmap僅将 逾時時間降至最小值,這個情況是不正常的,需要向nmap-dev郵件清單報告bug。
--host-timeout <milliseconds> (放棄低速目标主機)
由于性能較差或不可靠的網絡硬體或軟體、帶寬限制、嚴格的防火牆等原因, 一些主機需要很長的時間掃描。這些極少數的主機掃描往往占 據了大部分的掃描時間。是以,最好的辦法是減少時間消耗并且忽略這些主機,使用 --host-timeout選項來說明等待的時間(毫秒)。通常使用1800000 來保證Nmap不會在單個主機上使用超過半小時的時間。需要注意的是,Nmap在這半小時中可以 同時掃描其它主機,是以并不是完全放棄掃描。逾時的主機被忽略,是以也沒有針對該主機的 端口表、作業系統檢測或版本檢測結果的輸出。
--scan-delay <milliseconds>; --max-scan-delay <milliseconds> (調整探測封包的時間間隔)
這個選項用于Nmap控制針對一個主機發送探測封包的等待時間(毫秒),在帶寬 控制的情況下這個選項非常有效。Solaris主機在響應UDP掃描探測封包封包時,每秒 隻發送一個ICMP消息,是以Nmap發送的很多數探測封包是浪費的。--scan-delay 設為1000,使Nmap低速運作。Nmap嘗試檢測帶寬控制并相應地調整掃描的延遲,但 并不影響明确說明何種速度工作最佳。--scan-delay的另一個用途是躲閉基于門檻值的入侵檢測和預防 系統(IDS/IPS)。
-T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane> (設定時間模闆)
上述優化時間控制選項的功能很強大也很有效,但有些使用者會被迷惑。此外, 往往選擇合适參數的時間超過了所需優化的掃描時間。是以,Nmap提供了一些簡單的 方法,使用6個時間模闆,使用時采用-T選項及數字(0 - 5) 或名稱。模闆名稱有paranoid (0)、sneaky (1)、polite (2)、normal(3)、 aggressive (4)和insane (5)。前兩種模式用于IDS躲避,Polite模式降低了掃描 速度以使用更少的帶寬和目标主機資源。預設模式為Normal,是以-T3 實際上是未做任何優化。Aggressive模式假設使用者具有合适及可靠的網絡進而加速 掃描。Insane模式假設使用者具有特别快的網絡或者願意為獲得速度而犧牲準确性。使用者可以根據自己的需要選擇不同的模闆,由Nmap負責選擇實際的時間值。 模闆也會針對其它的優化控制選項進行速度微調。例如,-T4 針對TCP端口禁止動态掃描延遲超過10ms,-T5對應的值為5ms。 模闆可以和優化調整控制選項組合使用,但模闆必須首先指定,否則模闆的标準值 會覆寫使用者指定的值。建議在掃描可靠的網絡時使用 -T4,即使 在自己要增加優化控制選項時也使用(在指令行的開始),進而從這些額外的較小的優化 中獲益。如果用于有足夠的帶寬或以太網連接配接,仍然建議使用-T4選項。 有些使用者喜歡-T5選項,但這個過于強烈。有時使用者考慮到避免使主機 崩潰或者希望更禮貌一些會采用-T2選項。他們并沒意識到-T Polite選項是如何的慢,這種模式的掃描比預設方式實際上要多花10倍的時間。預設時間 選項(-T3)很少有主機崩潰和帶寬問題,比較适合于謹慎的使用者。不進行 版本檢測比進行時間調整能更有效地解決這些問題。雖然-T0和-T1選項可能有助于避免IDS告警,但在進行上千個主機或端口掃描時,會顯著增加時間。對于這種長時間的掃描,甯可設定确切的時間值,而不要去依賴封裝的-T0和-T1選項。T0選項的主要影響是對于連續掃描,在一個時間隻能掃描一個端口, 每個探測封包的發送間隔為5分鐘。T1和T2選項比較類似, 探測封包間隔分别為15秒和0.4秒。T3是Nmap的預設選項,包含了并行掃描。 T4選項與 --max-rtt-timeout 1250 --initial-rtt-timeout 500 等價,最大TCP掃描延遲為10ms。T5等價于 --max-rtt-timeout 300 --min-rtt-timeout 50 --initial-rtt-timeout 250 --host-timeout 900000,最大TCP掃描延遲為5ms。
--max-retries <次數>
沒有響應後的重試次數
--script-timeout <time> (設定腳本逾時時間)
預防腳本的bug導緻影響效率
--min-rate <number>; --max-rate <number> (發包速度控制)
最少每秒發多少,最多每秒發多少。如果0.1的話就是10秒一個包的意思
--defeat-rst-ratelimit
忽略系統reset包的速率限制
--defeat-icmp-ratelimit
忽略系統ICMP錯誤消息速率限制
--nsock-engine epoll|kqueue|poll|select
選擇系統IO模型,nmap -V可以檢視支援哪些
九、防火牆繞過/IDS躲避
-f (封包分段); --mtu (使用指定的MTU)
1.-f選項要求掃描時(包挺ping掃描)使用小的IP包分段。其思路是将TCP頭分段在幾個包中,使得包過濾器、IDS以及其它工具的檢測更加困難。必須小心使用這個選項,有些系統在處理這些小包時存在問題,例如舊的網絡嗅探器Sniffit在接收到第一個分段時會立刻出現分段錯誤。該選項使用一次,Nmap在IP頭後将包分成8個位元組或更小。是以,一個20位元組的TCP頭會被分成3個包,其中2個包分别有TCP頭的8個位元組,另1個包有TCP頭的剩下4個位元組。當然,每個包都有一個IP頭。再次使用-f可使用 16位元組的分段(減少分段數量)。2.使用--mtu選項可 以自定義偏移的大小,使用時不需要-f,偏移量必須是8的倍數。包過濾器和防火牆對所有的IP分段排隊,如Linux核心中的 CONFIG-IP-ALWAYS-DEFRAG配置項,分段包不會直接使用。一些網絡無法 承受這樣所帶來的性能沖擊,會将這個配置禁止。其它禁止的原因有分段 包會通過不同的路由進入網絡。一些源系統在核心中對發送的封包進行分段,使用iptables連接配接跟蹤子產品的Linux就是一個例子。當使用類似Ethereal的嗅探器時,掃描必須保證發送的封包要分段。如果主機作業系統會産生問題,嘗試使用--send-eth選項以避開IP層而直接發送原始的以太網幀。
-D <殭屍電腦1 ,殭屍電腦2,...>(結合殭屍電腦幹擾進行掃描)首先必須讓目标主機認為是殭屍電腦在掃描它,IDS雖然能夠捕捉到掃描的IP,但是并知道哪個是真實的攻擊者,使用逗号來分隔每個殭屍電腦,如果使用了ME選項,nmap将不會使用本機位址,否則nmap将會把本機位址放在一個随機位置。注意,太多的欺騙包甚至可能造成DDoS的效果,而且很多多IPS會過濾欺騙包
-S <IP位址>(源位址欺騙)
僞造掃描請求源位址。在某些情況下,Nmap可能無法确定你的源位址(如果這樣,Nmap會給出 提示)。此時,使用-S選項并說明所需發送包的接口IP位址。-e選項常在這種情況下使用,也可采用-P0選項。
-e <interface>(指定使用的網絡接口)
告訴nmap使用哪個網絡接口收發封包
--source-port <portnumber>; -g <portnumber> (源端口欺騙)
隻需要提供一個端口号,Nmap就可以從這些 端口發送資料。為使特定的作業系統正常工作,Nmap必須使用不同的端口号。 DNS請求會忽略--source-port選項,這是因為Nmap依靠系 統庫來處理。大部分TCP掃描,包括SYN掃描,可以完全支援這些選項,UDP掃 描同樣如此。
--date <hex string>
可以用這樣的格式指定值 --data 0xdeadbeef --data \xCA\xFE\x09如果指定0x00ff 這個的數字,将不會做位元組序轉換。確定你的位元組序,對方可以接受
--data-string <string>
例如,--data-string "Scan conducted by Security Ops, extension 7192" or --data-string "Ph34r my l33t skills"
--data-length <number> (發送封包時 附加随機資料)
這個選項告訴Nmap在發送的封包上 附加指定數量的随機位元組。作業系統檢測(-O)包不受影響。
--ip-options <S|R [route]|L [route]|T|U ... >; --ip-options <hex string> (Send packets with specified ip options)
指定IP頭
--proxies <Comma-separated list of proxy URLs>
設定代理,支援http代理和socks4代理
--badsum(讓nmap使用一個僞造的不合法的checksum)
這樣的資料包一般都會丢棄,如果收到任何回複,這個回複一定來自防火牆
--adler32(使用棄用的Adler32來代替CRC32C做SCTP的checksum)
這是為了從舊版的SCTP協定裝置獲得響應
--ttl <value> (設定IP time-to-live域)
設定IPv4封包的time-to-live域為指定的值。
--randomize-hosts (對目标主機的順序随機排列)
告訴Nmap在掃描主機前對每個組中的主機随機排列,最多可達 8096個主機。
--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。
十、輸出
-oN <filespec> (标準輸出)
将結果輸入制定檔案
-oX <filespec> (XML輸出)
将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(提高輸出資訊的詳細程度)
-d [level](設定調試級别)
--packet-trace(跟蹤發出的封包)
-iflist(列舉端口和路由)
--append-out(在輸出檔案住追加)
但對于XML(-oX)掃描輸出 檔案無效,無法正常解析,需要手工修改。
--resume <filename> (繼續中斷的掃描)
如果标準掃描 (-oN)或Grep掃描(-oG)日志 被保留,使用者可以要求Nmap恢複終止的掃描,隻需要簡單地使用選項 --resume并說明标準/Grep掃描輸出檔案,不允許 使用其它參數,Nmap會解析輸出檔案并使用原來的格式輸出。使用方式 如nmap --resume <logfilename>。Nmap将把新地結果添加到檔案中,這種方式不支援XML輸出格式,原因是将兩次運作結果合并至一個XML檔案比較困難。
--stylesheet <path or URL> (設定XSL樣式表,轉換XML輸出)
--webxml
--stylesheet https://nmap.org/svn/docs/nmap.xsl 的簡寫。
--no-stylesheet (忽略XML聲明的XSL樣式表)
--open
隻顯示開放或者可能開放的端口
--stats-every <time>(周期性的輸出統計資料)
--stats-every 10s 每10秒輸出一次,,這個輸出會被輸出到标準輸出,和XML檔案
--reason(列印主機和端口狀态的原因)
十一、其他選項
-6(啟用IPv6掃描)
-A(強力掃描模式)
個選項啟用了作業系統檢測(-O) 和版本掃描(-sV),以後會增加更多的功能。 目的是啟用一個全面的掃描選項集合,不需要使用者記憶大量的 選項。這個選項僅僅啟用功能,不包含用于可能所需要的 時間選項(如-T4)或細節選項(-v)。
--datadir <檔案夾名稱> (說明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-ip (在原IP層發送)
要求Nmap通過原IP套接字發送封包,而不是低層的以 太網幀。這是--send-eth選項的補充。
--send-eth
使用raw ethernet包來發包
--privileged (假定使用者具有全部權限)
告訴Nmap假定其具有足夠的權限進行源套接字包發送、 封包捕獲和類似UNIX系統中根使用者操作的權限。預設狀态下, 如果由getuid()請求的類似操作不為0,Nmap将退出。 --privileged在具有Linux核心性能的類似 系統中使用非常有效,這些系統配置允許非特權使用者可以進行 原封包掃描。需要明确的是,在其它選項之前使用這些需要權 限的選項(SYN掃描、作業系統檢測等)。Nmap-PRIVILEGED變量 設定等價于--privileged選項。
--unprivileged(假定使用者沒有特權)
--interactive (在互動模式中啟動)
在互動模式中啟動Nmap,提供互動式的Nmap提示,便于 進行多個掃描(同步或背景方式)。對于從多使用者系統中掃描 的使用者非常有效,這些使用者常需要測試他們的安全性,但不希望 系統中的其它使用者知道他們掃描哪些系統。使用--interactive 激活這種方式,然後輸入h可 獲得幫助資訊。由于需要對正确的shell程式和整個功能非常熟悉, 這個選項很少使用。這個選項包含了一個!操作符,用于執行shell指令, 這是不安裝Nmap setuid root的多個原因之一。
--release-memory (退出後namp自己釋放記憶體)
--servicedb <services file>
nmap-service檔案的路徑
--versiondb <service probes file>
nmap-service-probes檔案路徑
-V;--version (檢視版本)
-h;--help(簡要的使用介紹)
十二、NSE腳本引擎
https://nmap.org/nsedoc/ 具體腳本的使用手冊
--script <腳本名>
腳本名字前面加 + 會讓腳本強制執行指定名字的時候可以使用shell風格的通配符"*"。
nmap --script "http-*"
加載所有的名字以http-開頭的腳本,必須用引号包起來,讓通配符不受shell影響。
nmap --script "not intrusive"
加載所有非入侵類型的腳本
nmap --script "default or safe"
在功能上等同于nmap --script "default,safe"加載了所有預設類或者安全類,或者是兩者都包含的。
nmap --script "default and safe"
加載在同屬于兩者的腳本
nmap --script "(default or safe or intrusive) and not http-*"
加載屬于預設類或者安全類或者入侵類的但是名字開頭不是http-的腳本
--script-args <n1>=<v1>,<n2>={<n3>=<v3>},<n4>={<v4>,<v5>}
指定腳本參數,裡面不能有‘{’, ‘}’, ‘=’, or ‘,’,如果要用就用\轉義
--script-args-file <filename>
從一個檔案擷取腳本參數
--script-trace
列印出腳本執行的具體資訊
--script-updatedb
更新腳本庫
備注:本文轉自《信安之路》hl0rey的分享。
