Nmap使用指南

1、目標指定 linux

1.CIDR標誌位 192.168.1.0/24 web

2.指定範圍 192.168.1.1-255 192.168.1-255.1(任意位置) 3.IPv6地址只能用規範的IPv6地址或主機名指定。 CIDR 和八位字節範圍不支持IPv6,由於它們對於IPv6幾乎沒什麼用。 算法

-iL <文件名> shell

主機名或者ip地址列表列表中的項能夠是Nmap在 命令行上接受的任何格式(IP地址,主機名,CIDR,IPv6,或者八位字節範圍)。 每一項必須以一個或多個空格,製表符或換行符分開。 若是您但願Nmap從標準輸入而不是實際文件讀取列表, 您能夠用一個連字符(-)做爲文件名。 瀏覽器

-iR <數量> 安全

隨機選擇必定數量的目標 服務器

--exclude <主機名/地址> 網絡

不包含的主機 app

--excludefile <文件名> dom

不包含的主機的列表

2、主機發現

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到端口44三、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服務器

3、端口狀態

open(開放的)

應用程序正在該端口接收TCP 鏈接或者UDP報文。

closed(關閉的)

關閉的端口對於Nmap也是可訪問的(它接受Nmap的探測報文並做出響應), 但沒有應用程序在其上監聽。

filtered(被過濾的)

因爲包過濾阻止探測報文到達端口, Nmap沒法肯定該端口是否開放。

unfiltered(未被過濾的)

未被過濾狀態意味着端口可訪問,但Nmap不能肯定它是開放仍是關閉。

open|filtered(開放或者被過濾的)

當沒法肯定端口是開放仍是被過濾的,Nmap就把該端口劃分紅 這種狀態。開放的端口不響應就是一個例子。

closed|filtered(關閉或者被過濾的)

該狀態用於Nmap不能肯定端口是關閉的仍是被過濾的。 它只可能出如今IPID Idle掃描中

4、端口掃描技術

-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)。

5、端口掃描設置

默認狀況下,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

打印出正在進行的版本掃描的詳細信息

7、操做系統探測

-O (啓用操做系統檢測)

也可使用-A來同時啓用操做系統檢測和版本掃描。

--osscan-limit

只對至少知曉一個端口開放或者關閉的主機進行操做系統探測

--osscan-guess;--fuzzy

沒法肯定操做系統類型的時候,默認進行推測。可是使用這兩項,會讓猜想更加準確。

--max-os-tries(操做系統識別重試次數)

默認重試五次,

8、掃描性能設置

--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能夠查看支持哪些

9、防火牆繞過/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。

10、輸出

-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(打印主機和端口狀態的緣由)

11、其餘選項

-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(簡要的使用介紹)

12、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

更新腳本庫

相關文章
相關標籤/搜索