使用 Nmap 进行网络扫描

NmapNmapBeginner
立即练习

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

简介

在本实验中,你将通过学习和使用 Nmap 这一功能强大且多用途的网络扫描工具,探索网络安全的世界。Nmap(Network Mapper)是一个开源工具,系统管理员和安全专业人员常用它来发现网络中的主机、服务和漏洞。它就像黑暗房间中的手电筒,帮助你看到那里有什么以及可能隐藏了什么。

在这个动手实验中,你将学习:

  1. 如何安装和使用 Nmap
  2. 不同类型的网络扫描
  3. 如何解读 Nmap 的结果
  4. 网络安全在现实场景中的重要性

请记住,你在这里学到的技能非常强大,应仅以道德的方式使用,并且只能在你拥有或获得明确测试权限的网络上进行。让我们开始吧!

安装 Nmap

在我们开始探索网络之前,我们需要准备好合适的工具。在这一步中,我们将在你的系统上安装 Nmap。

  1. 首先,打开终端。在现实世界中,许多网络操作都是通过命令行界面完成的,因此熟悉它非常重要。在你的桌面上,找到并打开 Xfce 终端。
Xfce 终端窗口打开

注意:免费用户无法连接到互联网,因此 Nmap 已预先安装在实验室环境中,你可以跳至列表第 4 点(检查 Nmap 是否已安装)。升级为专业用户 以练习自行安装 Nmap。

Pro Users Only
  1. 终端打开后,我们需要更新软件包列表。这确保我们拥有关于可用软件的最新信息。输入以下命令并按 Enter:
sudo apt-get update

sudo 用于以管理员权限运行命令。

  1. 现在我们的软件包列表已经是最新的了,接下来安装 Nmap。输入以下命令:
sudo apt-get install nmap -y

-y 标志会自动对所有提示回答“是”,使安装过程更加顺畅。

4. 安装完成后,验证 Nmap 是否正确安装是一个好习惯。我们可以通过检查其版本来实现这一点。输入:
nmap --version

你应该会看到类似以下的输出:

Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.6 openssl-3.0.2 nmap-libssh2-1.8.2 libz-1.2.11 libpcre-8.39 libpcap-1.10.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select

如果版本号或某些细节不同,请不要担心——Nmap 会定期更新。

恭喜!你已经安装了一个强大的网络扫描工具。Nmap 就像网络探索和安全审计的瑞士军刀。它有许多功能,从简单的 ping 扫描到高级的漏洞检测。在本实验中,我们将重点介绍其基本用法,以帮助你了解其功能。

如果你对 Nmap 的其他功能感到好奇,可以在终端中输入 man nmap。这将显示 Nmap 的手册页,详细列出其所有选项和功能。你可以自由探索,但不必担心现在就要理解所有内容——我们将在本实验中涵盖最重要的部分。

理解 IP 地址

在我们开始扫描网络之前,理解 IP 地址至关重要。你可以将 IP 地址想象成你的计算机在网络中的家庭地址。就像邮递服务需要你的家庭地址来投递邮件一样,网络中的其他设备也需要你的 IP 地址来与你的计算机通信。

  1. IP 地址是网络中设备的唯一标识符。它通常由一系列用点分隔的数字组成,例如 192.168.1.1
graph LR A[Internet] --- B[Router 192.168.1.1] B --- C[PC 192.168.1.10] B --- D[Laptop 192.168.1.11] B --- E[Smartphone 192.168.1.12] B --- F[Smart TV 192.168.1.13] style A fill:#f9f,stroke:#333,stroke-width:4px style B fill:#bbf,stroke:#333,stroke-width:2px style C fill:#dfd,stroke:#333,stroke-width:2px style D fill:#dfd,stroke:#333,stroke-width:2px style E fill:#dfd,stroke:#333,stroke-width:2px style F fill:#dfd,stroke:#333,stroke-width:2px
  1. 要查找你自己的 IP 地址,我们将使用一个显示网络接口信息的命令。输入以下命令:
ip addr show | grep inet

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

  • ip addr show 显示所有网络接口的信息
  • |(管道符)将该输出传递给下一个命令
  • grep inet 过滤输出,仅显示包含 "inet" 的行,这些行包含 IP 地址

你会看到类似以下的输出:

inet 127.0.0.1/8 scope host lo
inet 172.19.0.3/16 brd 172.19.255.255 scope global eth1
  1. 在这个输出中,你会看到几个 IP 地址。以下是它们的含义:

    • 127.0.0.1 是“本地主机”地址。每台计算机都将自己称为 127.0.0.1。这用于你机器内部的本地连接。
    • 172.19.0.3 是你的机器在网络中的 IP 地址。这是其他设备用来与你的机器通信的地址。
  2. 记下不是 127.0.0.1 的 IP 地址(在这个例子中是 172.19.0.3)。我们将在下一步中使用它。

IP 地址后面的 /16 称为子网掩码。它定义了网络的大小。在这个例子中,/16 表示 IP 地址的前两个数字(172.19)定义了网络,后两个数字可以用于单个设备。

如果你对不同类型的 IP 地址感到好奇,值得注意的是,IP 协议有两个主要版本:IPv4(如 172.19.0.3)和 IPv6(以类似 fe80:: 的字符开头)。IPv6 的创建是为了解决随着更多设备连接到互联网而导致的 IPv4 地址耗尽问题。在本实验中,我们将重点介绍 IPv4 地址。

执行基本的 Nmap 扫描

现在我们已经理解了 IP 地址并安装了 Nmap,接下来让我们执行第一次网络扫描。我们将从扫描自己的机器开始,看看 Nmap 能告诉我们什么信息。

  1. 我们将使用你在上一步中记下的 IP 地址。运行以下命令,将 <YOUR_IP> 替换为你找到的 IP 地址:
nmap <YOUR_IP>

例如,如果你的 IP 是 172.19.0.3,你将运行:

nmap 172.19.0.3
  1. 运行此命令后,Nmap 将执行扫描并输出结果。以下是你可能会看到的示例:
Starting Nmap 7.80 ( https://nmap.org ) at 2024-09-24 10:00 CST
Nmap scan report for 336efdcfb776.external (172.19.0.3)
Host is up (0.00017s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus

Nmap done: 1 IP address (1 host up) scanned in 0.19 seconds
  1. 让我们分解这个输出,以理解 Nmap 告诉我们的信息:

    • "Starting Nmap 7.80":这是你使用的 Nmap 版本。
    • "Host is up":这确认了该 IP 地址对扫描做出了响应。
    • "Not shown: 998 closed ports":Nmap 扫描了 1000 个常见端口,其中 998 个是关闭的。
    • "PORT STATE SERVICE":这显示了 Nmap 找到的开放端口。
      • 22/tcp open ssh:端口 22 是开放的,通常用于 SSH(Secure Shell),这是一种用于安全远程访问的协议。
      • 3001/tcp open nessus:端口 3001 是开放的,与 Nessus 漏洞扫描器相关联。
  2. 这个基本扫描为我们提供了机器上运行服务的快速概览。在现实场景中,这些信息可以用于:

    • 识别潜在的漏洞(例如,不必要的开放端口)
    • 验证所需服务是否正在运行
    • 检测可能表明安全漏洞的意外服务

请记住,在现实世界中,你应该仅对你拥有或获得明确测试权限的网络和设备执行扫描。未经授权的扫描可能是非法且不道德的。

执行操作系统检测扫描

Nmap 的功能不仅限于查找开放端口。它还可以尝试确定目标机器的操作系统。这一功能对网络管理员和安全专业人员非常有用,因为不同的操作系统具有不同的漏洞,并且需要不同的安全措施。

  1. 要执行操作系统检测扫描,我们使用 -O 标志(注意这是大写字母 'O',而不是数字零)。此扫描需要 root 权限,因此我们将使用 sudo。运行以下命令,将 <YOUR_IP> 替换为你的实际 IP 地址:
sudo nmap -O <YOUR_IP>

例如,如果你的 IP 是 172.19.0.3,你将运行:

sudo nmap -O 172.19.0.3
  1. 输出将与基本扫描类似,但会包含有关操作系统的额外信息。以下是一个示例:
Starting Nmap 7.80 ( https://nmap.org ) at 2024-09-24 10:01 CST
Nmap scan report for 336efdcfb776.external (172.19.0.3)
Host is up (0.000035s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6.32
OS details: Linux 2.6.32
Network Distance: 0 hops

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.76 seconds
  1. 让我们分解这些新信息:

    • "Device type: general purpose":这表明它是一台普通计算机,而不是路由器或打印机等专用设备。
    • "Running: Linux 2.6.X":Nmap 已确定这很可能是一个 Linux 系统,运行内核版本 2.6.X。
    • "OS details: Linux 2.6.32":这是对内核版本更具体的猜测。
  2. 在现实场景中,这些信息可以用于多种用途:

    • 攻击者可以利用这些信息针对与操作系统相关的特定漏洞。
    • 防御者可以确保系统已正确打补丁并得到保护。
    • 网络管理员可以维护系统清单,并确保所有系统都是最新的。

值得注意的是,操作系统检测并不总是 100% 准确。Nmap 根据系统对各种探测的响应做出最佳猜测,但防火墙和其他安全措施有时可能会干扰准确的检测。

扫描网络范围

在实际的网络环境中,你通常需要扫描多个 IP 地址或整个网段。这对于发现网络上的所有设备非常有用,这是网络管理员和安全专业人员的常见任务。让我们尝试扫描一个网络范围。

  1. 我们将基于我们一直在使用的 IP 地址扫描一个小范围的 IP 地址。让我们扫描范围 172.19.0.1-20
nmap 172.19.0.1-20

此命令告诉 Nmap 扫描从 172.19.0.1172.19.0.20 的所有 IP 地址。

  1. 现在,让我们扫描整个子网。我们将使用 CIDR 表示法来指定网络。运行以下命令,将 <YOUR_NETWORK> 替换为你的网络地址:
nmap YOUR_NETWORK /24

例如:

nmap 172.19.0.0/24

NMAP 扫描 172.19.0.0/24 网络范围内的所有 256 个 IP 地址(其中 /24 表示 24 位子网掩码),以查找活动主机和开放端口。

  1. 要将此扫描的输出保存到文件中以供后续分析,我们可以使用 -oN 标志后跟文件名。运行:
nmap 172.19.0.0/24 -oN network_scan.txt

这将执行扫描并将结果保存到当前目录中名为 network_scan.txt 的文件中。

  1. 让我们检查文件的内容:
cat network_scan.txt

输出将显示范围内每个响应主机的结果。以下是你可能会看到的示例:

## Nmap 7.80 scan initiated Fri Sep 27 15:45:29 2024 as: nmap -oN network_scan.txt 172.19.0.0/24
Nmap scan report for iZrj9gvdh5xn02z8rmsn9mZ (172.19.0.1)
Host is up (0.00045s latency).
Not shown: 997 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
111/tcp   open  rpcbind
10010/tcp open  rxapi

Nmap scan report for node_openresty.external (172.19.0.2)
Host is up (0.00047s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for 36cff415ddd9.external (172.19.0.3)
Host is up (0.00045s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus

Nmap scan report for 041bf22f47a1.external (172.19.0.4)
Host is up (0.00050s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus

Nmap scan report for 2299e8eff7e5.external (172.19.0.5)
Host is up (0.00048s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus

## Nmap done at Fri Sep 27 15:45:32 2024 -- 256 IP addresses (5 hosts up) scanned in 3.25 seconds
  1. 让我们解释一下这个输出:

    • Nmap 扫描了 172.19.0.0/24 网络中的所有 256 个 IP 地址。
    • 它发现了 5 个活动且响应正常的主机。
    • 对于每个主机,它列出了检测到的开放端口和服务。
  2. 在现实场景中,这种类型的扫描对于以下情况非常宝贵:

    • 网络管理员:维护其网络上活动主机和服务的清单。
    • 安全专业人员:识别网络上的所有设备,并确保它们都得到记录和保护。
    • 攻击者:识别网络上的潜在目标,这就是为什么保护网络免受未经授权的扫描至关重要。

请记住,虽然这些知识非常强大,但必须负责任地使用它。在扫描任何不属于你自己的网络之前,务必获得适当的授权。

总结

恭喜!你已经迈出了进入网络扫描和安全世界的第一步。在本实验中,你获得了使用 Nmap 的实践经验,这是网络专业人员工具包中最强大的工具之一。让我们回顾一下你所学到的内容:

  1. 安装:你安装了 Nmap,这是设置你的网络安全工具包的关键技能。
  2. 基本用法:你执行了一个简单的扫描,学习了如何识别单个主机上的开放端口和服务。
  3. 操作系统检测:你使用了 Nmap 的操作系统检测功能,了解了这些信息对攻击者和防御者的重要性。
  4. 网络探索:你扫描了一系列 IP 地址和整个子网,模拟了专业人员如何绘制网络地图。
  5. 输出管理:你学习了如何将扫描结果保存到文件中以供后续分析,这是记录网络审计的重要技能。

本实验为你提供了网络扫描的基础知识,但关于 Nmap 和网络安全还有很多内容需要学习。为了继续你的学习之旅并加深理解,我们推荐你参加 https://labex.io/courses/quick-start-with-nmap 上的全面课程《Nmap 快速入门》。

Nmap 快速入门

该课程将基于你今天学到的技能,并为你介绍更高级的 Nmap 技术和网络安全概念。

请记住,你获得的知识非常强大,应该负责任地使用。在扫描任何网络之前,务必确保获得适当的授权,并利用你的技能在数字世界中促进安全和道德实践。

继续学习,保持好奇心,祝你扫描愉快!