什么是nmap:
Nmap(Network Mapper)是一款功能强大的开源网络发现和安全审计工具。它由Gordon Lyon(网名Fyodor)于1997年开发,因其全面的功能和灵活性,被网络管理员和安全专业人员广泛用于网络资产管理、安全评估和渗透测试。
简单来说,Nmap就像网络世界的"探测器"或"地图绘制工具",可以帮助你了解网络中有哪些设备、它们提供什么服务以及潜在的弱点。
🔍 核心功能
Nmap的功能远不止简单的端口扫描,其核心能力主要包括:
主机发现 (Host Discovery)
识别网络中有哪些主机是在线的。它可以通过发送ICMP Echo请求(Ping)、TCP SYN包等多种方式来判断目标是否存活。
端口扫描 (Port Scanning)
这是Nmap最广为人知的功能。它可以检测目标主机上哪些网络端口是开放的、关闭的或被防火墙过滤的。Nmap支持多种扫描技术,例如:
TCP SYN扫描 (-sS):一种快速且隐蔽的"半开放"扫描,不建立完整的TCP连接,不易被记录。
TCP连接扫描 (-sT):完成完整的TCP三次握手,稳定但容易被发现。
UDP扫描 (-sU):用于探测DNS、SNMP等UDP服务。
服务与版本探测 (Service and Version Detection)
在发现开放端口后,Nmap可以进一步探测运行在该端口上的具体服务及其版本号(例如,识别出80端口运行的是Apache httpd 2.4.57)。这对于评估服务是否存在已知漏洞至关重要。
操作系统检测 (OS Detection)
通过分析目标主机TCP/IP协议栈的响应特征(即"指纹"),Nmap可以推断出目标主机使用的操作系统类型和版本(例如,Windows 10, Ubuntu 20.04)。
脚本引擎 (NSE, Nmap Scripting Engine)
这是Nmap的强大扩展功能。它允许用户使用Lua语言编写脚本,以实现自动化的高级任务,如漏洞检测、漏洞利用、暴力破解和更深入的信息服务枚举。
🛠️ 常用参数速查
为了方便你快速上手,这里整理了几个最常用的Nmap参数:
表格
参数 功能说明
-sS TCP SYN(半开放)扫描,速度快且隐蔽。
-sT TCP全连接扫描,无需root权限。
-sV 探测开放端口的服务及版本信息。
-O 启用操作系统检测。
-A 启用操作系统检测、版本检测、脚本扫描和路由跟踪,信息更全面。
-p 指定要扫描的端口,例如 -p 80,443 或 -p 1-1000。
-Pn 跳过主机发现,将所有目标视为在线,用于绕过禁Ping的主机。
怎么记忆:
| 参数 | 完整单词 | 记忆解析 |
|---|---|---|
| -p | Port | 即"端口"。用来指定扫描的端口号(如 -p 80)。 |
| -O | Operating System | 即"操作系统"。用来开启操作系统检测功能。 |
| -A | Aggressive | 即"侵略性"或"强力"。因为它同时开启了系统版本、服务版本、脚本扫描等多种功能,扫描力度很大,所以叫 Aggressive。 |
| -sV | Service Version | 即"服务版本"。用来探测端口上运行的具体软件版本(如 Apache 2.4)。 |
进入正文:
1.NMAP端口扫描
登录拓扑图左侧攻击端主机,用户名/密码:root/com.1234。右击桌面空白处,单击OpenTerminal Here选项,打开终端:

执行命令nmap -p 1-65535 192.168.100.202,对目标主机192.168.100.202进行全端口扫描,如图所示。从扫描结果中能发现,主机192.168.100.202开放了80、135、139、445、3306、3389等多个不同的端口(这里是正在扫描,时间特别长)

我们用ctrl+c中断命令,执行:nmap --top-ports 100 192.168.100.202扫描最常见的 100 个端口(覆盖绝大多数常用服务):Nmap 内部有一个按使用频率排序的端口列表,--top-ports 会直接引用这个列表,因此结果非常准确。

若想扫描指定的端口范围,-p后的端口数可根据情况改变,比如,指定扫描1-1000范围内的端口,执行命令nmap --p 1-1000 192.168.100.202

若指向扫描主机的某几个特定的端口,可以使用逗号将端口隔开。执行命令nmap --p 80,8080,3306 192.168.100.202,可扫描目标主机的80、8080、3306端口的状态,如图6所示,80、3306端口是开启状态,8080端口是关闭状态。

2.NMAP识别服务器版本
(1)根据端口扫描结果,能得知目标主机可能开放了3306数据库服务、3389远程桌面服务,但是结果中端口对应的协议不一定是准确的,很多管理员可能修改了服务器的默认端口,所以需要进一步进行服务器版本的识别。
(2)执行命令nmap-sV -p 1-65535 192.168.100.202,对目标主机进行全端口扫描并且使用-sV参数进行服务版本识别,如图7所示。根据扫描结果发现,80端口运行的是2.4.18版本的Apache服务;3306端口运行的是MySQL服务;3389运行的TCPwrapped服务(主机访问控制程序),说明TCP三次握手已经完成,但是没有和目标主机建立连接。即虽然目标主机可提供服务,但攻击端不在允许访问目标主机的名单列表中。
(3)根据扫描结果得知,服务器除了开放web服务外,还开启了数据库和远程桌面等相关服务,后续攻击端就可尝试对数据库和远程桌面存在的漏洞进行攻击,拿到服务器权限。
这里我就不使用这个命令了,时间太长了我们找一个端口举个例子:nmap -sV -p 80 192.168.100.202

信息解读:
核心结果:端口与服务详情
这是最关键的信息,展示了 80 端口的具体情况:
表格
列名 结果 含义 PORT 80/tcp端口号/协议:80号端口,使用TCP协议。 STATE open状态 :开放。说明该端口正在监听连接,可以访问。 SERVICE http服务名称 :这是一个 Web 服务(超文本传输协议)。 VERSION Apache httpd 2.4.23 ...详细版本:这是核心信息。 关于 VERSION 列的深度解读
Apache httpd 2.4.23 ((Win32) OpenSSL/1.0.2j PHP/5.4.45)这一长串信息揭示了服务器的技术架构:
Apache httpd 2.4.23:
- 这是一个 Web 服务器软件。
- 版本:2.4.23。
- 重要性:这个版本相对较旧,可能存在已知的安全漏洞。
(Win32):
- 这表明 Apache 是运行在 Windows 32位系统 上的。这通常暗示操作系统可能是 Windows Server 或较旧的 Windows 版本(如 Windows 7/XP)。
OpenSSL/1.0.2j:
- 这是用于加密通信(HTTPS)的库。
- 版本:1.0.2j。这也是一个较老的版本,可能存在安全风险。
PHP/5.4.45:
- 这是服务器端的脚本语言。
- 版本:5.4.45。
- 重要性 :PHP 5.4 已经是停止维护的版本,不再接收安全更新,极易受到攻击。
其他信息
MAC Address: 02:E0:6A:3A:A4:A4 (Unknown):目标主机的物理地址,显示为未知厂商。Service detection performed.:提示服务检测已完成。Nmap done: 1 IP address (1 host up) scanned in 19.99 seconds:扫描耗时约 20 秒。
(1)执行命令nmap-O 192.168.100.202,识别目标主机的操作系统,如图8所示。执行命令nmap--O --A 192.168.100.202,识别目标主机的操作系统以及版本,这里我执行第二条就好:

原理上课讲过:这里给出通义解释:
🔍 Nmap 识别操作系统的核心原理
Nmap 主要通过以下三个维度的特征进行比对:
1. TCP/IP 协议栈指纹特征
Nmap 会发送 11 种不同的 TCP、UDP 和 ICMP 探测包,然后观察目标主机的回应。主要分析以下特征:
- 窗口大小(Window Size):不同系统对 TCP 窗口大小的默认设置不同(例如 Windows 通常是 8192,Linux 可能是 65535)。
- TCP 选项(TCP Options):比如是否支持时间戳、最大段大小(MSS)、窗口缩放等,以及它们的顺序。
- TTL(Time to Live)值:数据包在被丢弃前能经过的最大跳数。Linux 通常初始 TTL 是 64,Windows 是 128。
- ACK 值:某些系统在回应时,ACK 字段的计算方式略有不同。
- ICMP 响应行为:对特定 ICMP 包的响应方式。
2. 使用内置的指纹数据库
Nmap 内部维护了一个庞大的操作系统指纹数据库(
nmap-os-db),里面记录了成千上万种已知操作系统的特征。当你运行
nmap -O或nmap -A时,Nmap 会:
- 向目标发送探测包。
- 收集目标的响应数据。
- 将这些数据与指纹库中的记录进行比对。
- 找出最匹配的操作系统。
3.
-A与-O的区别
-O:仅启用基本的操作系统检测。-A:是 Aggressive(激进) 模式,它不仅包含-O,还自动启用:
- 版本检测(
-sV):探测服务版本(如 Apache 2.4.23)。- 脚本扫描(
--script=default):运行默认的 NSE 脚本(如漏洞检测、信息收集)。- traceroute(
--traceroute):追踪路由路径。所以,
-A比-O更全面,但也更容易被防火墙或 IDS 发现。