输出
任何安全工具只有在输出结果时才是有价值的,如果没有通过组织和 易于理解的方式来表达,复杂的测试和算法几乎没有意义。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还提供了控制扫描细节以及输出文件的添加或覆盖的选项,这些选项 如下所述。
-
-oN <filespec>
(标准输出) 要求将
标准输出
直接写入指定 的文件。如上所述,这个格式与交互式输出
略有不同。-
-oX <filespec>
(XML输出) 要求
XML输出
直接写入指定 的文件。Nmap包含了一个文档类型定义(DTD),使XML解析器有效地 进行XML输出。这主要是为了程序应用,同时也可以协助人工解释 Nmap的XML输出。DTD定义了合法的格式元素,列举可使用的属性和 值。最新的版本可在https://nmap.org/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>
(输出至所有格式) 为使用方便,利用
-oA
选项 可将扫描结果以标准格式、XML格式和Grep格式一次性输出。分别存放在<basename>
<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而挂起或者对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 <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 https://nmap.org/data/nmap.xsl
。 这告诉浏览器从Insecire.Org中加载最新的样式表。这使得 没安装Nmap(和nmap.xsl
) 的机器中可以方便地查看结果。因此,URL更方便使用,本地文件系统 的nmap.xsl用于默认方式。-
--no-stylesheet
(忽略XML声明的XSL样式表) 使用该选项禁止Nmap的XML输出关联任何XSL样式表。
xml-stylesheet
指示被忽略。