## 十、 操作系统探测
Nmap 最著名的功能之一是用 TCP/IP 协议栈 fingerprinting 进行远程操作系统探测。 Nmap 发 送一系列 TCP 和 UDP 报文到远程主机,检查响应中的每一个比特。 在进行一打测试如 TCP ISN 采样,TCP 选项支持和排序,IPID 采样,和初始窗口大小检查之后, Nmap 把结果和数据库 nmap-os-fingerprints 中超过 1500 个已知的操作系统的 fingerprints 进行比较 如果有匹配 就打印出操作系统的详细信息 每个 fingerprint 包括一个自由格式的关于 OS 的描述文本 和 一个分类信息,它提供供应商名称(如 Sun),下面的操作系统(如 Solaris),OS 版本(如 10), 和 设备类型(通用设备,路由器,switch,游戏控制台, 等)。
如果 Nmap 不能猜出操作系统,并且有些好的已知条件(如 至少发现了一个开放端口和一个关闭 端口),Nmap 会提供一个 URL,如果您确知运行的操作系统,您可以把 fingerprint 提交到那个 URL。 这样您就扩大了 Nmap 的操作系统知识库,从而让每个 Nmap 用户都受益。
操作系统检测可以进行其它一些测试,这些测试可以利用处理 过程中收集到的信息。例如运行 时间检测,使用 TCP 时间戳选项(RFC 1323) 来估计主机上次重启的时间,这仅适用于提供这类 信息的主机。另一种 是 TCP 序列号预测分类,用于测试针对远程主机建立一个伪造的 TCP 连接 的可能难度。这对于利用基于源 IP 地址的可信关系(rlogin,防火墙过滤等) 或者隐含源地址 的攻击非常重要。这一类哄骗攻击现在很少见,但一些 主机仍然存在这方面的漏洞。实际的难 度值基于统计采样,因此可能会有 一些波动。通常采用英国的分类较好,如“worthy challenge”或者 “trivial joke”。在详细模式(-v)下只以 普通的方式输出,如果同时使用 -O,还报告 IPID 序列产生号。 很多主机的序列号是“增加”类别,即在每个发送包的 IP 头中 增加 ID 域值, 这对一些先进的信息收集和哄骗攻击来说是个漏洞。
[http://www.insecure.org/nmap/osdetect/](http://www.insecure.org/nmap/osdetect/) 文档使用多种语言描述了版本检测的方式、使用和 定制。
采用下列选项启用和控制操作系统检测:
`-O` (启用操作系统检测)
也可以使用`-A` 来同时启用操作系统检测和版本检测。
`--osscan-limit` (针对指定的目标进行操作系统检测)
如果发现一个打开和关闭的 TCP 端口时,操作系统检测会更有效。 采用这个选项,Nmap 只对满足这个条件的主机进行操作系统检测,这样可以 节约时间,特别在使用-P0 扫描 多个主机时。这个选项仅在使用 -O 或-A 进行操作系统检测时起作用。
`--osscan-guess; --fuzzy` (推测操作系统检测结果)
当 Nmap 无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap 默认 进行 这种匹配,使用上述任一个选项使得 Nmap 的推测更加有效。