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