介绍
在本实验中,你将学习使用 Nmap,一个强大的网络扫描工具,进行各种端口扫描。你将探索不同的扫描类型,包括 TCP 连接扫描、SYN 扫描,以及扫描特定端口、端口范围和最常见的“顶级端口”的技术。通过本实验,你将获得实际运用 Nmap 发现目标系统开放端口和服务的实践能力,这是网络侦察和安全审计中的基本技能。
每种扫描类型都具有独特的特性和适用场景。例如,TCP 连接扫描会完成完整的 TCP 三次握手,使其可靠但易于检测。相比之下,SYN 扫描则更加隐蔽,因为它不会完成握手。你将在 Xfce 终端中执行 Nmap 命令并分析输出结果,以了解不同端口的状态。
使用 nmap -sT 127.0.0.1 执行 TCP 连接扫描
本步骤将使用 Nmap 执行 TCP 连接扫描。这是 TCP 扫描的一种基本且可靠的形式,它会完成完整的 TCP 三次握手以与目标端口建立连接。虽然可靠,但此方法不如其他扫描类型隐蔽,因为它会完全建立并断开连接,这可能会被目标系统轻松记录。
让我们简要回顾一下 TCP 三次握手:
- SYN (同步): 扫描器向目标端口发送 SYN 包。
- SYN/ACK (同步/确认): 如果端口打开,目标会以 SYN/ACK 包响应。
- ACK (确认): 扫描器通过发送 ACK 包回送给目标来完成连接。
Nmap 的 -sT 选项明确执行此完整的 TCP 连接扫描。由于它完成了 TCP 连接,因此不需要 root 权限,但为了与后续需要 root 权限的步骤保持一致,我们将使用 sudo。
现在,让我们在 127.0.0.1 (本地主机) 上执行 TCP 连接扫描。此 IP 地址始终指向你自己的机器,使其成为练习的理想目标。
打开 Xfce 终端。你应该位于你的主目录
~/project。执行以下命令以执行 TCP 连接扫描:
sudo nmap -sT 127.0.0.1此命令指示 Nmap 在 IP 地址
127.0.0.1上执行 TCP 连接扫描 (-sT)。labex用户无需密码即可拥有sudo权限,因此如果提示,你可以直接按回车键。观察终端中的输出。你将看到本地机器上常见端口及其状态的列表。输出类似于以下内容:
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 13:36 CST Nmap scan report for localhost (127.0.0.1) Host is up (0.000052s latency). Not shown: 995 closed ports PORT STATE SERVICE 22/tcp open ssh 2121/tcp open ccproxy-ftp 2222/tcp open EtherNetIP-1 3001/tcp open nessus 8080/tcp open http-proxy Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds输出显示了
PORT号、其STATE和 Nmap 与该端口关联的SERVICE。open表示 Nmap 成功地与该端口建立了 TCP 连接。closed表示 Nmap 收到了 TCP RST (重置) 包作为其 SYN 包的响应,表明该端口未在监听。- 注意端口
22、2121、2222、3001和8080是open的。自定义服务 (2121、2222、8080) 由实验环境设置,SSH 端口 22 和端口 3001 上的另一个服务也是如此。
使用 nmap -sS 127.0.0.1 执行 SYN 扫描
本步骤将教你如何执行 SYN 扫描,也称为“半连接”扫描。此技术通常比 TCP 连接扫描更隐蔽,因为它不会完成完整的 TCP 三次握手,因此目标系统应用程序不太可能记录它。
以下是 SYN 扫描的工作原理:
- SYN (同步): 扫描器向目标端口发送 SYN 包。
- SYN/ACK (同步/确认): 如果端口打开,目标会以 SYN/ACK 包响应。
- RST (重置): 扫描器不会发送 ACK 包来完成连接,而是立即发送 RST 包以突然终止连接。
由于从未建立完整的 TCP 连接,SYN 扫描的侵入性较小,并且通常可以绕过仅监控已完成连接的更简单的防火墙规则。但是,SYN 扫描通常需要 root 权限才能创建原始数据包,这就是我们使用 sudo 的原因。
现在,让我们在 127.0.0.1 上执行 SYN 扫描。
确保你位于 Xfce 终端中。
执行以下命令:
sudo nmap -sS 127.0.0.1此命令指示 Nmap 在 IP 地址
127.0.0.1上执行 SYN 扫描 (-sS)。如果需要密码,请按回车键。观察输出。输出与 TCP 连接扫描类似,但底层机制不同。
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 13:36 CST Nmap scan report for localhost (127.0.0.1) Host is up (0.0000040s latency). Not shown: 995 closed ports PORT STATE SERVICE 22/tcp open ssh 2121/tcp open ccproxy-ftp 2222/tcp open EtherNetIP-1 3001/tcp open nessus 8080/tcp open http-proxy Nmap done: 1 IP address (1 host up) scanned in 0.10 secondsSTATE列指示每个端口的状态。open表示 Nmap 收到了其 SYN 包的 SYN/ACK 包响应。closed表示 Nmap 收到了 RST 包。filtered(你可能在其他情况下看到)表示 Nmap 无法确定端口是打开还是关闭,因为网络过滤(例如防火墙)阻止 Nmap 访问该端口。
使用 nmap -p 2222,8080,2121 127.0.0.1 扫描特定端口
本步骤将介绍如何使用 Nmap 扫描目标系统上的特定端口。当你想专注于特定服务或应用程序(你怀疑它们可能在目标系统上运行)时,这尤其有用,而不是扫描所有常见端口。
Nmap 的 -p 选项允许你指定要扫描的确切端口。你可以指定用逗号分隔的单个端口、端口范围或两者兼有。在本例中,我们将扫描 127.0.0.1 上的端口 2222、8080 和 2121。这些是实验环境初始化脚本设置的自定义 TCP 服务。
- 端口
2222配置为运行 SSH 服务。 - 端口
8080配置为运行 Nginx Web 服务器。 - 端口
2121配置为运行 FTP 服务。
确保你位于 Xfce 终端中。
执行以下命令:
sudo nmap -p 2222,8080,2121 127.0.0.1此命令指示 Nmap 只扫描 IP 地址
127.0.0.1上的端口2222、8080和2121(-p 2222,8080,2121)。由于使用了sudo,Nmap 将使用默认的 SYN 扫描方法。如果需要密码,请按回车键。观察输出。你应该看到所有三个指定端口都报告为
open。Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 13:36 CST Nmap scan report for localhost (127.0.0.1) Host is up (0.000028s latency). PORT STATE SERVICE 2121/tcp open ccproxy-ftp 2222/tcp open EtherNetIP-1 8080/tcp open http-proxy Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds输出确认了指定端口的状态。
open表示 Nmap 收到 SYN/ACK 包,表明该端口正在积极监听连接。
使用 nmap -p 1-9000 127.0.0.1 扫描端口范围
本步骤将教你如何使用 Nmap 扫描目标系统的一系列端口。当你想识别特定数值范围内的所有开放端口时,这非常有用,这有助于你发现运行在非标准端口上的服务。
如你在上一步中学到的,Nmap 的 -p 选项允许你指定端口。要扫描一系列端口,请使用语法 start-end,其中 start 是起始端口号,end 是结束端口号。在本例中,我们将扫描 127.0.0.1 上的端口 1 到 9000。此范围包含实验环境中设置的自定义服务 (2121、2222、8080)。
确保你位于 Xfce 终端中。
执行以下命令:
sudo nmap -p 1-9000 127.0.0.1此命令指示 Nmap 扫描 IP 地址
127.0.0.1上的端口1到9000(-p 1-9000)。Nmap 将使用默认的 SYN 扫描方法。如果需要密码,请按回车键。观察输出。你将看到指定范围内所有开放端口的列表。由于要检查的端口数量更多,这可能比扫描特定端口花费的时间更长。
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 13:36 CST Nmap scan report for localhost (127.0.0.1) Host is up (0.0000020s latency). Not shown: 8992 closed ports PORT STATE SERVICE 22/tcp open ssh 953/tcp open rndc 2121/tcp open ccproxy-ftp 2222/tcp open EtherNetIP-1 3001/tcp open nessus 3002/tcp open exlm-agent 5353/tcp open mdns 8080/tcp open http-proxy Nmap done: 1 IP address (1 host up) scanned in 0.16 seconds输出显示了本地机器上
1-9000范围内的端口状态。你应该看到自定义端口 (2121、2222、8080) 列为open,以及其他正在运行的服务,例如 SSH (22)、与 DNS 相关的服务 (953、5353) 和其他服务 (3001、3002)。Not shown: 8992 closed ports指示 Nmap 在扫描大型范围时,默认情况下仅显示open或filtered端口。
使用 nmap --top-ports 10 127.0.0.1 扫描常用端口
本步骤将教你如何使用 Nmap 的 --top-ports 选项扫描目标系统上最常见的端口。这对于快速识别主机上可能运行的服务非常有用,而无需扫描所有 65535 个可能的端口。Nmap 维护着一个内部端口列表,该列表由统计数据汇编而成,包含最常使用的端口。
--top-ports 选项指示 Nmap 扫描指定数量的最常用端口。例如,--top-ports 10 将扫描 10 个最常见的 TCP 端口。
在本例中,我们将扫描 127.0.0.1 上的 10 个最常用端口。
确保你位于 Xfce 终端中。
执行以下命令:
sudo nmap --top-ports 10 127.0.0.1此命令指示 Nmap 扫描 IP 地址
127.0.0.1上的 10 个最常见的端口 (--top-ports 10)。Nmap 将使用默认的 SYN 扫描方法。如果需要密码,请按回车键。观察输出。你将看到本地机器上 10 个最常用端口的状态。
Starting Nmap 7.80 ( https://nmap.org ) at 2025-06-03 13:36 CST Nmap scan report for localhost (127.0.0.1) Host is up (0.000010s latency). PORT STATE SERVICE 21/tcp closed ftp 22/tcp open ssh 23/tcp closed telnet 25/tcp closed smtp 80/tcp closed http 110/tcp closed pop3 139/tcp closed netbios-ssn 443/tcp closed https 445/tcp closed microsoft-ds 3389/tcp closed ms-wbt-server Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds输出显示了 10 个最常用端口的状态。你可能会注意到,一些自定义端口(例如 8080、2121、2222)不在此列表中,因为它们并非全球最常用的 10 个端口之一,而是特定于我们的实验环境。这表明,虽然
--top-ports效率很高,但它可能遗漏一些不那么常见但仍然重要的服务。
总结
在本实验中,你学习了如何使用 Nmap 执行各种端口扫描。你使用 -sT 选项对 127.0.0.1 执行了 TCP 连接扫描,理解了完整的 TCP 三次握手过程。你还在 127.0.0.1 上使用 -sS 执行了 SYN 扫描,这是一种更隐蔽的半开放扫描。你练习了使用 -p 2222,8080,2121 扫描特定端口,以及使用 -p 1-9000 扫描更广阔的端口范围,目标都是 127.0.0.1。最后,你学习了如何使用 --top-ports 10 选项高效地扫描最常见的端口,目标仍然是 127.0.0.1。通过这些实践练习,你获得了在解释 Nmap 输出和理解不同扫描类型用于网络侦察方面的实践经验。



