简介
在这个实验中,你将了解 Nmap,这是一款被安全专业人员广泛使用的强大网络扫描工具。本实验特别聚焦于 Nmap 中的目标指定技术,这些技术对于定义要扫描的主机和网络至关重要。
理解这些技术对于有效的网络侦察和安全评估至关重要。在本实验结束时,你将能够使用各种方法在 Nmap 中指定目标,并有效解读扫描结果。
在这个实验中,你将了解 Nmap,这是一款被安全专业人员广泛使用的强大网络扫描工具。本实验特别聚焦于 Nmap 中的目标指定技术,这些技术对于定义要扫描的主机和网络至关重要。
理解这些技术对于有效的网络侦察和安全评估至关重要。在本实验结束时,你将能够使用各种方法在 Nmap 中指定目标,并有效解读扫描结果。
在这一步,我们要确保 Nmap 已正确安装在你的系统上,并开始探索其基本功能。Nmap 是 Network Mapper 的缩写,它是一款开源工具,广泛用于网络发现和安全审计。借助 Nmap,你可以查明哪些设备连接到了网络,以及这些设备提供了哪些服务。这在网络安全领域至关重要,因为它能帮助你了解网络状况并识别潜在的安全风险。
首先,我们需要检查你的系统上是否已经安装了 Nmap。为此,我们将使用终端。终端是一个基于文本的界面,你可以在其中输入命令与计算机进行交互。打开一个终端并运行以下命令:
nmap --version
此命令会要求系统显示已安装的 Nmap 版本。如果 Nmap 安装正确,你将看到类似以下的输出,其中包含 Nmap 版本和构建信息:
Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.3 openssl-1.1.1d nmap-libssh2-1.8.2 libz-1.2.11 libpcre-8.39 libpcap-1.9.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select
接下来,我们要了解如何为 Nmap 扫描指定目标。目标指定很重要,因为它能告诉 Nmap 你想要扫描哪些设备或网络。为了学习这一点,我们将查看一些基本的 Nmap 文档。在终端中运行以下命令:
nmap -h | grep -A 10 "TARGET SPECIFICATION"
此命令首先使用 nmap -h
获取 Nmap 的帮助文本。然后,将输出通过管道传递给 grep -A 10 "TARGET SPECIFICATION"
,该命令会在帮助文本中搜索 "TARGET SPECIFICATION" 部分,并显示接下来的 10 行内容。你将看到关于为 Nmap 扫描指定目标的不同方法的说明。
现在,我们需要一个地方来存储 Nmap 扫描的结果。为此,我们将创建一个目录。目录就像你计算机上的文件夹,你可以在其中组织文件。在终端中运行以下命令:
mkdir -p /home/labex/project/nmap_scans
cd /home/labex/project/nmap_scans
mkdir -p
命令会在 /home/labex/project
路径下创建一个名为 nmap_scans
的目录。-p
选项可确保如果任何中间目录不存在,也会一并创建。cd
命令则将当前工作目录更改为新创建的 nmap_scans
目录。
让我们通过在本地机器上运行一个简单的扫描来看看 Nmap 的实际运行情况。本地机器就是你当前使用的计算机。运行以下命令:
nmap localhost > local_scan.txt
此命令使用 Nmap 扫描你的本地机器。>
符号将扫描输出重定向到一个名为 local_scan.txt
的文件中。这样,我们就可以保存扫描结果以供后续分析。
最后,让我们查看扫描结果。运行以下命令:
cat local_scan.txt
cat
命令会显示 local_scan.txt
文件的内容。你将看到 Nmap 在你的本地机器上扫描的端口列表。除了端口号,你还会找到哪些端口是开放的,以及这些开放端口上可能运行着哪些服务的信息。这些信息可以帮助你了解本地机器的安全状况。
在这一步,你将学习如何启动一个本地 Web 服务器,然后使用名为 Nmap 的强大工具通过扫描特定端口来找到它。理解这个过程至关重要,因为它展示了如何使用 Nmap 识别当前在网络或机器上运行的服务。
首先,你需要导航到项目目录。这是你设置简单 Web 服务器的地方。到达正确的目录后,你将启动一个 Python HTTP 服务器,它将监听 8000 端口。8000 端口是测试 Web 服务器常用的端口。以下是执行此操作的命令:
cd /home/labex/project/nmap_scans
python3 -m http.server 8000 &
命令末尾的 &
很重要。它会让服务器在后台运行。这意味着在服务器运行时,你可以继续使用终端执行其他任务。运行该命令后,你应该会看到一些输出,表明服务器已成功启动:
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
现在服务器已经运行,你要确保它确实在监听 8000 端口。你可以使用 lsof
命令,它代表 "list open files"(列出打开的文件)。此命令可帮助你检查当前哪些进程正在使用特定端口。以下是使用方法:
lsof -i :8000
如果服务器运行正常,你应该会看到类似以下的输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python3 12345 labex 4u IPv4 123456 0t0 TCP *:8000 (LISTEN)
此输出表明 Python 正在监听 8000 端口,这意味着服务器按预期工作。
接下来,你将使用 Nmap 扫描本地机器上的 8000 端口。目标是检测你的 HTTP 服务器。以下是命令:
nmap -p 8000 localhost > http_server_scan.txt
在这个命令中,-p
标志用于指定要扫描的端口。在这种情况下,你正在扫描本地机器(localhost)上的 8000 端口。>
符号将 Nmap 扫描的输出重定向到一个名为 http_server_scan.txt
的文件中。这样,你可以在以后轻松查看结果。
让我们检查扫描结果:
cat http_server_scan.txt
如果扫描成功,你应该会看到类似以下的输出:
Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-25 12:34 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
PORT STATE SERVICE
8000/tcp open http-alt
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
此输出显示 8000 端口是开放的,并且正在运行 HTTP 服务,这意味着 Nmap 能够检测到你的服务器。
最后,让我们尝试扫描一个端口范围,看看本地机器上是否还有其他服务在运行。以下是命令:
nmap -p 1-1000 localhost > port_range_scan.txt
此命令告诉 Nmap 扫描本地机器上从 1 到 1000 的所有端口。同样,你将输出重定向到一个名为 port_range_scan.txt
的文件中。
让我们查看结果:
cat port_range_scan.txt
输出将显示 1 - 1000 范围内哪些端口在你的本地机器上是开放的。这是一种发现你可能不知道正在运行的服务的有用方法。
在这一步中,我们将深入探讨更高级的 Nmap 目标指定技术。Nmap 是网络侦察中的强大工具,它提供了多种在单个命令中指定多个目标的方法。当你需要一次性扫描多个主机或网络时,这非常有用,能为你节省时间和精力。
首先,我们创建一个包含多个要扫描的 IP 地址的文本文件。我们将包含本地主机 (127.0.0.1) 和其他几个本地 IP 地址。本地主机是一个特殊的 IP 地址,指的是当前设备本身。通过包含它,我们可以在自己的机器上测试扫描过程。
cd /home/labex/project/nmap_scans
echo "127.0.0.1" > targets.txt
echo "127.0.0.2" >> targets.txt
echo "127.0.0.3" >> targets.txt
在上述代码中,cd
命令将当前工作目录更改为 /home/labex/project/nmap_scans
。echo
命令用于输出文本。>
运算符创建一个新文件并将文本写入其中,而 >>
运算符将文本追加到现有文件中。因此,我们首先创建一个名为 targets.txt
的文件,并将 127.0.0.1
写入其中。然后,我们将 127.0.0.2
和 127.0.0.3
追加到同一个文件中。
现在,让我们查看一下刚刚创建的文件,确保 IP 地址已正确添加。
cat targets.txt
cat
命令用于显示文件的内容。运行此命令后,你应该会看到以下输出:
127.0.0.1
127.0.0.2
127.0.0.3
接下来,我们将使用 Nmap 中的 -iL
标志一次性扫描 targets.txt
文件中列出的所有 IP 地址。-iL
标志告诉 Nmap 从文件中读取目标。
nmap -iL targets.txt > multiple_targets_scan.txt
在这里,nmap
命令用于执行网络扫描。-iL
标志指定包含目标的文件。>
运算符将扫描的输出重定向到一个名为 multiple_targets_scan.txt
的文件中。
让我们检查一下扫描结果:
cat multiple_targets_scan.txt
运行此命令后,你应该会看到所有三个 IP 地址的扫描结果。请注意,127.0.0.1 通常会显示开放端口,因为它是本地主机,可能有一些服务在其上运行。然而,127.0.0.2 和 127.0.0.3 可能不会响应,因为它们通常不会在大多数系统上进行配置。
另一种指定多个目标的方法是在 Nmap 命令中直接使用空格表示法或 CIDR 表示法。
nmap 127.0.0.1 127.0.0.2 > space_notation_scan.txt
在这个命令中,我们使用空格分隔 IP 地址。这告诉 Nmap 扫描 127.0.0.1 和 127.0.0.2。扫描的输出被重定向到一个名为 space_notation_scan.txt
的文件中。
让我们检查一下结果:
cat space_notation_scan.txt
我们还可以使用 CIDR 表示法来扫描一系列 IP 地址。CIDR(无类别域间路由)表示法是一种以简洁形式表示 IP 地址范围的方法。
nmap 127.0.0.0/30 > cidr_notation_scan.txt
CIDR 表示法中的 127.0.0.0/30
表示从 127.0.0.0 到 127.0.0.3 的 IP 地址范围,总共 4 个地址。此扫描的输出被重定向到一个名为 cidr_notation_scan.txt
的文件中。
让我们检查一下结果:
cat cidr_notation_scan.txt
最后,让我们探讨如何从扫描中排除特定目标。当你想扫描一个网络但不想包含某些主机时,这很有用。
nmap 127.0.0.0/30 --exclude 127.0.0.3 > exclude_scan.txt
在这个命令中,我们使用 --exclude
标志告诉 Nmap 在扫描 127.0.0.0/30
范围时跳过 IP 地址 127.0.0.3
。扫描的输出被重定向到一个名为 exclude_scan.txt
的文件中。
让我们检查一下结果:
cat exclude_scan.txt
你应该会看到 127.0.0.0、127.0.0.1 和 127.0.0.2 的扫描结果,但不会看到 127.0.0.3 的扫描结果。
这些高级目标指定技术使你能够精确控制 Nmap 扫描哪些主机,从而使你的网络侦察更加高效和有针对性。
在本次实验中,你学习了如何使用 Nmap 进行网络侦察,重点是目标指定技术。首先,你安装了 Nmap,并通过在本地机器上执行简单扫描来探索其基本功能。然后,你设置了一个本地 HTTP 服务器,并使用 Nmap 通过扫描特定端口来找到它。
这些技能对于网络管理员和安全专业人员发现和评估网络设备至关重要。掌握 Nmap 目标指定技术能让你高效地扫描任何规模和复杂度的网络,针对与你任务相关的特定主机和服务进行扫描。请始终负责任地使用 Nmap,并且仅在获得授权的网络上使用,以避免法律和道德问题。