介绍
在网络安全领域,了解你的网络基础设施对于维护安全至关重要。Nmap (Network Mapper) 是一个广泛使用的开源工具,它使安全专业人员能够发现计算机网络上的主机和服务。本教程将指导你使用 Nmap 同时扫描多个 IP 地址的过程,使你能够高效地绘制你的网络地图并识别潜在的安全问题。
通过完成这个实验,你将了解如何安装 Nmap,执行基本扫描,使用不同的技术定位多个 IP 地址,以及解释结果。这些技能构成了网络安全评估中网络侦察的基本组成部分,并且对于防御性和进攻性安全操作都很有价值。
安装 Nmap 并执行你的第一次扫描
在第一步中,我们将在 Ubuntu 系统上安装 Nmap,并执行一个基本扫描以验证它是否正常工作。
安装 Nmap
Nmap 在 Ubuntu 存储库中可用,这使得安装变得很容易。打开一个终端并运行以下命令:
## 更新软件包列表
sudo apt update
## 安装 Nmap
sudo apt install nmap -y
此命令将下载并安装 Nmap 以及任何必需的依赖项。让我们通过检查 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 libssh2-1.8.0 libz-1.2.11 libpcre-8.39
Compiled without: nmap-update npcap ipv6
Available nsock engines: epoll poll select
理解 Nmap 基本语法
Nmap 的基本语法是:
nmap [scan type] [options] [target]
其中:
[scan type]指定要执行的扫描类型(例如,TCP SYN 扫描)[options]是用于自定义扫描的附加参数[target]是要扫描的主机或网络
你的第一次扫描:扫描本地机器
让我们从对你的本地机器进行简单扫描开始。这是一种安全的方式来测试 Nmap,而无需扫描外部网络:
nmap localhost
此命令扫描你的本地机器上最常见的 1000 个 TCP 端口。你应该看到类似于这样的输出:
Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-23 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
输出显示:
- 扫描开始时间
- 正在扫描的目标
- 主机状态(up 或 down)
- 带有其服务名称的开放端口
- 扫描统计信息
请注意,你看到的具体开放端口可能因你的系统配置而异。
理解端口状态
Nmap 将端口分为不同的状态:
open:应用程序正在此端口上主动接受连接closed:端口可访问,但没有应用程序正在侦听它filtered:由于防火墙阻止访问,Nmap 无法确定端口是否打开unfiltered:端口可访问,但 Nmap 无法确定它是打开还是关闭open|filtered:Nmap 无法确定端口是打开还是被过滤closed|filtered:Nmap 无法确定端口是关闭还是被过滤
在你的扫描结果中,大多数端口可能会被列为 "closed",而少数端口会为你的系统上运行的服务显示 "open"。
使用不同方法扫描多个 IP 地址
现在我们已经安装了 Nmap 并执行了我们的第一次扫描,让我们探索同时扫描多个 IP 地址的不同方法。这对于需要有效评估多个系统的网络管理员和安全专业人员特别有用。
方法 1:使用 IP 范围
扫描多个 IP 地址的最简单方法之一是指定一个 IP 范围。让我们创建一个小的虚拟网络以安全地进行扫描。
首先,让我们看看我们当前的网络接口:
ip addr show
现在,我们将扫描本地网络上的 IP 地址范围。为了演示目的,我们将使用一个小的范围:
nmap 127.0.0.1-5
此命令扫描 5 个 IP 地址:127.0.0.1、127.0.0.2、127.0.0.3、127.0.0.4 和 127.0.0.5。你将看到对扫描做出响应的每个主机的输出。通常,只有 127.0.0.1 (localhost) 会响应。
方法 2:使用 CIDR 符号
另一种指定多个目标的常用方法是使用 CIDR (Classless Inter-Domain Routing) 符号,这是一种简洁地指定 IP 地址范围的方式。
让我们扫描本地环回范围:
nmap 127.0.0.0/24
此命令扫描从 127.0.0.0 到 127.0.0.255 的 256 个 IP 地址。 /24 表示 IP 地址的前 24 位是固定的,而最后 8 位是变化的。
为了加快扫描速度并仅专注于查找活动主机而不进行端口扫描,我们可以使用 -sn 选项:
nmap -sn 127.0.0.0/24
这执行一个 ping 扫描,它只确定主机是否在线,而不扫描它们的端口。你应该看到类似这样的输出:
Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-23 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
Nmap done: 256 IP addresses (1 host up) scanned in 2.66 seconds
方法 3:使用 IP 地址列表
对于特定的非连续 IP 地址,你可以创建一个包含目标的 文件并使用 -iL 选项。
让我们创建一个包含几个 IP 地址的文件:
echo "127.0.0.1
127.0.0.2
127.0.0.5" > targets.txt
现在,扫描这些特定目标:
nmap -iL targets.txt
此命令从 targets.txt 文件中读取 IP 地址并扫描每个地址。
方法 4:组合多个目标规范
Nmap 允许你在单个命令中组合不同的目标方法。例如:
nmap 127.0.0.1 127.0.0.5-10 127.0.0.0/29
此命令扫描:
- 单个 IP 地址 127.0.0.1
- IP 范围从 127.0.0.5 到 127.0.0.10
- CIDR 范围 127.0.0.0/29(包括 127.0.0.0 到 127.0.0.7)
优化扫描速度
扫描多个目标时,扫描时间可能会显着增加。Nmap 提供了用于控制扫描时间和提高效率的选项:
nmap -T4 127.0.0.0/24
-T4 选项设置一个 "aggressive" (激进) 的计时模板,这会加快扫描速度。计时模板的范围从 0 (paranoid,偏执) 到 5 (insane,疯狂),较高的值会导致扫描速度更快但可能不太可靠。对于例行扫描,-T4 在速度和可靠性之间提供了良好的平衡。
理解 Nmap 输出并保存结果
在进行网络扫描时,了解如何解释结果并保存它们以供进一步分析或报告非常重要。在这一步中,我们将探索不同的 Nmap 输出格式以及如何保存扫描结果。
理解详细的 Nmap 输出
让我们对 localhost 执行更详细的扫描,以更好地理解 Nmap 的输出:
nmap -v localhost
-v 选项启用详细输出,提供有关扫描的更多信息。你应该看到类似于以下的输出:
Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-23 10:30 UTC
Initiating Ping Scan at 10:30
Scanning localhost (127.0.0.1) [2 ports]
Completed Ping Scan at 10:30, 0.00s elapsed (1 total hosts)
Initiating Connect Scan at 10:30
Scanning localhost (127.0.0.1) [1000 ports]
Discovered open port 22/tcp on 127.0.0.1
Discovered open port 80/tcp on 127.0.0.1
Discovered open port 443/tcp on 127.0.0.1
Completed Connect Scan at 10:30, 0.02s elapsed (1000 total ports)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
此输出提供:
- 扫描进度
- 实时发现的每个开放端口
- 带有开放端口和服务的最终扫描报告
- 计时统计信息
将扫描结果保存到文件
Nmap 可以将结果保存为多种格式,这对于文档记录、进一步分析或与团队成员共享非常有用。
正常输出格式
要将扫描结果保存为 Nmap 的标准输出格式:
nmap localhost -oN normal_output.txt
这将创建一个名为 normal_output.txt 的文件,其中包含与终端中显示的格式相同的扫描结果。
XML 输出格式
XML 输出对于扫描结果的程序化处理很有用:
nmap localhost -oX xml_output.xml
这将创建一个 XML 文件,可以由其他工具或脚本解析。
Grepable 输出格式
为了便于使用命令行工具(如 grep)进行解析:
nmap localhost -oG grep_output.txt
这种格式对于使用 grep 等工具快速提取特定信息特别有用。
一次保存所有格式
要同时保存所有三种格式的输出:
nmap localhost -oA scan_results
这将创建三个文件:scan_results.nmap、scan_results.xml 和 scan_results.gnmap。
查看保存的结果
让我们检查其中一个保存的输出文件:
cat normal_output.txt
你应该看到之前保存到此文件的 Nmap 扫描结果。
将输出选项与多 IP 扫描相结合
现在,让我们通过扫描多个 IP 并保存结果来结合我们所学到的知识:
nmap 127.0.0.1-5 -oN multiple_hosts.txt
此命令扫描 5 个 IP 地址并将结果保存到 multiple_hosts.txt。
让我们检查这些结果:
cat multiple_hosts.txt
你将看到所有指定 IP 地址的扫描结果。通常,在此示例中,只有 127.0.0.1 将显示为 "up" 且具有开放端口。
添加服务版本检测
为了收集有关在开放端口上运行的服务的更多信息,我们可以使用 -sV 选项:
nmap -sV localhost -oN service_scan.txt
这执行服务版本检测并将结果保存到 service_scan.txt。
让我们看看这提供了哪些额外信息:
cat service_scan.txt
输出现在应包括已检测服务的版本信息,这对于安全评估很有价值,因为特定版本可能存在已知的漏洞。
用于网络评估的高级扫描选项
现在我们了解了 Nmap 的基础知识以及如何扫描多个目标,让我们探索一些高级扫描选项,这些选项对于网络安全评估特别有用。
端口选择和扫描类型
默认情况下,Nmap 扫描最常见的 1000 个 TCP 端口。但是,你可以自定义要扫描的端口。
扫描特定端口
要扫描特定端口:
nmap -p 22,80,443 localhost
此命令仅扫描端口 22、80 和 443。
要扫描一系列端口:
nmap -p 20-25 localhost
这将扫描端口 20 到 25。
要扫描所有 65535 个 TCP 端口:
nmap -p- localhost
请注意,扫描所有端口需要更长的时间。
使用不同的扫描类型
Nmap 支持各种扫描技术。默认值是 TCP SYN 扫描 (-sS),但这需要 root 权限。如果没有 root 权限,Nmap 将使用 TCP connect 扫描 (-sT)。
让我们明确地尝试 TCP connect 扫描:
nmap -sT localhost
对于更隐蔽的扫描(需要 root 权限):
sudo nmap -sS localhost
要扫描 UDP 端口(这通常被忽略但对安全很重要):
sudo nmap -sU -p 53,161,162 localhost
这将扫描 UDP 端口 53 (DNS)、161 和 162 (SNMP)。
操作系统检测和版本扫描
为了获得更全面的信息,让我们结合操作系统检测和服务版本扫描:
sudo nmap -sS -O -sV localhost
-O 选项尝试识别目标的操作系统。这为安全评估提供了有价值的信息,因为不同的操作系统可能具有不同的漏洞。
让我们分解每个选项的作用:
-sS:执行 SYN 扫描(需要 root)-O:尝试识别目标的操作系统-sV:探测开放端口以确定服务/版本信息
输出将包括有关目标上运行的操作系统和服务版本的详细信息。
使用 Nmap 脚本
Nmap 包含一个强大的 Nmap 脚本引擎 (NSE),可以执行各种任务,从高级服务检测到漏洞扫描。
让我们运行一个基本脚本,该脚本检查常用服务:
nmap --script=default localhost
对于更注重安全的扫描:
nmap --script=vuln localhost
这将针对目标运行漏洞检测脚本,这可以识别常见的安全问题。
计时和性能选项
扫描多个目标时,优化扫描性能变得至关重要。我们已经看到了 -T 选项,但还有更精细的控制可用。
nmap -T4 --max-rtt-timeout 200ms --min-rate 1000 127.0.0.1/24
此命令:
- 使用 "aggressive" (激进) 的计时模板 (
-T4) - 将最大往返超时设置为 200ms
- 设置每秒 1000 个数据包的最小速率
这些设置可以显着加快对多个主机的扫描速度,尽管它们在拥塞或高延迟的网络上可能不太可靠。
结合所有内容进行全面扫描
让我们结合多种技术来全面扫描我们的本地网络:
sudo nmap -sS -sV -O -p 1-1000 --script=default -T4 -oA comprehensive_scan 127.0.0.1
此命令执行:
- SYN 扫描
- 服务版本检测
- 操作系统检测
- 扫描端口 1-1000
- 运行默认脚本
- 使用激进的计时
- 使用前缀 "comprehensive_scan" 保存所有格式的结果
让我们检查结果:
cat comprehensive_scan.nmap
这种全面的扫描提供了有关目标系统的丰富信息,包括开放端口、正在运行的服务、服务版本和潜在漏洞。
道德考量和最佳实践
在结束之前,务必强调,Nmap 应该仅用于你明确允许扫描的网络。未经授权的扫描可能是非法的,并且可能被视为敌对行为。
要遵循的一些最佳实践:
- 始终在扫描任何网络或系统之前获得许可
- 尽可能使用不太激进的扫描以最大限度地减少网络影响
- 注意假阳性和假阴性的可能性
- 记录你的扫描活动以供参考和问责
- 尊重所发现信息的隐私和机密性
总结
在本实验中,你学习了如何使用 Nmap 有效地同时扫描多个 IP 地址,这是网络管理员和网络安全专业人员的一项关键技能。我们涵盖了:
- 安装 Nmap 并执行基本扫描以了解其核心功能
- 指定多个目标的各种方法,包括 IP 范围、CIDR 符号和目标列表
- 如何以不同的格式解释和保存扫描结果以供进一步分析
- 高级扫描技术,可更深入地了解网络服务和潜在漏洞
这些技能构成了网络侦察和安全评估的基础。通过有效地扫描多个 IP 地址,你可以快速绘制网络地图,识别正在运行的服务,并发现潜在的安全弱点。
要进一步发展你的 Nmap 技能,请考虑探索:
- 用于重点安全评估的更专业的 NSE 脚本
- Nmap 与其他安全工具的集成
- 使用脚本自动扫描以进行定期安全监控
- 开发用于特定扫描需求的自定义 NSE 脚本
请记住,像 Nmap 这样的网络扫描工具应始终负责任且合乎道德地使用,并获得扫描目标系统的适当授权。



