Nmap 操作手冊 - 完整版


Nmap - 基礎篇

Nmap 安裝

RedHat

官方文檔:https://nmap.org/book/inst-linux.html

  • 下載Nmap.rpm包
# 方式一:
$ curl -OL https://nmap.org/dist/nmap-7.92-1.x86_64.rpm

# 方式二:
$ wget https://nmap.org/dist/nmap-7.92-1.x86_64.rpm --no-check-certificate
  • rpm安裝Nmap
$ rpm -ivh nmap-7.92-1.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:nmap-2:7.92-1                    ################################# [100%]

Windows

官方文檔:https://nmap.org/book/inst-windows.html

  • 下載Nmap.zip壓縮包
$ curl -OL https://nmap.org/dist/nmap-7.92-win32.zip
  • 解壓Nmap.zip包
# 該方式爲免安裝方式 只需要到nmap解壓路徑下執行 `nmap.exe 參數`即可

Debina & Ubuntu

參考文檔:https://nmap.org/book/inst-linux.html#inst-yum

  • 下載RPM包
# 方式一:
$ curl -OL https://nmap.org/dist/nmap-7.92-1.x86_64.rpm

# 方式二:
$ wget https://nmap.org/dist/nmap-7.92-1.x86_64.rpm --no-check-certificate
  • 安裝alien工具
# alien工具: 可將RPM包轉換成deb包
# Centos系統中RPM轉換deb時
$ yum install -y alien
$ alien --to-deb --scripts nmap-7.92-1.x86_64.rpm


# Debina&Ubuntu系統中deb轉RPM時
$ apt-get update
$ apt-get install -y alien
$ alien --to-rpm --scripts nmap_7.92-2_amd64.deb
  • 安裝Nmap
# RPM方式安裝
$ rpm -ivh nmap-7.92-1.x86_64.rpm

# deb方式安裝
$ dpkg -i nmap_7.92-2_amd64.deb
$ dpkg --install nmap_7.92-2_amd64.deb

Others Linux

官方文檔:https://nmap.org/book/inst-other-platforms.html

  • 下載Nmap源碼包
$ curl -OL https://nmap.org/dist/nmap-7.92.tar.bz2
  • 編譯Nmap源碼包
# 將nmap-7.92.tar.bz2 輸出結果 重定向到 tar xvf - 解壓到當前目錄
$ bzip2 -cd nmap-7.92.tar.bz2 | tar xvf -
$ cd nmap-7.92
$ ./configure
$ make
$ su root
$ make install

Nmap 參數(簡單版)

參考文檔:https://nmap.org/book/man-briefoptions.html

目標說明

  • -iL <inputfilename>:從主機/網絡列表輸入;
  • -iR <num hosts>:選擇隨機目標;
  • --exclude <host1 [,host2] [,host3],...>:排除主機/網絡;
  • --excludefile <exclude_file>:從文件中排除列表。

主機發現

  • -sL:列表掃描 - 只列出要掃描的目標;
  • -sn:Ping掃描 - 禁用端口掃描;
  • -Pn:將所有主機視爲在線 - 跳過主機發現;
  • -PS / PA / PU / PY [端口列表]:TCP SYN / ACK,UDP或SCTP發現到給定端口;
  • -PE / PP / PM:ICMP回送,時間戳和網絡掩碼請求發現探測;
  • -PO [協議列表]:IP協議Ping;
  • -n / -R:從不進行DNS解析/始終解析[默認:有時];
  • --dns-servers <serv1 [,serv2],...>:指定自定義DNS服務器;
  • --system-dns:使用OS的DNS解析器;
  • --traceroute:每個主機的跟蹤跳轉路徑。

掃描技術

  • -sS / sT / sA / sW / sM:TCP SYN / Connect()/ ACK / Window / Maimon掃描;
  • -sU:UDP掃描;-sN / sF / sX:TCP Null,FIN和Xmas掃描;
  • --scanflags <flags>:自定義TCP掃描標誌;
  • -sI <zombie host [:probeport]>:空閒掃描;
  • -sY / sZ:SCTP INIT / COOKIE-ECHO掃描;
  • -sO:IP協議掃描;
  • -b <FTP中繼主機>:FTP反彈掃描。

端口規格和掃描順序

  • -p <端口範圍>:僅掃描指定的端口;
  • --exclude-ports <端口範圍>:從掃描中排除指定的端口;
  • -F:快速模式 - 掃描比默認掃描更少的端口;
  • -r:連續掃描端口 - 不要隨機化;
  • --top-ports <number>:掃描最常見的端口;
  • --port-ratio <ratio>:掃描端口比更常見。

服務/版本檢測

  • -sV:探測開放端口以確定服務/版本信息;
  • --version-intensity :從0到9(嘗試所有探針)設置;
  • --version-light:限制最可能的探針(強度2);
  • --version-all:嘗試每一個探針(強度9);
  • --version-trace:顯示詳細的版本掃描活動(用於調試)。

腳本掃描

  • -sC:相當於--script = default;
  • --script = <Lua scripts>:<Lua scripts>是逗號分隔的列表目錄,腳本文件或腳本類別;
  • --script-args = <n1 = v1,[n2 = v2,...]>:爲腳本提供參數;
  • --script-args-file = filename:在文件中提供NSE腳本args;
  • --script-trace:顯示發送和接收的所有數據;
  • --script-updatedb:更新腳本數據庫;
  • --script-help = :顯示有關腳本的幫助。<Lua scripts>是以逗號分隔的腳本文件列表或腳本的類別。

操作系統檢測

  • -O:啓用OS檢測;
  • --osscan-limit:將OS檢測限制爲有希望的目標;
  • --osscan-guess:更積極地猜測操作系統。

時間和性能

採用

  • -T <0-5>:設置時序模板(越高越快);
  • --min-hostgroup / max-hostgroup :並行主機掃描組大小;
  • --min-parallelism / max-parallelism :探測並行化;
  • --min-rtt-timeout / max-rtt-timeout / initial-rtt-timeout
  • --max-retries :端口掃描探測重新傳輸的上限數量;
  • --host-timeout
  • --scan-delay / - max-scan-delay
  • --min-rate :發送數據包的速度不低於每秒
  • --max-rate :發送數據包的速度不超過每秒

防火牆/IDS躲避和哄騙

  • -F; --mtu :分段數據包(可選地,具有給定的MTU);
  • -D <decoy1,decoy2 [,ME],...>:用誘餌披露掃描;
  • -S <IP_Address>:欺騙源地址;
  • -e :使用指定的接口;
  • -g / - source-port :使用給定的端口號;
  • --proxies <url1,[url2],...>:通過HTTP / SOCKS4代理中繼連接;
  • --data :爲發送的數據包附加自定義有效負載;
  • --data-string :爲發送的數據包附加自定義ASCII字符串;
  • --data-length :將隨機數據附加到已發送的數據包;
  • --ip-options :發送帶有指定ip選項的數據包;
  • --ttl :設置IP生存時間字段;
  • --spoof-mac <mac地址/前綴/供應商名稱>:欺騙你的MAC地址;
  • --badsum:使用僞TCP / UDP / SCTP校驗和發送數據包。

輸出

  • -oN / -oX / -oS / -oG :正常輸出掃描,XML,s | <rIpt kIddi3 和Grepable格式,分別爲給定的文件名;
  • -oA :一次輸出三種主要格式;
  • -v:增加詳細級別(使用-vv或更高級別以獲得更好的效果);
  • -d:提高調試級別(使用-dd或更多以獲得更好的效果);
  • --reason:顯示端口處於特定狀態的原因;
  • --open:僅顯示打開(或可能打開)的端口;
  • --packet-trace:顯示發送和接收的所有數據包;
  • --iflist:打印主機接口和路由(用於調試);
  • --append-output:追加而不是clobber指定的輸出文件;
  • --resume :恢復中止掃描;
  • --stylesheet <path / URL>:用於將XML輸出轉換爲HTML的XSL樣式表;
  • --webxml:來自Nmap.Org的參考樣式表,用於更多可移植的XML;
  • --no-stylesheet:防止與XML輸出相關聯的XSL樣式表。

其它選項

  • -6:啓用IPv6掃描;
  • -A:啓用操作系統檢測,版本檢測,腳本掃描和跟蹤路由;
  • --datadir :指定自定義Nmap數據文件位置;
  • --send-eth / - send-ip:使用原始以太網幀或IP數據包發送;
  • --privileged:假設用戶具有完全特權;
  • --unprivileged:假設用戶缺少原始套接字權限;
  • -V:打印版本號;
  • -h:打印此幫助摘要頁面。

Nmap 參數(詳細版)

參考文檔:http://www.nmap.com.cn/doc/manual.shtm

參數速查表

參數(注意區分大小寫) 說明
-sT  TCP connect()掃描,這種方式會在目標主機的日誌中記錄大批連接請求和錯誤信息。
-sS  半開掃描,很少有系統能把它記入系統日誌。不過,需要Root權限。
-sF  -sN  祕密FIN數據包掃描、Xmas Tree、Null掃描模式
-sP  ping掃描,Nmap在掃描端口時,默認都會使用ping掃描,只有主機存活,Nmap纔會繼續掃描。
-sU  UDP掃描,但UDP掃描是不可靠的
-sA  這項高級的掃描方法通常用來穿過防火牆的規則集
-sV  探測端口服務版本
-Pn  掃描之前不需要用ping命令,有些防火牆禁止ping命令。可以使用此選項進行掃描
-v  顯示掃描過程,推薦使用
-h  幫助選項,是最清楚的幫助文檔
-p  指定端口,如“1-65535、1433、135、22、80”等
-O  啓用遠程操作系統檢測,存在誤報
-A  全面系統檢測、啓用腳本檢測、掃描等
-oN/-oX/-oG  將報告寫入文件,分別是正常、XML、grepable 三種格式
-T4  針對TCP端口禁止動態掃描延遲超過10ms
-iL  讀取主機列表,例如,“-iL C:\ip.txt”

目標說明

除了選項,所有出現在Nmap命令行上的都被視爲對目標主機的說明。 最簡單的情況是指定一個目標IP地址或主機名。

有時候您希望掃描整個網絡的相鄰主機。爲此,Nmap支持CIDR風格的地址。您可以附加 一個/<numbit>在一個IP地址或主機名後面, Nmap將會掃描所有和該參考IP地址具有 <numbit>相同比特的所有IP地址或主機。 例如,192.168.10.0/24將會掃描192.168.10.0 (二進制格式: 11000000 10101000 00001010 00000000)和192.168.10.255 (二進制格式: 11000000 10101000 00001010 11111111)之間的256臺主機。 192.168.10.40/24 將會做同樣的事情。假設主機 scanme.nmap.org的IP地址是205.217.153.62, scanme.nmap.org/16 將掃描205.217.0.0和205.217.255.255之間的65,536 個IP地址。 所允許的最小值是/1, 這將會掃描半個互聯網。最大值是/32,這將會掃描該主機或IP地址, 因爲所有的比特都固定了。

CIDR標誌位很簡潔但有時候不夠靈活。例如,您也許想要掃描 192.168.0.0/16,但略過任何以.0或者.255 結束的IP地址,因爲它們通常是廣播地址。 Nmap通過八位字節地址範圍支持這樣的掃描 您可以用逗號分開的數字或範圍列表爲IP地址的每個八位字節指定它的範圍。 例如,192.168.0-255.1-254 將略過在該範圍內以.0和.255結束的地址。 範圍不必限於最後的8位:0-255.0-255.13.37 將在整個互聯網範圍內掃描所有以13.37結束的地址。 這種大範圍的掃描對互聯網調查研究也許有用。

IPv6地址只能用規範的IPv6地址或主機名指定。 CIDR 和八位字節範圍不支持IPv6,因爲它們對於IPv6幾乎沒什麼用。

Nmap命令行接受多個主機說明,它們不必是相同類型。命令nmap scanme.nmap.org 192.168.0.0/8 10.0.0,1,3-7.0-255將和您預期的一樣執行。

雖然目標通常在命令行指定,下列選項也可用來控制目標的選擇:
  • -iL (從列表中輸入)

中讀取目標說明。在命令行輸入 一堆主機名顯得很笨拙,然而經常需要這樣。 例如,您的DHCP服務器可能導出10,000個當前租約的列表,而您希望對它們進行 掃描。如果您不是使用未授權的靜態IP來定位主機,或許您想要掃描所有IP地址。 只要生成要掃描的主機的列表,用-iL 把文件名作爲選項傳給Nmap。列表中的項可以是Nmap在 命令行上接受的任何格式(IP地址,主機名,CIDR,IPv6,或者八位字節範圍)。 每一項必須以一個或多個空格,製表符或換行符分開。 如果您希望Nmap從標準輸入而不是實際文件讀取列表, 您可以用一個連字符(-)作爲文件名。

  • -iR (隨機選擇目標)

對於互聯網範圍內的調查和研究, 您也許想隨機地選擇目標。 選項告訴 Nmap生成多少個IP。不合需要的IP如特定的私有,組播或者未分配的地址自動 略過。選項 0 意味着永無休止的掃描。記住,一些網管對於未授權的掃描可能會很感冒並加以抱怨。 使用該選項的後果自負! 如果在某個雨天的下午,您覺得實在無聊, 試試這個命令nmap -sS -PS80 -iR 0 -p 80隨機地找一些網站瀏覽。

  • --exclude <host1[,host2][,host3],...> (排除主機/網絡)

如果在您指定的掃描範圍有一些主機或網絡不是您的目標, 那就用該選項加上以逗號分隔的列表排除它們。該列表用正常的Nmap語法, 因此它可以包括主機名,CIDR,八位字節範圍等等。 當您希望掃描的網絡包含執行關鍵任務的服務器,已知的對端口掃描反應強烈的 系統或者被其它人看管的子網時,這也許有用。

  • --excludefile (排除文件中的列表)

這和--exclude 選項的功能一樣,只是所排除的目標是用以 換行符,空格,或者製表符分隔的 提供的,而不是在命令行上輸入的。

主機發現

任何網絡探測任務的最初幾個步驟之一就是把一組IP範圍(有時該範圍是巨大的)縮小爲 一列活動的或者您感興趣的主機。掃描每個IP的每個端口很慢,通常也沒必要。 當然,什麼樣的主機令您感興趣主要依賴於掃描的目的。網管也許只對運行特定服務的 主機感興趣,而從事安全的人士則可能對一個馬桶都感興趣,只要它有IP地址:-)。一個系統管理員 也許僅僅使用Ping來定位內網上的主機,而一個外部入侵測試人員則可能絞盡腦汁用各種方法試圖 突破防火牆的封鎖。

由於主機發現的需求五花八門,Nmap提供了一籮筐的選項來定製您的需求。 主機發現有時候也叫做ping掃描,但它遠遠超越用世人皆知的ping工具 發送簡單的ICMP回聲請求報文。用戶完全可以通過使用列表掃描(-sL)或者 通過關閉ping (-P0)跳過ping的步驟,也可以使用多個端口把TPC SYN/ACK,UDP和ICMP 任意組合起來玩一玩。這些探測的目的是獲得響應以顯示某個IP地址是否是活動的(正在被某 主機或者網絡設備使用)。 在許多網絡上,在給定的時間,往往只有小部分的IP地址是活動的。 這種情況在基於RFC1918的私有地址空間如10.0.0.0/8尤其普遍。 那個網絡有16,000,000個IP,但我見過一些使用它的公司連1000臺機器都沒有。 主機發現能夠找到零星分佈於IP地址海洋上的那些機器。

如果沒有給出主機發現的選項,Nmap 就發送一個TCP ACK報文到80端口和一個ICMP回聲請求到每臺目標機器。 一個例外是ARP掃描用於局域網上的任何目標機器。對於非特權UNIX shell用戶,使用connect()系統調用會發送一個SYN報文而不是ACK 這些默認行爲和使用-PA -PE選項的效果相同。 掃描局域網時,這種主機發現一般夠用了,但是對於安全審覈,建議進行 更加全面的探測。

-P*選項(用於選擇 ping的類型)可以被結合使用。 您可以通過使用不同的TCP端口/標誌位和ICMP碼發送許多探測報文 來增加穿透防守嚴密的防火牆的機會。另外要注意的是即使您指定了其它 -P*選項,ARP發現(-PR)對於局域網上的 目標而言是默認行爲,因爲它總是更快更有效。

下列選項控制主機發現。
  • -sL (列表掃描)

列表掃描是主機發現的退化形式,它僅僅列出指定網絡上的每臺主機, 不發送任何報文到目標主機。默認情況下,Nmap仍然對主機進行反向域名解析以獲取 它們的名字。簡單的主機名能給出的有用信息常常令人驚訝。例如, fw.chi.playboy.com是花花公子芝加哥辦公室的 防火牆。Nmap最後還會報告IP地址的總數。列表掃描可以很好的確保您擁有正確的目標IP。 如果主機的域名出乎您的意料,那麼就值得進一步檢查以防錯誤地掃描其它組織的網絡。

既然只是打印目標主機的列表,像其它一些高級功能如端口掃描,操作系統探測或者Ping掃描 的選項就沒有了。如果您希望關閉ping掃描而仍然執行這樣的高級功能,請繼續閱讀關於 -P0選項的介紹。

  • -sP (Ping掃描)

該選項告訴Nmap僅僅 進行ping掃描 (主機發現),然後打印出對掃描做出響應的那些主機。 沒有進一步的測試 (如端口掃描或者操作系統探測)。 這比列表掃描更積極,常常用於 和列表掃描相同的目的。它可以得到些許目標網絡的信息而不被特別注意到。 對於攻擊者來說,瞭解多少主機正在運行比列表掃描提供的一列IP和主機名往往更有價值。

系統管理員往往也很喜歡這個選項。 它可以很方便地得出 網絡上有多少機器正在運行或者監視服務器是否正常運行。常常有人稱它爲 地毯式ping,它比ping廣播地址更可靠,因爲許多主機對廣播請求不響應。

-sP選項在默認情況下, 發送一個ICMP回聲請求和一個TCP報文到80端口。如果非特權用戶執行,就發送一個SYN報文 (用connect()系統調用)到目標機的80端口。 當特權用戶掃描局域網上的目標機時,會發送ARP請求(-PR), ,除非使用了--send-ip選項。 -sP選項可以和除-P0)之外的任何發現探測類型-P* 選項結合使用以達到更大的靈活性。 一旦使用了任何探測類型和端口選項,默認的探測(ACK和迴應請求)就被覆蓋了。 當防守嚴密的防火牆位於運行Nmap的源主機和目標網絡之間時, 推薦使用那些高級選項。否則,當防火牆捕獲並丟棄探測包或者響應包時,一些主機就不能被探測到。

  • -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 <target>這個簡單的命令掃描主機<target>上的超過 1660個TCP端口。 。許多傳統的端口掃描器只列出所有端口是開放還是關閉的, Nmap的信息粒度比它們要細得多。 它把端口分成六個狀態: open(開放的), closed(關閉的),filtered(被過濾的), unfiltered(未被過濾的), open|filtered(開放或者被過濾的),或者 closed|filtered(關閉或者被過濾的)。

這些狀態並非端口本身的性質,而是描述Nmap怎樣看待它們。例如, 對於同樣的目標機器的135/tcp端口,從同網絡掃描顯示它是開放的,而跨網絡作完全相同的掃描則可能顯示它是 filtered(被過濾的)。

Nmap所識別的6個端口狀態。

  • open(開放的)

    應用程序正在該端口接收TCP 連接或者UDP報文。發現這一點常常是端口掃描 的主要目標。安全意識強的人們知道每個開放的端口 都是攻擊的入口。攻擊者或者入侵測試者想要發現開放的端口。 而管理員則試圖關閉它們或者用防火牆保護它們以免妨礙了合法用戶。 非安全掃描可能對開放的端口也感興趣,因爲它們顯示了網絡上那些服務可供使用。

  • closed(關閉的)

    關閉的端口對於Nmap也是可訪問的(它接受Nmap的探測報文並作出響應), 但沒有應用程序在其上監聽。 它們可以顯示該IP地址上(主機發現,或者ping掃描)的主機正在運行up 也對部分操作系統探測有所幫助。 因爲關閉的關口是可訪問的,也許過會兒值得再掃描一下,可能一些又開放了。 系統管理員可能會考慮用防火牆封鎖這樣的端口。 那樣他們就會被顯示爲被過濾的狀態,下面討論。

  • filtered(被過濾的)

    由於包過濾阻止探測報文到達端口, Nmap無法確定該端口是否開放。過濾可能來自專業的防火牆設備,路由器規則 或者主機上的軟件防火牆。這樣的端口讓攻擊者感覺很挫折,因爲它們幾乎不提供 任何信息。有時候它們響應ICMP錯誤消息如類型3代碼13 (無法到達目標: 通信被管理員禁止),但更普遍的是過濾器只是丟棄探測幀, 不做任何響應。 這迫使Nmap重試若干次以訪萬一探測包是由於網絡阻塞丟棄的。 這使得掃描速度明顯變慢。

  • unfiltered(未被過濾的)

    未被過濾狀態意味着端口可訪問,但Nmap不能確定它是開放還是關閉。 只有用於映射防火牆規則集的ACK掃描纔會把端口分類到這種狀態。 用其它類型的掃描如窗口掃描,SYN掃描,或者FIN掃描來掃描未被過濾的端口可以幫助確定 端口是否開放。

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

    當無法確定端口是開放還是被過濾的,Nmap就把該端口劃分成 這種狀態。開放的端口不響應就是一個例子。沒有響應也可能意味着報文過濾器丟棄 了探測報文或者它引發的任何響應。因此Nmap無法確定該端口是開放的還是被過濾的。 UDP,IP協議, FIN,Null,和Xmas掃描可能把端口歸入此類。

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

    該狀態用於Nmap不能確定端口是關閉的還是被過濾的。 它只可能出現在IPID Idle掃描中。

端口掃描技術

作爲一個修車新手,我可能折騰幾個小時來摸索怎樣把基本工具(錘子,膠帶,扳子等) 用於手頭的任務。當我慘痛地失敗,把我的老爺車拖到一個真正的技師那兒的時候 ,他總是在他的工具箱裏翻來翻去,直到拽出一個完美的工具然後似乎不費吹灰之力搞定它。 端口掃描的藝術和這個類似。專家理解成打的掃描技術,選擇最適合的一種 (或者組合)來完成給定的 任務。 另一方面,沒有經驗的用戶和剛入門者總是用默認的SYN掃描解決每個問題。 既然Nmap是免費的,掌握端口掃描的唯一障礙就是知識。這當然是汽車世界所不能比的, 在那裏,可能需要高超的技巧才能確定您需要一個壓桿彈簧壓縮機,接着您還得爲它付數千美金。

大部分掃描類型只對特權用戶可用。 這是因爲他們發送接收原始報文,這在Unix系統需要root權限。 在Windows上推薦使用administrator賬戶,但是當WinPcap已經被加載到操作系統時, 非特權用戶也可以正常使用Nmap。當Nmap在1997年發佈時,需要root權限是一個嚴重的 侷限,因爲很多用戶只有共享的shell賬戶。現在,世界變了,計算機便宜了,更多人擁有互聯網連接 ,桌面UNIX系統 (包括Linux和MAC OS X)很普遍了。Windows版本的Nmap現在也有了,這使它可以運行在更多的桌面上。 由於所有這些原因,用戶不再需要用有限的共享shell賬戶運行Nmap。 這是很幸運的,因爲特權選項讓Nmap強大得多也靈活得多。

雖然Nmap努力產生正確的結果,但請記住所有結果都是基於目標機器(或者它們前面的防火牆)返回的報文的。 。這些主機也許是不值得信任的,它們可能響應以迷惑或誤導Nmap的報文。 更普遍的是非RFC兼容的主機以不正確的方式響應Nmap探測。FIN,Null和Xmas掃描 特別容易遇到這個問題。這些是特定掃描類型的問題,因此我們在個別掃描類型裏討論它們。

這一節討論Nmap支持的大約十幾種掃描技術。 一般一次只用一種方法, 除了UDP掃描(-sU)可能和任何一種TCP掃描類型結合使用。 友情提示一下,端口掃描類型的選項格式是-s<C>, 其中<C> 是個顯眼的字符,通常是第一個字符。 一個例外是deprecated FTP bounce掃描(-b)。默認情況下,Nmap執行一個 SYN掃描,但是如果用戶沒有權限發送原始報文(在UNIX上需要root權限)或者如果指定的是IPv6目標,Nmap調用connect()。 本節列出的掃描中,非特權用戶只能執行connect()和ftp bounce掃描。
  • -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機(必須運行並且符合一定的標準)。 這種奇妙的掃描類型太複雜了,不能在此完全描述,所以我寫一篇非正式的論文, 發佈在http://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彈跳掃描)

FTP協議的一個有趣特徵(RFC 959) 是支持所謂代理ftp連接。它允許用戶連接到一臺FTP服務器,然後要求文件送到一臺第三方服務器。 這個特性在很多層次上被濫用,所以許多服務器已經停止支持它了。其中一種就是導致FTP服務器對其它主機端口掃描。 只要請求FTP服務器輪流發送一個文件到目標主機上的所感興趣的端口。 錯誤消息會描述端口是開放還是關閉的。 這是繞過防火牆的好方法,因爲FTP服務器常常被置於可以訪問比Web主機更多其它內部主機的位置。 Nmap用-b選項支持ftp彈跳掃描。參數格式是 :@: 是某個脆弱的FTP服務器的名字或者IP地址。 您也許可以省略:, 如果服務器上開放了匿名用戶(user:anonymous password:-wwwuser@)。 端口號(以及前面的冒號) 也可以省略,如果使用默認的FTP端口(21)。

當Nmap1997年發佈時,這個弱點被廣泛利用,但現在大部分已經被fix了。 脆弱的服務器仍然存在,所以如果其它都失敗了,這也值得一試。 如果您的目標是繞過防火牆,掃描目標網絡上的開放的21端口(或者 甚至任何ftp服務,如果您用版本探測掃描所有端口), 然後對每個嘗試彈跳掃描。Nmap會告訴您該主機脆弱與否。 如果您只是試着玩Nmap,您不必(事實上,不應該)限制您自己。 在您隨機地在互聯網上尋找脆弱的FTP服務器時,考慮一下系統管理員不太喜歡您這樣濫用他們的服務器。

端口說明和掃描順序

除了所有前面討論的掃描方法, Nmap提供選項說明那些端口被掃描以及掃描是隨機還是順序進行。 默認情況下,Nmap用指定的協議對端口1到1024以及nmap-services 文件中列出的更高的端口在掃描。
  • -p (只掃描指定的端口)

該選項指明您想掃描的端口,覆蓋默認值。 單個端口和用連字符表示的端口範圍(如 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來順序端口掃描。

服務和版本探測

把Nmap指向一個遠程機器,它可能告訴您 端口25/tcp,80/tcp,和53/udp是開放的。使用包含大約2,200個著名的服務的 nmap-services數據庫, Nmap可以報告那些端口可能分別對應於一個郵件服務器 (SMTP),web服務器(HTTP),和域名服務器(DNS)。 這種查詢通常是正確的 -- 事實上,絕大多數在TCP端口25監聽的守護進程是郵件 服務器。然而,您不應該把賭注押在這上面! 人們完全可以在一些奇怪的端口上運行服務。

即使Nmap是對的,假設運行服務的確實是 SMTP,HTTP和DNS,那也不是特別多的信息。 當爲您的公司或者客戶作安全評估(或者甚至簡單的網絡明細清單)時, 您確實想知道正在運行什麼郵件和域名服務器以及它們的版本。 有一個精確的版本號對了解服務器有什麼漏洞有巨大幫助。 版本探測可以幫您獲得該信息。

在用某種其它類型的掃描方法發現TCP 和/或者UDP端口後, 版本探測會詢問這些端口,確定到底什麼服務正在運行。 nmap-service-probes 數據庫包含查詢不同服務的探測報文 和解析識別響應的匹配表達式。 Nmap試圖確定服務協議 (如 ftp,ssh,telnet,http),應用程序名(如ISC Bind,Apache httpd,Solaris telnetd),版本號, 主機名,設備類型(如 打印機,路由器),操作系統家族 (如Windows,Linux)以及其它的細節,如 如是否可以連接X server,SSH協議版本 ,或者KaZaA用戶名)。當然,並非所有服務都提供所有這些信息。 如果Nmap被編譯成支持OpenSSL, 它將連接到SSL服務器,推測什麼服務在加密層後面監聽。 當發現RPC服務時, Nmap RPC grinder (-sR)會自動被用於確定RPC程序和它的版本號。 如果在掃描某個UDP端口後仍然無法確定該端口是開放的還是被過濾的,那麼該端口狀態就 被標記爲open|filtered。 版本探測將試圖從這些端口引發一個響應(就像它對開放端口做的一樣), 如果成功,就把狀態改爲開放。 open|filtered TCP端口用同樣的方法對待。 注意Nmap -A選項在其它情況下打開版本探測。 有一篇關於版本探測的原理,使用和定製的文章在 http://www.insecure.org/nmap/vscan/。

當Nmap從某個服務收到響應,但不能在數據庫中找到匹配時, 它就打印一個特殊的fingerprint和一個URL給您提交,如果您確實知道什麼服務運行在端口。 請花兩分鐘提交您的發現,讓每個人受益。由於這些提交, Nmap有350種以上協議如smtp,ftp,http等的大約3,000條模式匹配。

用下列的選項打開和控制版本探測。
  • -sV (版本探測)

打開版本探測。 您也可以用-A同時打開操作系統探測和版本探測。

  • --allports (不爲版本探測排除任何端口)

默認情況下,Nmap版本探測會跳過9100 TCP端口,因爲一些打印機簡單地打印送到該端口的 任何數據,這回導致數十頁HTTP get請求,二進制 SSL會話請求等等被打印出來。這一行爲可以通過修改或刪除nmap-service-probes 中的Exclude指示符改變, 您也可以不理會任何Exclude指示符,指定--allports掃描所有端口

  • --version-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報文到遠程主機,檢查響應中的每一個比特。 在進行一打測試如TCP ISN採樣,TCP選項支持和排序,IPID採樣,和初始窗口大小檢查之後, Nmap把結果和數據庫nmap-os-fingerprints中超過 1500個已知的操作系統的fingerprints進行比較,如果有匹配,就打印出操作系統的詳細信息。 每個fingerprint包括一個自由格式的關於OS的描述文本, 和一個分類信息,它提供供應商名稱(如Sun),下面的操作系統(如Solaris),OS版本(如10), 和設備類型(通用設備,路由器,switch,遊戲控制檯, 等)。

如果Nmap不能猜出操作系統,並且有些好的已知條件(如 至少發現了一個開放端口和一個關閉端口),Nmap會提供一個 URL,如果您確知運行的操作系統,您可以把fingerprint提交到那個URL。 這樣您就擴大了Nmap的操作系統知識庫,從而讓每個Nmap用戶都受益。

操作系統檢測可以進行其它一些測試,這些測試可以利用處理 過程中收集到的信息。例如運行時間檢測,使用TCP時間戳選項(RFC 1323) 來估計主機上次重啓的時間,這僅適用於提供這類信息的主機。另一種 是TCP序列號預測分類,用於測試針對遠程主機建立一個僞造的TCP連接 的可能難度。這對於利用基於源IP地址的可信關係(rlogin,防火牆過濾等) 或者隱含源地址的攻擊非常重要。這一類哄騙攻擊現在很少見,但一些 主機仍然存在這方面的漏洞。實際的難度值基於統計採樣,因此可能會有 一些波動。通常採用英國的分類較好,如“worthy challenge”或者 “trivial joke”。在詳細模式(-v)下只以 普通的方式輸出,如果同時使用-O,還報告IPID序列產生號。 很多主機的序列號是“增加”類別,即在每個發送包的IP頭中 增加ID域值, 這對一些先進的信息收集和哄騙攻擊來說是個漏洞。

http://nmap.org/book/osdetect.html 文檔使用多種語言描述了版本檢測的方式、使用和定製。

採用下列選項啓用和控制操作系統檢測:
  • -O (啓用操作系統檢測)

也可以使用-A來同時啓用操作系統檢測和版本檢測。

  • --osscan-limit (針對指定的目標進行操作系統檢測)

如果發現一個打開和關閉的TCP端口時,操作系統檢測會更有效。 採用這個選項,Nmap只對滿足這個條件的主機進行操作系統檢測,這樣可以 節約時間,特別在使用-P0掃描多個主機時。這個選項僅在使用 -O或-A 進行操作系統檢測時起作用。

  • --osscan-guess; --fuzzy (推測操作系統檢測結果

當Nmap無法確定所檢測的操作系統時,會盡可能地提供最相近的匹配,Nmap默認 進行這種匹配,使用上述任一個選項使得Nmap的推測更加有效。

時間和性能

Nmap開發的最高優先級是性能。在本地網絡對一個主機的默認掃描(nmap <hostname>)需要1/5秒。而僅僅眨眼的 時間,就需要掃描上萬甚至幾十萬的主機。此外,一些特定的掃描選項會明顯增 加掃描時間,如UDP掃描和版本檢測。同樣,防火牆配置以及特殊的響應速度限制也會 增加時間。Nmap使用了並行算法和許多先進的算法來加速掃描,用戶對Nmap如何 工作有最終的控制權。高級用戶可以仔細地調整Nmap命令,在滿足時間要求的同時獲得他們所關心的信息。

改善掃描時間的技術有:忽略非關鍵的檢測、升級最新版本的Nmap(性能增強不斷改善)。 優化時間參數也會帶來實質性的變化,這些參數如下。
  • --min-hostgroup ; --max-hostgroup (調整並行掃描組的大小)

Nmap具有並行掃描多主機端口或版本的能力,Nmap將多個目標IP地址 空間分成組,然後在同一時間對一個組進行掃描。通常,大的組更有效。缺 點是隻有當整個組掃描結束後纔會提供主機的掃描結果。如果組的大小定義 爲50,則只有當前50個主機掃描結束後才能得到報告(詳細模式中的補充信息 除外)。默認方式下,Nmap採取折衷的方法。開始掃描時的組較小, 最小爲5,這樣便於儘快產生結果;隨後增長組的大小,最大爲1024。確切的 大小依賴於所給定的選項。爲保證效率,針對UDP或少量端口的TCP掃描,Nmap 使用大的組。--max-hostgroup選項用於說明使用最大的組,Nmap不 會超出這個大小。--min-hostgroup選項說明最小的組,Nmap 會保持組大於這個值。如果在指定的接口上沒有足夠的目標主機來滿足所 指定的最小值,Nmap可能會採用比所指定的值小的組。這兩個參數雖然很少使用, 但都用於保持組的大小在一個指定的範圍之內。這些選項的主要用途是說明一個最小組的大小,使得整個掃描更加快速。通常 選擇256來掃描C類網段。對於端口數較多的掃描,超出該值沒有意義。對於 端口數較少的掃描,2048或更大的組大小是有幫助的。

  • --min-parallelism ; --max-parallelism (調整探測報文的並行度)

這些選項控制用於主機組的探測報文數量,可用於端口掃描和主機發現。默認狀態下, Nmap基於網絡性能計算一個理想的並行度,這個值經常改變。如果報文被丟棄, Nmap降低速度,探測報文數量減少。隨着網絡性能的改善,理想的探測報文數量會緩慢增加。 這些選項確定這個變量的大小範圍。默認狀態下,當網絡不可靠時,理想的並行度值 可能爲1,在好的條件下,可能會增長至幾百。最常見的應用是--min-parallelism值大於1,以加快 性能不佳的主機或網絡的掃描。這個選項具有風險,如果過高則影響準確度,同時 也會降低Nmap基於網絡條件動態控制並行度的能力。這個值設爲10較爲合適, 這個值的調整往往作爲最後的手段。--max-parallelism選項通常設爲1,以防止Nmap在同一時間 向主機發送多個探測報文,和選擇--scan-delay同時使用非常有用,雖然 這個選項本身的用途已經很好。

  • --min-rtt-timeout , --max-rtt-timeout , --initial-rtt-timeout (調整探測報文超時)

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 (放棄低速目標主機)

由於性能較差或不可靠的網絡硬件或軟件、帶寬限制、嚴格的防火牆等原因, 一些主機需要很長的時間掃描。這些極少數的主機掃描往往佔 據了大部分的掃描時間。因此,最好的辦法是減少時間消耗並且忽略這些主機,使用 --host-timeout選項來說明等待的時間(毫秒)。通常使用1800000 來保證Nmap不會在單個主機上使用超過半小時的時間。需要注意的是,Nmap在這半小時中可以 同時掃描其它主機,因此並不是完全放棄掃描。超時的主機被忽略,因此也沒有針對該主機的 端口表、操作系統檢測或版本檢測結果的輸出。

  • --scan-delay ; --max-scan-delay (調整探測報文的時間間隔)

這個選項用於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。

防火牆/IDS躲避和哄騙

很多Internet先驅們設想了一個全球開放的網絡,使用全局的IP 地址空間,使得任何兩個節點之間都有虛擬連接。這使得主機間可以作爲真 正的對等體,相互間提供服務和獲取信息。人們可以在工作時訪問家裏所 有的系統、調節空調溫度、爲提前到來的客人開門。隨後,這些全球連接的設想 受到了地址空間短缺和安全考慮的限制。在90年代早期,各種機構開始部 署防火牆來實現減少連接的目的,大型網絡通過代理、NAT和包過濾器與未 過濾的Internet隔離。不受限的信息流被嚴格控制的可信通信通道信息流所替代。

類似防火牆的網絡隔離使得對網絡的搜索更加困難,隨意的搜 索變得不再簡單。然而,Nmap提供了很多特性用於理解這些複雜的網 絡,並且檢驗這些過濾器是否正常工作。此外,Nmap提供了繞過某些較弱的 防範機制的手段。檢驗網絡安全狀態最有效的方法之一是嘗試哄騙網絡,將 自己想象成一個攻擊者,使用本節提供的技術來攻擊自己的網絡。如使用FTP bounce掃描、Idle掃描、分片攻擊或嘗試穿透自己的代理。

除限止網絡的行爲外,使用入侵檢測系統(IDS)的公司也不斷增加。由於Nmap 常用於攻擊前期的掃描,因此所有主流的IDS都包含了檢測Nmap掃描的規則。 現在,這些產品變形爲入侵預防系統(IPS),可以主 動地阻止可疑的惡意行爲。不幸的是,網絡管理員和IDS廠商通過分析報文 來檢測惡意行爲是一個艱苦的工作,有耐心和技術的攻擊者,在特定Nmap選項 的幫助下,常常可以不被IDS檢測到。同時,管理員必須應付大量的誤報結果, 正常的行爲被誤判而被改變或阻止。

有時,人們建議Nmap不應該提供躲閉防火牆規則或哄騙IDS的功能, 這些功能可能會被攻擊者濫用,然而管理員卻可以利用這些功能來增強安全性。 實際上,攻擊的方法仍可被攻擊者利用,他們可以發現其它工具或Nmap的補丁程 序。同時,管理員發現攻擊者的工作更加困難,相比較採取措施來預防執 行FTP Bounce攻擊的工具而言,部署先進的、打過補丁的FTP服務器更 加有效。

Nmap不提供檢測和破壞防火牆及IDS系統的魔彈(或Nmap選項),它使用 的是技術和經驗,這超出了本參考手冊的範圍,下面描述了相關的選項和 完成的工作。
  • -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 (使用指定的接口)

告訴Nmap使用哪個接口發送和接收報文,Nmap可以進行自動檢測, 如果檢測不出會給出提示。

  • --source-port ; -g (源端口哄騙)

僅依賴於源端口號就信任數據流是一種常見的錯誤配置,這個問題非常 好理解。例如一個管理員部署了一個新的防火牆,但招來了很多用戶的不滿,因爲 他們的應用停止工作了。可能是由於外部的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 (發送報文時 附加隨機數據)

正常情況下,Nmap發送最少的報文,只含一個包頭。因此TCP包通常 是40字節,ICMP ECHO請求只有28字節。這個選項告訴Nmap在發送的報文上 附加指定數量的隨機字節。操作系統檢測(-O)包不受影響, 但大部分ping和端口掃描包受影響,這會使處理變慢,但對掃描的影響較小。

  • --ttl (設置IP time-to-live域)

設置IPv4報文的time-to-live域爲指定的值。

  • --randomize-hosts (對目標主機的順序隨機排列)

告訴Nmap在掃描主機前對每個組中的主機隨機排列,最多可達 8096個主機。這會使得掃描針對不同的網絡監控系統來說變得不是很 明顯,特別是配合值較小的時間選項時更有效。如果需要對一個較大 的組進行隨機排列,需要增大nmap.h文件中 PING-GROUP-SZ的值,並重新編譯。另一種方法是使用列表掃描 (-sL -n -oN ),產生目標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提供了一些 方式供用戶和其它軟件使用,實際上,沒有一種方式可以使所有人滿意。 因此Nmap提供了一些格式,包含了方便直接查看的交互方式和方便軟件處理 的XML格式。

除了提供輸出格式外,Nmap還提供了選項來控制輸出的細節以及調試 信息。輸出內容可發送給標準輸出或命名文件,可以追加或覆蓋。輸出文件還可 被用於繼續中斷的掃描。

Nmap提供5種不同的輸出格式。默認的方式是interactive output, 發送給標準輸出(stdout)。normal output方式類似於 interactive,但顯示較少的運行時間信息 和告警信息,這是由於這些信息是在掃描完全結束後用於分析,而不是交互式的。

XML輸出是最重要的輸出類型,可被轉換成HTML,對於程序處理非常方便, 如用於Nmap圖形用戶接口或導入數據庫。

另兩種輸出類型比較簡單,grepable output格式,在一行中包含目標主機最多的信息;sCRiPt KiDDi3 0utPUt 格式,用於考慮自己的用戶 |<-r4d。

交互式輸出是默認方式,沒有相應的命令行選項,其它四種格式選項 使用相同的語法,採用一個參數,即存放結果的文件名。多種格式可同時 使用,但一種格式只能使用一次。例如,在標準輸出用於查看的同時,可將結 果保存到XML文件用於程序分析,這時可以使用選項-oX myscan.xml -oN myscan.nmap。 爲便於描述的簡化,本章使用類似於myscan.xml的簡單文件名, 建議採用更具有描述性的文件名。文件名的選擇與個人喜好有關,建議增加 掃描日期以及一到兩個單詞來描述,並放置於一個目錄中。

在將結果輸出到文件的同時,Nmap仍將結果發送給標準輸出。例如, 命令nmap -oX myscan.xml target將 輸出XML至myscan.xml,並在stdout 上打印相同的交互式結果,而此時-oX選項沒有采用。可以 使用連字符作爲選項來改變,這使得Nmap禁止交互式輸出,而是將結果打印到 所指定的標準輸出流中。因此,命令nmap -oX - target只 輸出XML至標準輸出stdout。嚴重錯誤仍然是輸出到標準錯誤流stderr中。

與其它Nmap參數不同,日誌文件選項的空格(如-oX)和 文件名或連字符是必需的。如果省略了標記,例如-oG-或 -oXscan.xml,Nmap的向後兼容特點將建立 標準格式的輸出文件,相應的文件名爲G-和 Xscan.xml。

Nmap還提供了控制掃描細節以及輸出文件的添加或覆蓋的選項,這些選項 如下所述。

Nmap輸出格式

  • -oN (標準輸出)

要求將標準輸出直接寫入指定 的文件。如上所述,這個格式與交互式輸出 略有不同。

  • -oX (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::ScannerNmap::Parser。 對幾乎所有與Nmap有接口的主要應用來說,XML是首選的格式。XML輸出引用了一個XSL樣式表,用於格式化輸出結果,類似於 HTML。最方便的方法是將XML輸出加載到一個Web瀏覽器,如Firefox 或IE。由於nmap.xsl文件的絕對 路徑,因此通常只能在運行了Nmap的機器上工作(或類似配置的機器)。 類似於任何支持Web機器的HTML文件,--stylesheet 選項可用於建立可移植的XML文件。

  • -oS (ScRipT KIdd|3 oUTpuT)

腳本小子輸出類似於交互工具輸出,這是一個事後處理,適合於 'l33t HaXXorZ, 由於原來全都是大寫的Nmap輸出。這個選項和腳本小子開了玩笑,看上去似乎是爲了 “幫助他們”。

  • -oG (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 (輸出至所有格式)

爲使用方便,利用-oA選項 可將掃描結果以標準格式、XML格式和Grep格式一次性輸出。分別存放在 .nmap,.xml和 .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 (繼續中斷的掃描)

一些擴展的Nmap運行需要很長的時間 -- 以天計算,這類掃描 往往不會結束。可以進行一些限制,禁止Nmap在工作時間運行,導致 網絡中斷、運行Nmap的主機計劃或非計劃地重啓、或者Nmap自己中斷。 運行Nmap的管理員可以因其它原因取消運行,按下ctrl-C 即可。從頭開始啓動掃描可能令人不快,幸運的是,如果標準掃描 (-oN)或Grep掃描(-oG)日誌 被保留,用戶可以要求Nmap恢復終止的掃描,只需要簡單地使用選項 --resume並說明標準/Grep掃描輸出文件,不允許 使用其它參數,Nmap會解析輸出文件並使用原來的格式輸出。使用方式 如nmap --resume **。 Nmap將把新地結果添加到文件中,這種方式不支持XML輸出格式,原因是 將兩次運行結果合併至一個XML文件比較困難。

  • --stylesheet (設置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 (說明用戶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選項。

  • --interactive (在交互模式中啓動)

在交互模式中啓動Nmap,提供交互式的Nmap提示,便於 進行多個掃描(同步或後臺方式)。對於從多用戶系統中掃描 的用戶非常有效,這些用戶常需要測試他們的安全性,但不希望 系統中的其它用戶知道他們掃描哪些系統。使用--interactive 激活這種方式,然後輸入h可 獲得幫助信息。由於需要對正確的shell程序和整個功能非常熟悉, 這個選項很少使用。這個選項包含了一個!操作符,用於執行shell命令, 這是不安裝Nmap setuid root的多個原因之一。

  • -V; --version (打印版本信息)

打印Nmap版本號並退出。

  • -h; --help (打印幫助摘要面)

打印一個短的幫助屏幕,列出大部分常用的 命令選項,這個功能與不帶參數運行Nmap是相同的。

Nmap - 高級篇

Nmap 案例

目標選擇

  • 掃描單個IP
$ nmap 192.168.188.188
  • 掃描主機
$ nmap www.baidu.com
  • 掃描一段IP
$ nmap 192.168.188.1-188
  • 掃描子網IP
$ nmap 192.168.188.0/24
  • 從文本中獲取掃描目標
# 將要掃描的IP放入 ips.out 文件
$ vi ips.out
192.168.188.1
192.168.188.68
192.168.188.188

# 語法: nmap -iL list-of-ips.txt
$ nmap -iL ips.out
  • 無ping掃描(常用於防火牆禁止ping的情況)
$ nmap -P0 192.168.188.188

端口選擇

  • 掃描ip單個端口
$ nmap -p 22 192.168.188.188
  • 掃描ip一系列端口
$ nmap 1-10000 192.168.188.188
  • 掃描最用的端口
$ nmap -F 192.168.188.188
  • 掃描所有端口
$ nmap -p- 192.168.188.188

操作系統和服務檢測

  • 檢測操作系統和服務
$ nmap -A 192.168.188.188
  • 標準服務檢測
$ nmap -sV 192.168.188.188
  • 高強度掃描的服務檢測
$ nmap -sV --version-intensity 5 192.168.188.188
  • 輕量Banner抓取檢測
$ nmap -sV --version-light 2 192.168.188.188
$ nmap -sV --version-light 192.168.188.188

輸出格式

  • 將默認輸出保存到文件(標註輸出)
$ nmap -oN outputfile.txt 192.168.188.188
  • 將結果保存爲xml格式文件(XML輸出))
$ nmap -oX outputfile.xml 192.168.188.188
  • 保存成grep來保存格式(Grep輸出 不建議使用
$ nmap -oG outputfile.txt 192.168.188.188
  • 保存所有格式(輸出至所有格式)
$ nmap -oA outputfile 192.168.188.188

NSE腳本深入挖掘

  • 使用默認安全腳本掃描
$ nmap -sV -sC 192.168.188.188
  • 獲取ssl腳本的幫助
$ nmap --script-help=ssl-heartbleed
  • 指定NSE腳本進行掃描
$ nmap -sV -p 443 –script=ssl-heartbleed.nse 192.168.188.188
  • 使用一組腳本進行掃描
$ nmap -sV --script=smb* 192.168.188.188

HTTP服務信息

  • 從HTTP服務收集頁面標題
$ nmap --script=http-title www.baidu.com
  • 獲取Web服務的HTTP頭
$ nmap --script=http-headers 192.168.1.0/24
  • 從已知路徑查找網絡應用程序
$ nmap --script=http-enum www.baidu.com

設備掃描

  • 獲取ip地址
$ nmap www.baidu.com

# host 命令
$ host www.baidu.com
# dig 命令
$ dig www.baidu.com
  • 探測主機是否存活
# ping ip/域名
$ ping192.168.188.188

$ nmap -sP --script discovery ip
  • 掃描在線主機
$ nmap -sP 192.168.188.*
  • 探測IP協議
$ nmap -PO 192.168.188.188
  • 獲取系統概況(暴力形式 容易檢測到
$ nmap -A 192.168.188.188
  • 探測是否有防火牆
$ nmap -PN 192.168.188.188
  • 探測防火牆規則
$ nmap -sA ip
  • TCP Window掃描
$ nmap -sw 192.168.188.188
  • FIN掃描
# FIN掃描方式用於識別端口是否關閉,收到RST回覆說明該端口關閉,否則說明是open或filtered狀態
$ nmap -sF 192.168.188.188
  • TCP掃描
$ nmap -sT -p 1-65535 -Pn 192.168.188.1-254
$ nmap -sL 192.168.188.0/24
  • ARP Ping掃描
$ nmap -PR 192.168.188.188
  • SYN掃描
$ nmap -sS -p- Pn 192.168.188.188
  • TCP SYN Ping掃描
$ nmap -PS -v www.baidu.com
  • UDP掃描
# UDP掃描費時,所以去掉-p-,默認掃描
$ nmap -sU 192.168.188.188
  • Xmas掃描
$ nmap -sX -p1-65535 -Pn 192.168.188.188
  • Null掃描
$ nmap -sN -p 1-65535 -Pn i192.168.188.188
  • 探測操作系統
$ nmap -O 192.168.188.188
  • 探測軟件版本
$ nmap -V 192.168.188.188

$ nmap -sTV -p- -Pn 192.168.188.188
  • 設置掃描強度強度在0~9之間,默認強度爲7
$ nmap -sV –version-intensity 7 www.baidu.com
  • 輕量級掃描
$ nmap -sV –version-light www.baidu.com
  • 重量級掃描
$ nmap -sV –version-all www.baidu.com
  • 版本探測
$ nmap -sV -A www.baidu.com
  • 對指定的目標進行系統探測
$ Nmap -osscan-limit www.baidu.com
  • 推測系統識別
$ Nmap -osscan-guess/–fuzzy www.baidu.com
  • 獲取詳細版本信息
$ nmap -sV –version-trace www.baidu.com
  • 全端口版本探測
$ nmap -allports -A www.baidu.com
  • RPC掃描
$ Nmap -sR www.baidu.com
  • 調整並行掃描組的大小(默認爲5-1024)最小的組
$ nmap –min-hostgroup 30 192.168.188.0/24
  • 調整並行掃描組的大小(默認爲5-1024)最大的組
$ nmap –min-hostgroup 30 192.168.188.0/24
  • 探查局域網內更多服務
$ nmap -n --script=broadcast 192.168.188.188
  • MAC地址欺騙
# -spoof-mac 可以根據廠商名字僞造不同mac地址
$ nmap -sT -PN –spoof-mac aa:bb:cc:dd:ee:ff target
$ nmap -spoof-mac Scisio ip
  • 發送間隔時間控制
$ nmap -scan_delay 5ms 192.168.188.188
  • Http方法
$ nmap -sV -script=smtp-strangeport 192.168.188.188
  • 檢查是否存在漏洞
$ nmap --script=vuln 192.168.188.188
  • SCTP INIT Ping掃描
$ nmap -PY -v 192.168.188.188
  • 獲得PHP版本信息
$ nmap -sV -script=http-php-version 192.168.188.188

信息收集掃描

  • ip信息蒐集
$ nmap -script ip-geolocation-* www.baidu.com
  • 獲得IP地址的信息
$ nmap --script=asn-query,whois,ip-geolocation-maxmind 192.168.188.0/24
  • whois查詢
$ nmap -script whois-ip www.baidu.com

問題彙總

問題一:

問題描述:

在使用host、dig命令時,出現以下內容:

$ host
-bash: host: command not found
$ dig
-bash: dig: command not found

問題原因:

系統沒有安裝host、dig命令;

問題解決:

安裝依賴包bind-utils,不能直接通過yum install -y host dig 來安裝host、dig,因爲host、dig屬於bind-utils依賴包。

$ yum install -y bind-utils

參考文檔

Nmap 官方文檔 - 點我傳送

Nmap 中文文檔 - 點我傳送

Nmap Linux安裝官方文檔 - 點我傳送

Nmap Windows安裝官方文檔 - 點我傳送

Nmap manual官網操作手冊 - 點我傳送

Nmap Scripting Engine 官方文檔 - 點我傳送

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章