## 九、 服務和版本探測
把 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/](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 <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 很少被需要。