探索用于网络扫描的 Nmap 详细输出级别

NmapBeginner
立即练习

介绍

在本实验中,你将学习如何在不同的详细输出级别下使用强大的网络扫描工具 Nmap。Nmap 是安全专家用于发现计算机网络上的主机和服务的首选工具。掌握 Nmap 的详细输出选项可以让你控制扫描期间显示的信息,这对于高效的网络分析和故障排除至关重要。

在整个实验过程中,你将设置一个本地服务器用于扫描练习。你还将探索不同的详细输出级别如何影响扫描结果以及呈现的信息。

搭建网络扫描环境

在这个步骤中,我们将在你的机器上搭建一个本地 Web 服务器。该服务器将作为我们进行 Nmap 扫描的目标。Nmap 是网络安全中常用的强大网络扫描工具,用于发现计算机网络上的主机和服务。通过拥有一个本地服务器,你可以安全地练习使用 Nmap,而不会影响真实世界的网络。

理解 HTTP 服务器

在创建服务器之前,让我们先了解什么是 HTTP 服务器。HTTP 代表超文本传输协议(HyperText Transfer Protocol)。它是你的网络浏览器用于与网站通信的协议。HTTP 服务器是一个能够理解 URL(网址)和 HTTP 协议的软件应用程序。当你在浏览器中输入网址时,浏览器会向相应的 HTTP 服务器发送 HTTP 请求,然后服务器会返回请求的网页。对于我们的实验,我们将使用 Python(一种流行且易于学习的编程语言)创建一个简单的 HTTP 服务器。

创建 HTTP 服务器

首先,我们需要确保你处于正确的工作目录中。工作目录就像是一个文件夹,你的命令将在其中运行。在本例中,我们希望位于 /home/labex/project 目录中。要导航到此目录,请使用以下命令:

cd /home/labex/project

现在我们处于正确的位置,我们将使用 Python 内置的 HTTP 服务器模块来创建一个简单的 Web 服务器。我们将把该服务器设置为监听 8080 端口。端口就像计算机上的一扇门,网络流量可以通过它进出。不同的服务使用不同的端口。输入以下命令:

python -m http.server --bind 127.0.0.1 8080 &

让我们分解一下这个命令的作用:

  • python -m http.server:这部分启动了 Python 的内置 HTTP 服务器模块。它告诉 Python 运行 HTTP 服务器功能。
  • --bind 127.0.0.1:这使得服务器监听 IPv4 环回地址,在此环境中,Nmap 会扫描该地址以查找 localhost
  • 8080:这指定服务器应该监听 8080 端口。这意味着该端口上的任何传入 HTTP 请求都将由我们的服务器处理。
  • &:在命令末尾加上一个和号(ampersand)可在后台运行服务器。这很有用,因为它允许你在服务器运行的同时继续使用终端执行其他命令。

运行该命令后,你应该会看到类似于以下的输出:

Serving HTTP on 127.0.0.1 port 8080 (http://127.0.0.1:8080/) ...

此输出表明你的 HTTP 服务器现在正在运行,并且准备好在 8080 端口上接受连接。有了这个运行中的服务器,我们就拥有了一个目标,可以在接下来的步骤中使用 Nmap 对其进行扫描。

验证 HTTP 服务器是否正在运行

确认你的服务器确实在正确运行是很重要的。为此,我们可以使用以下命令:

ss -tulwn | grep 8080

ss 命令用于显示套接字统计信息。选项 -tulwn 告诉 ss 显示 TCP、UDP、监听(listening)和数字格式的套接字信息。| 是一个管道(pipe),它将 ss 命令的输出传递给 grep 命令。然后,grep 命令在输出中搜索字符串 8080。如果服务器正在运行,此命令应该会显示表明有程序正在监听 8080 端口的输出,这证实了你的 HTTP 服务器处于活动状态,并且已准备好进行 Nmap 扫描。

了解 Nmap 基础知识与默认详细输出级别

在这个步骤中,随着我们的目标服务器启动并运行,是时候开始探索 Nmap 及其详细输出级别了。Nmap 是 Network Mapper(网络映射器)的缩写,是一个强大的安全扫描器。其主要目的是帮助你发现计算机网络上的主机和服务。这在网络安全中至关重要,因为它能让你了解网络的布局并识别潜在的安全风险。

什么是 Nmap 的详细输出?

在 Nmap 中,详细输出(verbosity)决定了扫描期间显示多少信息。根据你希望扫描结果有多详细,你可以选择不同的详细输出级别。以下是常见详细输出级别的概述:

  • 级别 0:这是默认级别。它为你提供标准输出,其中包含有关扫描的基本信息。
  • 级别 1:通过使用 -v 选项,你可以在扫描输出中获取更多详细信息。
  • 级别 2:使用 -vv 选项将为你提供更详细的信息。

执行默认详细输出级别(级别 0)扫描

让我们首先使用 Nmap 的默认详细输出级别执行第一次扫描。这将使我们对在不添加额外详细信息的情况下可以获得什么类型的信息有一个基线了解。

nmap -p 8080 localhost > /home/labex/project/verbosity-0.txt

让我们分解一下这个命令:

  • nmap:这是调用 Nmap 扫描工具的命令。它告诉你的系统使用 Nmap 进行网络扫描。
  • -p 8080:此选项告诉 Nmap 将扫描重点仅放在 8080 端口上。端口就像计算机上的门,不同的服务使用不同的端口。通过指定 8080 端口,我们只对运行在该特定端口上的服务感兴趣。
  • localhost:这表示我们正在扫描本地机器。换句话说,我们正在检查运行在我们执行 Nmap 命令的同一台计算机上的服务。
  • > /home/labex/project/verbosity-0.txt:命令的这部分将扫描的输出重定向到位于 /home/labex/project 目录中名为 verbosity-0.txt 的文件。将输出保存到文件允许我们稍后对其进行审查。

现在,让我们查看扫描结果:

cat /home/labex/project/verbosity-0.txt

运行此命令后,你应该会看到类似于以下的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-08-10 15:30 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

让我们理解这个输出意味着什么:

  • 扫描开始时间:第一行告诉我们 Nmap 扫描开始的确切时间。这对于追踪信息收集的时间很有用。
  • 扫描目标:它显示我们正在扫描 localhost,其 IP 地址为 127.0.0.1
  • 主机状态:它表明主机处于活动状态并且有响应,延迟非常低,为 0.000097 秒。
  • 端口状态:它告诉我们 8080 端口处于 open(开放)状态,这意味着该端口上有一个正在监听的服务。
  • 运行的服务:它暗示 8080 端口上运行的可能是 http-proxy 服务。
  • 扫描完成统计信息:最后一行提供了关于扫描耗时的信息,在本例中为 0.05 秒。

默认级别提供了基本信息,但缺乏深入的洞察。在接下来的步骤中,我们将探讨更高的详细输出级别如何为我们提供关于扫描的更多深入信息。

使用 -v 选项提高详细输出级别

在网络扫描的世界中,获取详细信息至关重要。在此步骤中,我们将学习如何通过提高详细输出级别从 Nmap 获取更多深入的细节。Nmap 中的详细输出指的是它在扫描期间显示的信息量。-v 选项将详细输出级别设置为 1,它为我们提供了对网络分析极其有用的额外信息。

运行具有更高详细输出级别的扫描

让我们开始运行一个具有提高的详细输出级别的扫描。我们将使用以下命令:

nmap -p 8080 localhost -v > /home/labex/project/verbosity-1.txt

让我们分解一下这个命令:

  • nmap 是调用 Nmap 扫描工具的命令。Nmap 是一个功能强大且广泛使用的网络探索和安全审计工具。
  • -p 8080 告诉 Nmap 仅扫描 8080 端口。端口就像网络中的门,通过指定端口,我们将扫描重点集中在可能运行在该端口上的特定服务上。
  • localhost 表明我们的目标是本地机器。这对于测试和了解 Nmap 在你自己的系统上如何工作非常有用。
  • -v 将详细输出级别提高到 1。这意味着 Nmap 将显示关于扫描过程的更多信息。
  • > /home/labex/project/verbosity-1.txt 将扫描的输出重定向到 /home/labex/project 目录中名为 verbosity-1.txt 的文件。将输出保存到文件允许我们稍后对其进行审查。

现在,让我们查看扫描结果:

cat /home/labex/project/verbosity-1.txt

当你运行此命令时,你应该会看到类似于此的更详细的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-08-10 15:35 UTC
Initiating Ping Scan at 15:35
Scanning localhost (127.0.0.1) [2 ports]
Completed Ping Scan at 15:35, 0.00s elapsed (1 total hosts)
Initiating Connect Scan at 15:35
Scanning localhost (127.0.0.1) [1 port]
Discovered open port 8080/tcp on 127.0.0.1
Completed Connect Scan at 15:35, 0.00s elapsed (1 total ports)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000089s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds

理解额外的信息

在详细输出级别 1 下,输出提供了丰富的额外细节。你可以看到以下内容:

  • 扫描过程被分解为各个阶段。例如,有 Ping 扫描(Ping Scan)和连接扫描(Connect Scan)。Ping 扫描用于检查主机是否可达,而连接扫描尝试建立到特定端口的连接。
  • 提供了每个阶段的时间信息。这有助于你了解扫描的每个部分花费了多长时间。
  • 你可以看到发现开放端口的确切时刻。这很重要,因为它为你提供了清晰的扫描时间线。
  • 还显示了 Nmap 在扫描期间使用的数据文件。这些文件包含有关服务、端口以及 Nmap 用于执行扫描的其他网络相关数据的信息。

这些额外的信息非常有用,因为它使你能够:

  • 了解 Nmap 如何执行其扫描。通过查看不同的阶段以及它们发生的顺序,你可以更好地掌握扫描过程。
  • 知道扫描期间事件的确切时间线。这对于故障排除或了解网络行为非常有用。
  • 确定发现特定端口和服务的时间。这对于安全评估和网络管理至关重要。

比较详细输出级别

为了更清楚地看到普通扫描与提高详细输出级别的扫描之间的区别,我们将比较这两个输出文件。使用以下命令:

diff /home/labex/project/verbosity-0.txt /home/labex/project/verbosity-1.txt

diff 命令比较两个文件的内容并显示它们之间的差异。此命令的输出将证明提高详细输出级别如何提供对扫描过程的更多深入了解。当你排查网络问题或进行详细的安全评估时,这些额外的信息尤其有用。

其他详细输出级别

Nmap 并不止步于详细输出级别 1。它支持更高的详细输出级别:

  • -vv 将详细输出级别设置为 2。
  • -vvv 将详细输出级别设置为 3。

当你提高详细输出级别时,Nmap 将提供关于扫描过程的越来越详细的信息。当你需要深入研究网络并了解扫描的每一个方面时,这会非常有用。

探索更高的详细输出级别与实际应用

在此步骤中,我们将更深入地探讨 Nmap 的功能。我们将首先使用更高的详细输出级别,这将在扫描过程中为我们提供更详细的信息。然后,我们将了解不同详细输出设置的实际应用,以便你了解在真实世界的场景中何时使用每个级别。

运行具有最高详细输出级别的扫描

让我们执行一个详细输出级别为 2 的扫描。在 Nmap 中,我们可以使用 -vv 选项设置详细输出级别。详细输出级别 2 将提供大量关于扫描的详细信息。运行扫描的命令如下:

nmap -p 8080 localhost -vv > /home/labex/project/verbosity-2.txt

在此命令中,-p 8080 告诉 Nmap 扫描 8080 端口。localhost 是我们要扫描的目标,指的是本地机器。-v 选项将详细输出提高到级别 2。> 符号将扫描的输出重定向到文件 /home/labex/project/verbosity-2.txt

现在,让我们检查扫描结果。我们可以使用 cat 命令显示文件的内容:

cat /home/labex/project/verbosity-2.txt

当你查看输出时,你会注意到它包含关于扫描过程的更多技术细节。这些细节包括:

  • 更深入的时间信息:这有助于你了解扫描的不同部分花费了多长时间。
  • 额外的调试信息:如果扫描过程中出现问题,这可能会很有用。
  • 更详细的协议信息:这让你更好地了解扫描中涉及的网络协议。

不同详细输出级别的实际应用

不同的详细输出级别在不同的场景中有用。让我们看一下每个级别及其实际应用:

  • 默认级别(0)

    • 默认的详细输出级别最适合快速扫描。当你只需要关于目标的的基本信息(例如特定端口是开放还是关闭)时,此级别就足够了。
    • 它对于日常检查和简单的网络映射也很有用。例如,如果你想快速检查服务器端口的基本状态,可以使用默认级别。
    • 一个使用场景是检查服务器上的特定端口是否开放。你可以获得快速概览,而不会陷入过多的细节中。
  • 详细输出级别 1(-v)

    • 此级别适用于更详细的分析。它提供比默认级别更多的信息,这有助于你更好地了解扫描时间线。
    • 如果你正在排查连接问题,此级别的额外信息会非常有用。你可以看到扫描的哪些部分花费了较长时间,或者是否存在任何错误。
    • 一个使用场景是排查连接问题。你可以使用额外的细节来弄清楚可能是什么原因导致了问题。
  • 更高的详细输出级别(-vv、-vvv)

    • 这些级别非常适合深入分析和调试。它们提供最大量的信息,这对于安全审计非常有用。
    • 当你进行详细的安全评估或需要准确了解扫描如何与目标交互时,更高级别的详细输出是最佳选择。
    • 一个使用场景是详细的安全评估,或者当你需要准确了解扫描如何与目标交互时。你可以获得扫描过程的全面视图。

将详细输出与其它 Nmap 选项结合使用

可以将详细输出选项与其它 Nmap 选项结合使用以执行更强大的扫描。让我们尝试使用以下命令进行更高级的扫描:

nmap -p 8080 -sV localhost -v > /home/labex/project/advanced-scan.txt

让我们分解一下这个命令:

  • -p 8080 指定我们要扫描 8080 端口。
  • -sV 启用版本检测。此选项尝试确定在扫描端口上运行的服务的版本。
  • -v 将详细输出提高到级别 1,因此我们将获得有关扫描过程的更多详细信息。
  • > 符号将扫描的输出重定向到文件 /home/labex/project/advanced-scan.txt

现在,让我们看一下扫描结果:

cat /home/labex/project/advanced-scan.txt

你会注意到,添加 -sV 提供了有关在 8080 端口上运行的服务版本的信息。同时,-v 选项确保你获得有关扫描过程的详细信息,从而更容易分析结果。

清理

在我们完成本实验之前,我们需要正确关闭之前创建的 HTTP 服务器。我们可以使用以下命令来做到这一点:

pkill -f "python -m http.server"

此命令会终止在 8080 端口上运行的 Python HTTP 服务器进程。进行适当的清理以避免将来发生任何冲突或资源使用问题是很重要的。

总结

在本实验中,你学习了如何有效地使用 Nmap 的详细输出级别来控制网络扫描期间显示的信息。从基本的本地 HTTP 服务器设置开始,你探索了不同的详细输出级别如何影响 Nmap 扫描输出。

你发现默认的详细输出级别(0)提供了有关开放端口和服务的必要细节。使用 -v 选项提高了详细输出,为扫描过程提供了更多见解。像 -vv-vvv 这样更高的级别为深入分析提供了详细的技术信息。详细输出选项还可以与其它 Nmap 技术结合使用,以进行更强大的网络分析。这些技能对于网络管理员和安全专业人员至关重要,使他们能够高效地收集网络数据并针对特定任务定制扫描。