使用 Nmap 进行端口扫描

NmapBeginner
立即练习

介绍

在本实验中,你将学习使用 Nmap,一个强大的网络扫描工具,进行各种端口扫描。你将探索不同的扫描类型,包括 TCP 连接扫描、SYN 扫描,以及扫描特定端口、端口范围和最常见的“顶级端口”的技术。通过本实验,你将获得实际运用 Nmap 发现目标系统开放端口和服务的实践能力,这是网络侦察和安全审计中的基本技能。

每种扫描类型都具有独特的特性和适用场景。例如,TCP 连接扫描会完成完整的 TCP 三次握手,使其可靠但易于检测。相比之下,SYN 扫描则更加隐蔽,因为它不会完成握手。你将在 Xfce 终端中执行 Nmap 命令并分析输出结果,以了解不同端口的状态。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 100%。获得了学习者 100% 的好评率。

使用 nmap -sT 127.0.0.1 执行 TCP 连接扫描

本步骤将使用 Nmap 执行 TCP 连接扫描。这是 TCP 扫描的一种基本且可靠的形式,它会完成完整的 TCP 三次握手以与目标端口建立连接。虽然可靠,但此方法不如其他扫描类型隐蔽,因为它会完全建立并断开连接,这可能会被目标系统轻松记录。

让我们简要回顾一下 TCP 三次握手:

  1. SYN (同步): 扫描器向目标端口发送 SYN 包。
  2. SYN/ACK (同步/确认): 如果端口打开,目标会以 SYN/ACK 包响应。
  3. ACK (确认): 扫描器通过发送 ACK 包回送给目标来完成连接。

Nmap 的 -sT 选项明确执行此完整的 TCP 连接扫描。由于它完成了 TCP 连接,因此不需要 root 权限,但为了与后续需要 root 权限的步骤保持一致,我们将使用 sudo

现在,让我们在 127.0.0.1 (本地主机) 上执行 TCP 连接扫描。此 IP 地址始终指向你自己的机器,使其成为练习的理想目标。

  1. 打开 Xfce 终端。你应该位于你的主目录 ~/project

  2. 执行以下命令以执行 TCP 连接扫描:

    sudo nmap -sT 127.0.0.1

    此命令指示 Nmap 在 IP 地址 127.0.0.1 上执行 TCP 连接扫描 (-sT)。labex 用户无需密码即可拥有 sudo 权限,因此如果提示,你可以直接按回车键。

  3. 观察终端中的输出。你将看到本地机器上常见端口及其状态的列表。输出类似于以下内容:

    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 包的响应,表明该端口未在监听。
    • 注意端口 222121222230018080open 的。自定义服务 (2121、2222、8080) 由实验环境设置,SSH 端口 22 和端口 3001 上的另一个服务也是如此。

使用 nmap -sS 127.0.0.1 执行 SYN 扫描

本步骤将教你如何执行 SYN 扫描,也称为“半连接”扫描。此技术通常比 TCP 连接扫描更隐蔽,因为它不会完成完整的 TCP 三次握手,因此目标系统应用程序不太可能记录它。

以下是 SYN 扫描的工作原理:

  1. SYN (同步): 扫描器向目标端口发送 SYN 包。
  2. SYN/ACK (同步/确认): 如果端口打开,目标会以 SYN/ACK 包响应。
  3. RST (重置): 扫描器不会发送 ACK 包来完成连接,而是立即发送 RST 包以突然终止连接。

由于从未建立完整的 TCP 连接,SYN 扫描的侵入性较小,并且通常可以绕过仅监控已完成连接的更简单的防火墙规则。但是,SYN 扫描通常需要 root 权限才能创建原始数据包,这就是我们使用 sudo 的原因。

现在,让我们在 127.0.0.1 上执行 SYN 扫描。

  1. 确保你位于 Xfce 终端中。

  2. 执行以下命令:

    sudo nmap -sS 127.0.0.1

    此命令指示 Nmap 在 IP 地址 127.0.0.1 上执行 SYN 扫描 (-sS)。如果需要密码,请按回车键。

  3. 观察输出。输出与 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 seconds

    STATE 列指示每个端口的状态。

    • 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 上的端口 222280802121。这些是实验环境初始化脚本设置的自定义 TCP 服务。

  • 端口 2222 配置为运行 SSH 服务。
  • 端口 8080 配置为运行 Nginx Web 服务器。
  • 端口 2121 配置为运行 FTP 服务。
  1. 确保你位于 Xfce 终端中。

  2. 执行以下命令:

    sudo nmap -p 2222,8080,2121 127.0.0.1

    此命令指示 Nmap 只扫描 IP 地址 127.0.0.1 上的端口 222280802121 (-p 2222,8080,2121)。由于使用了 sudo,Nmap 将使用默认的 SYN 扫描方法。如果需要密码,请按回车键。

  3. 观察输出。你应该看到所有三个指定端口都报告为 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 上的端口 19000。此范围包含实验环境中设置的自定义服务 (2121、2222、8080)。

  1. 确保你位于 Xfce 终端中。

  2. 执行以下命令:

    sudo nmap -p 1-9000 127.0.0.1

    此命令指示 Nmap 扫描 IP 地址 127.0.0.1 上的端口 19000 (-p 1-9000)。Nmap 将使用默认的 SYN 扫描方法。如果需要密码,请按回车键。

  3. 观察输出。你将看到指定范围内所有开放端口的列表。由于要检查的端口数量更多,这可能比扫描特定端口花费的时间更长。

    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 在扫描大型范围时,默认情况下仅显示 openfiltered 端口。

使用 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 个最常用端口。

  1. 确保你位于 Xfce 终端中。

  2. 执行以下命令:

    sudo nmap --top-ports 10 127.0.0.1

    此命令指示 Nmap 扫描 IP 地址 127.0.0.1 上的 10 个最常见的端口 (--top-ports 10)。Nmap 将使用默认的 SYN 扫描方法。如果需要密码,请按回车键。

  3. 观察输出。你将看到本地机器上 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 输出和理解不同扫描类型用于网络侦察方面的实践经验。