十三、 输出

任何安全工具只有在输出结果时才是有价值的,如果没有通过组织和 易于理解的方式来表达, 复杂的测试和算法几乎没有意义。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 获取。

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

为使用方便,利用-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 指示被忽略。