介绍
在这个实验中,你将学习强大的网络扫描和安全审计工具 Nmap 的安装和基本使用方法。Nmap 也被称为 Network Mapper,是一款开源工具,被系统管理员和安全专家广泛用于查找网络中的主机、服务和漏洞。
本实验将指导你完成 Nmap 的安装、设置用于扫描的本地服务,并进行基本扫描,以了解 Nmap 的功能。
安装 Nmap
在这一步中,我们将指导你在 Ubuntu Linux 系统上安装 Nmap。Nmap 是一款强大的网络扫描工具,广泛应用于网络安全领域,可用于网络发现和安全审计等任务。它可以在 Ubuntu 的默认软件源中找到,这意味着安装过程非常简单。
首先,你需要打开终端。终端是一个基于文本的界面,允许你通过输入命令与系统进行交互。默认情况下,你应该位于 /home/labex/project 目录。如果你不在该目录下,可以使用以下命令导航到该目录。此命令会将你当前的工作目录更改为 /home/labex/project。
cd /home/labex/project

现在你已进入正确的目录,接下来需要更新软件包列表并安装 Nmap。软件包列表包含了 Ubuntu 软件源中所有可用软件的信息。更新列表可确保你安装的是 Nmap 的最新版本。
sudo apt update
sudo apt install nmap -y
sudo 命令用于以管理员权限运行命令。由于安装软件需要管理员权限,因此你需要使用 sudo。-y 标志与 apt install 命令一起使用,它会在安装过程中自动对所有提示回答“yes”,这样你就无需手动确认每一步操作。
安装完成后,重要的是要验证 Nmap 是否已正确安装。你可以通过检查其版本来进行验证。nmap 命令的 --version 选项会显示 Nmap 的版本信息。
nmap --version
你应该会看到类似以下的输出(注意,你的版本号可能不同):
Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.3 openssl-1.1.1f 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 进行扫描之前,必须先运行一个目标服务。这样,我们就可以有效地测试 Nmap 的扫描能力。在这一步中,我们将使用 Python 内置的 http.server 模块来设置一个简单的 HTTP 服务器。Python 的 http.server 模块是一个便捷的工具,允许我们快速启动 HTTP 服务器,而无需复杂的配置。
首先,让我们为我们的 HTTP 服务器创建一个新目录。目录就像你电脑上的一个文件夹,我们可以在其中存储与服务器相关的所有文件。
mkdir -p /home/labex/project/http-server
cd /home/labex/project/http-server
mkdir -p 命令在指定的路径中创建一个名为 http-server 的目录。 -p 选项确保如果任何中间目录不存在,也会被创建。 cd 命令然后将我们当前的工作目录更改为新创建的 http-server 目录。
现在,让我们创建一个简单的 HTML 文件,我们的服务器将提供该文件。HTML 是用于创建网页的标准标记语言。
echo "<html><body><h1>Welcome to the Nmap Lab</h1></body></html>" > index.html
此命令使用 echo 命令将 HTML 代码打印到终端,然后将该输出重定向到名为 index.html 的文件。因此,我们创建了一个具有基本 HTML 结构和欢迎消息的文件。
接下来,我们将启动 Python HTTP 服务器。
python3 -m http.server 8000
此命令使用 python3 解释器将 http.server 模块作为脚本运行。 -m 选项告诉 Python 将该模块作为脚本运行。我们指定端口 8000,这意味着我们的服务器将监听此端口上的传入请求。

重要提示:打开一个新的终端标签页或窗口以继续。保持 HTTP 服务器在此终端中运行,并在本「实验」(Lab)中使用新终端执行所有后续 Nmap 命令。这确保了 HTTP 服务器在你执行扫描时保持活动状态。
要验证服务器是否正在运行,你可以在新终端中使用 curl 命令。 curl 是一个命令行工具,用于从服务器传输数据或将数据传输到服务器。
curl http://localhost:8000
当你运行此命令时,curl 会向运行在 localhost(指你自己的计算机)的 8000 端口上的 HTTP 服务器发送请求。如果服务器运行正常,你应该会看到我们之前创建的 HTML 内容。
127.0.0.1 - - [13/Sep/2024 15:24:21] "GET / HTTP/1.1" 200 -
<html>
<body>
<h1>Welcome to the Nmap Lab</h1>
</body>
</html>
此输出表明服务器已收到请求,已成功处理该请求(由 200 状态代码指示),并返回了 index.html 文件的 HTML 内容。
Nmap 基础扫描
既然我们已经成功安装了 Nmap 并设置了本地服务,现在是时候开始进行一些基本扫描了。这将帮助你了解 Nmap 的工作原理以及它能提供什么样的信息。
首先,我们将对本地 HTTP 服务器执行简单的 TCP 连接扫描。TCP 连接扫描是 Nmap 中一种基本的扫描类型。它尝试与目标端口建立完整的 TCP 连接。如果连接成功,则意味着该端口是开放的。
以下是执行此扫描的命令:
nmap -sT -p 8000 localhost
让我们来拆解一下这个命令:
-sT是一个选项,用于指定 TCP 连接扫描。这告诉 Nmap 使用 TCP 连接方法来检查端口的状态。-p 8000表示我们希望 Nmap 仅扫描端口 8000。如果需要,你可以更改这个数字来扫描其他端口。localhost是我们扫描的目标。它指的是运行服务的本地机器。
运行此命令后,你应该会看到类似以下的输出:
Starting Nmap 7.80 ( https://nmap.org ) at 2024-09-13 15:27 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
8000/tcp open http-alt
Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds
此输出显示端口 8000 是开放的,并且正在运行一个 HTTP 服务。STATE 列指示端口的状态,在这种情况下是 open。SERVICE 列让我们大致了解该端口上可能运行的服务类型。
现在,让我们进行更详细的扫描。有时,仅仅知道某个端口是开放的还不够。我们可能想了解更多关于该端口上运行的服务的信息,例如其版本。
以下是进行更详细扫描的命令:
nmap -sV -p 8000 localhost
-sV 选项用于告诉 Nmap 对开放端口进行探测,以确定服务/版本信息。这意味着 Nmap 将尝试查明开放端口上运行的具体软件及其版本。
运行此命令后,你应该会看到类似以下的输出:
Starting Nmap 7.80 ( https://nmap.org ) at 2024-09-13 15:27 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE VERSION
8000/tcp open http SimpleHTTPServer 0.6 (Python 3.10.12)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.48 seconds
此输出提供了关于端口 8000 上运行的服务的更详细信息。它告诉我们这是一个 Python SimpleHTTPServer,甚至还给出了版本号。
你可以在启动 Python HTTP 服务器的终端日志中查看 Nmap 请求。这对于调试或进一步分析可能会很有用。
扫描多个端口
在现实场景中,你经常需要扫描多个端口,甚至是整个端口范围。让我们来探讨如何使用 Nmap 完成这项任务。
在进行网络扫描时,你可能希望一次性检查多个端口。这很有用,因为不同的服务运行在不同的端口上,通过扫描多个端口,你可以全面了解目标上可用的服务。
首先,让我们扫描本地主机(localhost)上最常用的 1000 个端口。本地主机指的是你当前正在使用的设备,其 IP 地址为 127.0.0.1。扫描最常用的 1000 个端口是快速了解本地机器上运行的服务的一种方式。
nmap localhost
运行此命令后,你会看到类似以下的输出:
Starting Nmap 7.80 ( https://nmap.org ) at 2024-09-13 15:29 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00016s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
3001/tcp open nessus
8000/tcp open http-alt
Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds
这个命令在没有指定任何端口的情况下,会扫描最常用的 1000 个端口。你会看到一个包含开放、关闭和被过滤端口的列表。输出显示了端口号、端口状态(开放、关闭或被过滤)以及相关的服务。
现在,让我们扫描所有 65535 个端口。在 TCP/IP 协议中,总共有 65535 个可用端口。扫描所有端口可以让你全面了解目标上运行的服务,但这需要更多时间。
nmap -p- localhost
-p- 选项告诉 Nmap 扫描从 1 到 65535 的所有端口。这个扫描完成所需的时间会更长,因为它必须检查每一个端口。
最后,让我们扫描特定范围的端口。有时,你可能大致知道某个特定服务可能运行在哪些端口上,并且只想扫描这些端口。
nmap -p 1-1000 localhost
这个命令扫描 1 到 1000 的端口。通过指定端口范围,你可以将扫描重点放在与你需求最相关的端口上。
输出格式与保存结果
Nmap 提供了多种输出格式,每种格式都针对不同的需求进行了优化。了解这些格式以及如何保存扫描结果,对于进一步分析和分享你的发现至关重要。在这一步中,我们将详细了解其中一些格式,并学习如何有效地保存扫描结果。
首先,让我们进行一次扫描,并将输出保存为普通格式。普通格式是一种人类可读的文本格式,它以清晰直接的方式呈现扫描结果。要将输出保存为这种格式,我们使用以下命令:
nmap -oN normal_output.txt localhost
在这个命令中,-oN 选项用于指示 Nmap 将输出保存为普通格式。normal_output.txt 是存储结果的文件名。localhost 是我们要扫描的目标,指的是本地机器本身。
现在,让我们将输出保存为 XML 格式。XML(可扩展标记语言)是一种广泛用于数据存储和交换的格式。它具有结构化的格式,可以轻松地被脚本解析,或者导入到其他工具中进行进一步处理。要将输出保存为 XML 格式,我们使用以下命令:
nmap -oX xml_output.xml localhost
在这里,-oX 选项告诉 Nmap 将输出保存为 XML 格式。xml_output.xml 是保存 XML 格式结果的文件。
最后,让我们将输出保存为可 grep 格式。可 grep 格式的设计目的是便于被 grep 等工具解析,grep 是类 Unix 系统中强大的文本搜索实用工具。当你想在扫描结果中快速搜索特定信息时,这种格式非常有用。要将输出保存为可 grep 格式,我们使用以下命令:
nmap -oG grepable_output.txt localhost
-oG 选项用于将输出保存为可 grep 格式,grepable_output.txt 是存储结果的文件。
将结果保存为不同格式后,你可能想查看这些文件的内容。你可以使用 cat 命令来显示文本文件的内容。例如,要查看普通格式的输出文件,你可以使用以下命令:
cat normal_output.txt
这将把 normal_output.txt 文件的内容打印到终端,让你可以查看扫描结果。
总结
在本次实验中,你学习了强大的网络扫描和安全审计工具 Nmap 的基础知识。首先,你在 Ubuntu Linux 系统上安装了 Nmap 并验证了安装情况。接着,你搭建了一个本地 HTTP 服务器作为扫描目标,展示了如何创建一个简单的测试服务。
你还探索了各种扫描技术,从基本的端口扫描到详细的服务版本检测。你学会了扫描系统上的特定端口、端口范围以及全部 65535 个端口,这对于了解网络和发现潜在漏洞至关重要。最后,你了解了 Nmap 的输出选项,例如将结果保存为普通文本、XML 和可 grep 格式,这些对于文档记录和进一步分析非常重要。
本次实验为你提供了使用 Nmap 的实践经验,为更高级的网络扫描和安全审计奠定了基础。请记住,要在获得适当授权的情况下负责任地使用 Nmap。



