简介
欢迎来到操作系统指纹识别实验。
操作系统指纹识别是安全专业人员和攻击者常用的一种关键侦察技术,用于确定远程目标上运行的操作系统。通过向目标发送特定的(有时是畸形的)TCP 和 UDP 数据包,并分析目标 TCP/IP 协议栈响应中的细微差异(如生存时间值 TTL、窗口大小和标志位组合),Nmap 等工具可以准确地推断出其底层操作系统。
这是一种推断技术,而非绝对事实。Nmap 是将观察到的网络行为与指纹数据库进行比对。其结果非常有参考价值,但应将其视为一种基于经验的估计,且可能会受到防火墙、代理或异常协议栈的影响。
在本实验中,你将学习如何利用 Nmap 强大的操作系统指纹识别功能来识别远程系统,并将这些技术与版本检测相结合,从而进行全面的网络分析。
启用操作系统指纹识别
在这一步中,我们将学习使用 Nmap 进行操作系统指纹识别的基础知识。操作系统指纹识别是一种用于确定远程目标所运行操作系统的技术。Nmap 通过向目标发送一系列精心构造的 TCP 和 UDP 数据包并分析其响应来实现这一目标。由于不同的操作系统对 TCP/IP 协议栈的实现略有不同,Nmap 可以将这些响应与庞大的数据库进行比对以找到匹配项。
这项技术之所以有效,是因为网络协议栈是由人类编写的实现,而不同的实现方式在许多细微的默认设置上存在差异。指纹识别正是将这些差异转化为线索。
要在 Nmap 中启用操作系统指纹识别,我们使用 -O 标志。需要注意的是,构造原始数据包需要管理员权限,因此我们必须使用 sudo 来运行此命令。
让我们针对本地机器(localhost)运行一次操作系统指纹识别扫描,并将输出保存到项目目录中名为 os_scan.txt 的文件中。
sudo nmap -O -p 22,80 localhost > /home/labex/project/os_scan.txt
扫描完成后,你可以使用 cat 命令查看结果。
cat /home/labex/project/os_scan.txt
你将看到类似以下的输出。请留意以「Device type」、「Running」和「OS details」开头的行。
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 14:53 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000020s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6.32
OS details: Linux 2.6.32
Network Distance: 0 hops
OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.56 seconds
输出显示目标正在运行 Linux 内核,这与我们的 LabEx 环境相符。
分析操作系统猜测结果
在这一步中,我们将探讨 Nmap 在操作系统指纹识别过程中如何处理不确定性。有时,目标可能配置了防火墙来丢弃某些数据包,或者运行的是一种冷门或高度定制的操作系统。在这种情况下,Nmap 可能无法在数据库中找到完美的匹配项。
当 Nmap 无法确定确切的操作系统时,它可以提供一份猜测列表以及置信度百分比。我们可以通过使用 --osscan-guess 标志(等同于 --fuzzy)来强制 Nmap 进行更激进的猜测。这会告诉 Nmap 即使匹配度不是非常高,也要打印出操作系统匹配结果。
这提醒我们,侦察输出往往包含不确定性。优秀的分析师会记录这种不确定性,而不是假装每一次检测都是精确的。
让我们针对 localhost 运行另一次扫描,这次启用激进的操作系统猜测,并将结果保存到名为 guess_scan.txt 的文件中。
sudo nmap -O --osscan-guess -p 22,80 localhost > /home/labex/project/guess_scan.txt
现在,查看该文件的内容。
cat /home/labex/project/guess_scan.txt
输出看起来与上一步类似,但如果目标系统更冷门,你将会看到一个以逗号分隔的操作系统猜测列表及其百分比,例如 Aggressive OS guesses: Linux 5.0 (96%), Linux 4.15 (95%)。
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 14:54 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000020s latency).
...
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6.32
OS details: Linux 2.6.32
...
即使是在标准系统上,当面对试图掩盖其 TCP/IP 协议栈行为的加固目标时,使用 --osscan-guess 也是一种非常有价值的技术。
结合操作系统与版本检测 (-A)
在这一步中,我们将使用 -A 标志将操作系统检测与其他强大的 Nmap 功能结合起来。-A 标志代表「激进扫描选项」(Aggressive scan options)。
当你使用 -A 标志时,Nmap 会自动同时启用多项高级功能:
- 操作系统检测 (
-O) - 版本检测 (
-sV):探测开放端口以确定服务和应用程序版本 - 脚本扫描 (
-sC):运行一组默认的 Nmap 脚本引擎 (NSE) 脚本 - 路由追踪 (
--traceroute):确定到达目标的网络路径
这种组合方法可以提供目标系统的全面概况,使其成为安全专业人员进行初步侦察时的首选。
让我们对 localhost 执行一次激进扫描,并将输出保存到 aggressive_scan.txt。由于执行了更多的检查,这次扫描可能需要稍长的时间。
sudo nmap -A -p 22,80 localhost > /home/labex/project/aggressive_scan.txt
扫描完成后,检查结果。
cat /home/labex/project/aggressive_scan.txt
你会注意到输出内容丰富得多。除了操作系统详细信息外,你现在还可以看到开放端口上运行服务的确切版本(如 OpenSSH 和 nginx),以及由默认脚本收集的其他信息。
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 14:54 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000019s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6.32
OS details: Linux 2.6.32
...
通过结合这些技术,你可以通过单个命令收集到关于目标系统的大量信息。
总结
恭喜!你已成功完成了操作系统指纹识别实验。
在本实验中,你学习了如何:
- 使用 Nmap 的
-O标志,通过分析 TCP/IP 协议栈响应来执行远程操作系统指纹识别。 - 应用
--osscan-guess标志,在目标操作系统无法完美匹配时,强制 Nmap 提供概率性的猜测结果。 - 利用
-A标志将操作系统检测与服务版本检测、脚本扫描和路由追踪相结合,从而进行全面的目标分析。
这些技能是网络侦察和漏洞评估的基础,使安全专业人员能够了解他们正在分析的环境,并据此量身定制安全措施。



