nmap使用指南
一、目標指定
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:[email protected])。 端口號(以及前面的冒號) 也可以省略,如果<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
更新腳本庫
備註:本文轉自《信安之路》
nmap使用指南