学习 Nmap 基础命令语法

NmapNmapBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习 Nmap 的基本命令语法。Nmap 是一款强大的网络发现和安全审计工具,被系统管理员和安全专家广泛使用。它可以帮助你扫描网络、检测开放端口并识别潜在的安全漏洞。

我们的场景设定在 2145 年的月球门户太空港(Luna Gateway Spaceport),这是月球上最大且最重要的太空港。作为网络安全团队的负责人,你的任务是保护太空港的网络基础设施免受威胁。近期有报告显示可疑活动增多,你怀疑有黑客试图渗透系统。在本实验结束时,你将获得使用 Nmap 进行基本网络侦察的实践经验,这是保障任何网络安全的关键技能,即使是未来的太空港也不例外。

了解 Nmap 并验证安装情况

Nmap 全称为 Network Mapper,是一款开源工具。在网络安全领域,它在发现计算机网络中的主机和服务方面起着至关重要的作用。你可以把它想象成一名侦探,能够查明网络中正在发生的情况。在我们虚构的月球门户太空港(Luna Gateway Spaceport)场景中,Nmap 对于保护其复杂网络基础设施的安全极具价值。

在开始使用 Nmap 之前,我们需要确保它已安装在我们的系统上。以下是验证其安装情况的方法:

  1. 首先,你需要打开一个终端窗口。在 LabEx 环境中,终端通常已经打开并设置为 /home/labex/project 目录。终端就像是一个控制中心,你可以在其中输入命令与系统进行交互。

  2. 现在,我们将运行一个命令来检查已安装的 Nmap 版本。在终端中输入以下命令并按回车键:

    nmap --version

    这个命令是在要求系统显示已安装的 Nmap 版本信息。--version 选项是许多程序中获取版本相关详细信息的常用方式。

  3. 运行命令后,花点时间查看输出。你会看到诸如 Nmap 的具体版本、编译方式以及其他相关信息。这有助于你确认 Nmap 已正确安装,同时也能让你根据版本了解可能可用的功能。

设置测试服务

在开始使用 Nmap 进行实践之前,你需要一个扫描目标。可以把 Nmap 想象成网络安全领域的侦探工具,而你需要一个“嫌疑人”(目标)来进行调查。在这种情况下,我们将使用一个名为 netcat(nc)的工具在你的本地机器上设置一个简单的网络服务。Netcat 是一个多功能的网络实用工具,可以通过网络连接读写数据。

  1. 首先,让我们验证 netcat 是否已安装在你的系统上。你可以在终端中运行以下命令来进行验证:

    nc -h

    这个命令会要求 netcat 显示其帮助信息。如果 netcat 已安装,你将看到可用选项的列表以及如何使用它们。如果你收到错误信息,则意味着 netcat 未安装,你需要在继续操作之前安装它。

  2. 现在,打开一个新的终端窗口。这很重要,因为稍后我们将使用原来的终端执行其他命令,并且需要在一个单独的窗口中保持 netcat 服务运行。你可以通过在终端区域右键单击并选择“New Terminal”,或者使用键盘快捷键(通常是 Ctrl+Shift+T)来打开一个新的终端窗口。

  3. 在这个新的终端窗口中,我们将启动一个保持开放的简单网络服务。运行以下命令:

    while true; do nc -n -lvp 7777; done

    这个命令创建了一个无限循环。每次与 netcat 服务的连接关闭时,循环都会重新启动 netcat,确保服务始终可供我们扫描。你应该会看到输出信息,表明 netcat 正在监听端口 7777。

    • -n:此标志告诉 netcat 直接使用 IP 地址,而不是尝试解析主机名。这样可以加快进程并避免潜在的 DNS 相关问题。
    • -l:此标志告诉 netcat 进入监听模式。它会等待传入的连接,而不是尝试发起连接。
    • -v:此标志启用详细输出。Netcat 将提供关于其正在执行操作的更详细信息,这有助于调试和理解正在发生的事情。
    • -p 7777:此标志指定 netcat 应该监听的端口号。在这种情况下,我们选择了端口 7777。
  4. 保持这个终端窗口打开。在接下来的步骤中,当我们使用 Nmap 进行扫描时,我们将使用它来观察传入的连接。此窗口中运行的 netcat 服务将作为我们 Nmap 扫描的目标,让我们了解 Nmap 如何与实际的网络服务进行交互。

执行基本的 Nmap 扫描

既然我们已经成功设置了一个服务,现在是时候使用 Nmap 来发现它了。Nmap 是一款强大的网络扫描工具,它可以帮助我们找出目标机器上开放的端口和服务。在这一步中,我们将对本地主机(localhost)进行基本扫描,以找到我们刚刚设置的服务。

  1. 首先,回到你原来的终端窗口。确保它不是运行 netcat 的那个窗口。我们需要使用这个终端来运行 Nmap 命令。

  2. 接下来,运行以下 Nmap 命令:

    nmap -v -p 7777 localhost

    让我们来分解这个命令,了解每个部分的作用:

    • nmap:这是运行 Nmap 的基础命令。它告诉系统我们要使用 Nmap 工具进行网络扫描。
    • -v:此选项启用详细输出。当我们使用 -v 时,Nmap 会为我们提供关于扫描的更详细信息,例如扫描进度和目标的额外细节。
    • -p 7777:此选项告诉 Nmap 仅扫描端口 7777。端口就像计算机上的门,不同的服务使用不同的端口。通过指定 -p 7777,我们要求 Nmap 检查目标机器上的端口 7777 是否开放。
    • localhost:这是我们要扫描的目标。在这种情况下,localhost 指的是你自己的机器。这是在本地环境中测试网络扫描的一种方式。
  3. 运行命令后,观察输出。你应该会看到类似以下的内容:

    Starting Nmap ( http://nmap.org )
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.000040s latency).
    PORT     STATE SERVICE
    7777/tcp open  cbt

    这个输出提供了重要信息。它告诉我们 Nmap 已经开始扫描,并且目标(本地主机)正在运行。7777/tcp open cbt 这一行表明本地主机上的端口 7777 是开放的,并且运行在该端口上的服务被识别为 cbt

  4. 为了保存这次扫描的记录以便将来参考,让我们将输出保存到一个文件中。再次运行命令并进行输出重定向:

    nmap -v -p 7777 localhost > /home/labex/project/nmap_scan_output.txt

    这个命令执行的扫描与之前相同,但 > 符号将输出重定向到 /home/labex/project 目录下一个名为 nmap_scan_output.txt 的文件中。这样,我们以后就可以轻松访问扫描结果。

  5. 你可以使用 cat 命令查看这个文件的内容。运行以下命令:

    cat /home/labex/project/nmap_scan_output.txt

    cat 命令用于在终端上显示文件的内容。通过运行这个命令,你可以看到保存的扫描输出。

  6. 最后,检查 netcat 所在的终端。你应该会注意到 Nmap 尝试连接到该服务。由于我们在 netcat 中设置了循环,它会关闭并重新打开,确保服务仍然可供进一步扫描。这很重要,因为它允许我们继续使用 Nmap 测试和探索网络。

探究 Nmap 输出

既然我们已经成功使用 Nmap 执行了一次基本扫描,现在是时候仔细查看 Nmap 生成的输出了。理解这些输出至关重要,因为它能提供有关目标系统的宝贵信息,例如开放端口和正在运行的服务。

  1. 首先,我们需要打开 Nmap 扫描输出文件。这个文件包含了我们刚刚进行的扫描的所有详细信息。为了打开它,我们将使用 nano 文本编辑器。nano 是一款简单且用户友好的文本编辑器,它能让我们轻松查看和编辑文本文件。在你的终端中运行以下命令:

    nano /home/labex/project/nmap_scan_output.txt

    这个命令将在 nano 文本编辑器中打开指定的文件。

  2. 文件打开后,检查其内容。你会注意到文件被分成了几个部分,每个部分提供不同类型的信息:

    • Nmap 扫描报告:这部分显示了扫描的目标。在我们的例子中,目标是 localhost,即我们当前正在使用的本地机器。
    • 主机状态:这部分表明主机(目标系统)是否正在运行。它还提供了有关主机延迟的信息,延迟是指信号从我们的机器传输到目标并返回所需的时间。
    • 端口表:这个表显示了被扫描端口的状态。它告诉我们端口是开放、关闭还是被过滤。此外,它还显示了 Nmap 认为可能在该端口上运行的服务。
  3. 你可能会注意到 Nmap 将端口 7777 上的服务识别为“cbt”。然而,需要注意的是,这只是 Nmap 根据常见端口分配做出的最佳猜测。对于像 7777 这样的非标准端口,这种识别可能并不总是准确的。

  4. 当你检查完文件后,可以通过按 Ctrl+X 退出 nano 文本编辑器。

  5. 现在,让我们尝试进行一次更全面的扫描。我们将使用一个包含额外选项的新命令,以收集更多关于目标的信息。在你的终端中运行以下命令:

    nmap -v -p 7777 -sV localhost > /home/labex/project/nmap_service_scan.txt

    以下是该命令各部分的含义:

    • -v:此选项启用详细模式,这意味着 Nmap 将提供有关扫描过程的更详细信息。
    • -p 7777:这指定我们只想扫描端口 7777。
    • -sV:此标志告诉 Nmap 探测开放端口,以确定在这些端口上运行的服务及其版本。
    • localhost:这是我们扫描的目标,即本地机器。
    • > /home/labex/project/nmap_service_scan.txt:这将扫描的输出重定向到指定的文件。
  6. 运行扫描后,我们想查看这个新文件的内容。为此,我们将使用 cat 命令,该命令用于在终端中显示文件的内容。运行以下命令:

    cat /home/labex/project/nmap_service_scan.txt

    你应该会在输出中看到有关端口 7777 的更多信息。即使 Nmap 无法确定在该端口上运行的确切服务,与基本扫描相比,它仍会提供更详细的输出。

  7. 当你查看输出时,留意类似以下的行:

    PORT     STATE SERVICE VERSION
    7777/tcp open  cbt?

    这一行表明 Nmap 检测到端口 7777 是开放的。然而,“cbt”后面的问号表示 Nmap 对服务分类不确定。这意味着 Nmap 无法明确识别在该端口上运行的服务。

进行全网扫描

在 Luna 网关太空港的实际场景中,你需要扫描网络上的多个主机。这很重要,因为它能帮助你了解连接到网络的设备及其开放端口,这对网络安全至关重要。让我们通过扫描一系列 IP 地址来模拟这个过程。

  1. 首先,让我们找出我们的 IP 地址。你的 IP 地址就像你网络的“家庭地址”,它能在网络上唯一标识你的设备。要找到它,我们将运行以下命令:

    ip addr show | grep inet

    命令中的 ip addr show 部分会列出你设备上的所有网络接口及其关联的 IP 地址。| 是管道符号,它将 ip addr show 命令的输出传递给 grep inet 命令。grep inet 命令会过滤输出,只显示包含“inet”这个词的行,也就是包含 IP 地址的行。

    示例输出:

    inet 127.0.0.1/8 scope host lo
    inet 172.18.0.3/16 brd 172.18.255.255 scope global eth1

    127.0.0.1/8 是回环地址,对我们的目的没有用。所以,我们可以忽略它。172.18.0.3/16 是网络接口的 IP 地址,对我们的目的有用。所以,我们可以在接下来的步骤中使用这个 IP 地址。

  2. 现在,让我们扫描我们自己 IP 地址周围的一系列 IP 地址。扫描一系列 IP 地址有助于你发现同一网络上的其他设备。如果你的 IP 地址是 172.18.0.3,你可以扫描 172.18.0.1 - 10。将以下命令中的 IP 范围替换为包含你自己 IP 的范围:

    sudo nmap -v -p 7777 172.18.0.1-10 > /home/labex/project/network_scan.txt

    sudo 命令用于以管理员权限运行后续命令,这在进行网络扫描时通常是必需的。nmap 是一个强大的网络扫描工具。-v 选项表示“详细模式”,这意味着它将提供关于扫描的更详细信息。-p 7777 选项指定我们要扫描目标 IP 地址上的 7777 端口。172.18.0.1 - 10 是我们要扫描的 IP 地址范围。> 符号将 nmap 命令的输出重定向到文件 /home/labex/project/network_scan.txt

    此命令会扫描 172.18.0.0 网络中的前 10 个 IP 地址的 7777 端口。

  3. 查看扫描结果:

    cat /home/labex/project/network_scan.txt

    cat 命令用于显示文件的内容。在这种情况下,它将显示我们保存在 network_scan.txt 文件中的网络扫描结果。你应该会看到一个 IP 地址列表,以及每个地址的 7777 端口的相关信息。

  4. 在实际场景中,这种类型的扫描将帮助你识别网络上所有开放特定端口的设备,这对于维护 Luna 网关太空港网络的安全至关重要。通过了解哪些设备开放了特定端口,你可以确定网络上是否存在任何潜在的安全风险或未经授权的访问点。

总结

在本次实验中,你学习了在保障月球网关太空港网络基础设施安全的背景下,Nmap 的基本命令语法。首先,你验证了 Nmap 的安装情况,并使用 netcat 设置了一个测试服务。接着,你对本地主机进行了基本扫描,学会了解读 Nmap 的输出,并将其保存以便进一步分析。

你还进一步学习了更复杂的技术,例如服务版本检测,它可以揭示开放端口上服务的详细信息。最后,你模拟了一次全网扫描,展示了 Nmap 如何对多个主机进行探测。这些技能是网络侦察和安全审计的基础,对于识别太空港运营中的风险至关重要。

请记住,要负责任地使用 Nmap,并且只在获得授权的网络上使用。未经授权的扫描可能会被视为攻击行为,并可能导致法律后果。在你持续学习的过程中,可以考虑扩展这些基本的 Nmap 技术,并将它们与其他工具结合使用,以便在像月球网关太空港这样的复杂环境中制定全面的安全策略。