## 十三、 輸出
任何安全工具只有在輸出結果時才是有價值的,如果沒有通過組織和 易于理解的方式來表達, 復雜的測試和算法幾乎沒有意義。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 <filespec>` (標準輸出)
要求將標準輸出直接寫入指定 的文件。如上所述,這個格式與交互式輸出 略有不同。
`-oX <filespec>` (XML 輸出)
要求 XML 輸出直接寫入指定 的文件。Nmap 包含了一個文檔類型定義(DTD),使 XML 解析 器有效地 進行 XML 輸出。這主要是為了程序應用,同時也可以協助人工解釋 Nmap 的 XML 輸出。DTD 定義了合法的格式元素,列舉可使用的屬性和 值。最新的版本可在 [http://www.insecure.org/nmap/data/nmap.dtd](http://www.insecure.org/nmap/data/nmap.dtd) 獲取。
XML 提供了可供軟件解析的穩定格式輸出,主要的計算機 語言都提供了免費的 XML 解析 器,如 C/C++,Perl,Python 和 Java。 針對這些語言有一些捆綁代碼用于處理 Nmap 的 輸出和特定的執行程序。 例如 perl CPAN 中的 [Nmap::Scanner](http://sourceforge.net/projects/nmap-scanner/) 和 [Nmap::Parser](http://www.nmapparser.com/)。 對幾 乎所有與 Nmap 有接口的主要應用來說,XML 是首選的格式。
XML 輸出引用了一個 XSL 樣式表,用于格式化輸出結果,類似于 HTML。最方便的方法是 將 XML 輸出加載到一個 Web 瀏覽器,如 Firefox 或 IE。由于 nmap.xsl 文件的絕對 路徑 因此通常只能在運行了 Nmap 的機器上工作(或類似配置的機器)。 類似于任何支持 Web 機器的 HTML 文件,--stylesheet 選項可用于建立可移植的 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](http://www.unspecific.com/nmap-oG-output)。
`-oA <basename>` (輸出至所有格式)
為使用方便,利用-oAbasename 選項 可將掃描結果以標準格式、XML 格式和 Grep 格式一 次性輸出。分別存放在 basename.nmap,basename.xml 和 basename.gnmap 文件中。也 可以在文件名前 指定目錄名,如在 UNIX 中,使用~/nmaplogs/foocorp/, 在 Window 中 使用 c:\hacking\sco on Windows。
### 細節和調試選項
`-v` (提高輸出信息的詳細度)
通過提高詳細度,Nmap 可以輸出掃描過程的更多信息。 輸出發現的打開端口,若 Nmap 認為掃描需要更多時間會顯示估計 的結束時間。這個選項使用兩次,會提供更詳細的信 息。這個選 項使用兩次以上不起作用。
大部分的變化僅影響交互式輸出,也有一些影響標準和腳本 小子輸出。其它輸出類型由 機器處理,此時 Nmap 默認提供詳細的信 息,不需要人工干預。然而,其它模式也會有 一些變化,省略一些 細節可以減小輸出大小。例如,Grep 輸出中的注釋行提供所有掃描 端口列表,但由于這些信息過長,因此只能在細節模式中輸出。
`-d [level]` (提高或設置調試級別)
當詳細模式也不能為用戶提供足夠的數據時,使用調試可以得到更多的信息。使用細節選項(-v)時,可啟用命令行參數 (-d),多次使用可提高調試級別。也可在-d 后面使用參數設置調試級別。例如,-d9 設定級別 9。這是最高的級別,將會產生上千行的輸出, 除非只對很少的端口和目標進行簡單掃描。
如果 Nmap 因為 Bug 而掛起或者對 Namp 的工作及原理有疑問,調試輸出非常有效。主要 是開發人員用這個選項,調試行不具備自我解釋的特點。例如,`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 <filename>` (繼續中斷的掃描)
一些擴展的 Nmap 運行需要很長的時間 -- 以天計算,這類掃描 往往不會結束。可以進 行一些限制,禁止 Nmap 在工作時間運行,導致 網絡中斷、運行 Nmap 的主機計劃或非計 劃地重啟、或者 Nmap 自己中斷。 運行 Nmap 的管理員可以因其它原因取消運行,按下 ctrl-C 即可。從頭開始啟動掃描可能令人不快,幸運的是,如果標準掃描 (-oN)或 Grep 掃描(-oG)日志 被保留,用戶可以要求 Nmap 恢復終止的掃描,只需要簡單地使用選項
--resume 并說明標準/Grep 掃描輸出文件,不允許 使用其它參數,Nmap 會解析輸出文件 并使用原來的格式輸出。使用方式 如 nmap --resume logfilename。 Nmap 將把新地結 果添加到文件中 這種方式不支持 XML 輸出格式 原因是 將兩次運行結果合并至一個 XML 文件比較困難。
`--stylesheet <path or URL>` (設置 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 指示被忽略。