Nmap 是 Network Mapper 的缩写,是一个功能强大且广泛使用的开源工具,用于网络探索、管理和安全审计。学习使用Nmap 命令有效地是网络管理员、系统工程师和任何参与网络安全的人的一项关键技能,可以进行富有洞察力的网络分析和漏洞发现。
与其他重要的命令行实用程序类似,例如,, 和,掌握 Nmap 可以显着扩展您的 Linux 工具包。本指南将引导您完成基本的适合初学者的 Nmap 命令,涵盖基础和高级扫描技术以及实际示例。您将学习绘制家庭网络、审核服务器安全、解决连接问题,并为专业网络分析或网络安全职业奠定基础。
仅扫描您拥有或具有明确书面测试许可的网络和系统。未经授权的网络扫描在大多数司法管辖区都是非法的,并且违反了计算机欺诈法。仅在您自己的网络或授权的实验室环境中执行本指南中的练习。
确认Nmap安装状态
一般来说,大多数 Linux 发行版在其默认存储库中都包含 Nmap,使安装变得简单。在继续本指南中的示例之前,请验证您的系统上是否已安装 Nmap。
检查Nmap是否安装:
nmap --version如果安装了 Nmap,您将看到版本信息;否则,请使用您的发行版的包管理器安装它:
使用包管理器安装 Nmap
基于 Ubuntu 和 Debian 的发行版:
sudo apt update
sudo apt install nmapFedora、RHEL、Rocky Linux 和 AlmaLinux:
sudo dnf install nmapArch Linux 和 Manjaro:
sudo pacman -S nmap开放SUSE:
sudo zypper install nmap阿尔卑斯Linux:
sudo apk add nmap根图:
sudo emerge --ask net-analyzer/nmap无效的Linux:
sudo xbps-install -S nmap探索详细的安装指南
此外,有关特定于您的发行版的更详细的安装说明,包括故障排除和高级设置选项,请参阅综合指南:,, 和。
了解 Nmap:它是什么以及为什么它很重要
Nmap 如何探测您的网络
首先,如果您是 Nmap 的新手,请将其想象为扫描网络并报告系统响应的命令行雷达。它不是直观地绘制地图,而是列出设备、它们公开的服务以及这些服务的行为方式。
此外,Nmap 的核心是将精心设计的探测发送到目标系统并记录回复。通过调整这些探针,您可以从快速可用性检查转向深入的服务指纹识别,无论您是在清点家庭实验室还是准备进行安全审计,该工具都非常有价值。
Nmap 命令语法解释
基本语法:
nmap [scan_type] [scan_options] <target_specification>- 扫描类型:改变 Nmap 探测主机方式的可选标志,例如
-sS对于 TCP SYN 扫描或-sU用于 UDP 扫描。 - 扫描选项:调整定时、输出或检测功能的修饰符,包括诸如
-p(端口),-v(冗长),或-oN(保存结果)。 - <target_specification>:您要扫描的主机。提供单个 IP 地址、主机名、CIDR 范围或列出目标的输入文件。
示例扫描输出和基本任务
简单的例子:
nmap scanme.nmap.org因此,此默认扫描会检查主机上 1,000 个最常见的 TCP 端口并报告哪些端口已应答。这是在添加高级标志之前确认远程服务是否响应的最快方法。
| 任务 | 使用选项 | 他们做什么 |
|---|---|---|
| 寻找直播主播 | -sn | 跳过端口扫描并发送轻量级探测以查看哪些系统响应。 |
| 限制范围 | -p 22,80,443 | 仅扫描您列出的端口,而不是每个常见端口。 |
| 识别服务 | -sV | 指纹打开端口以显示服务名称和版本号。 |
| 猜测操作系统 | -O | 将目标响应与 Nmap OS 指纹数据库进行比较。 |
| 保存结果 | -oN report.txt | 将正常输出写入文件以供以后分析或报告。 |
总体而言,Nmap 是免费、开源的,并且可在 Linux、macOS 和 Windows 上使用。它的深度来自于将这些选项堆叠在一起,因此一旦您熟悉了语法,您就可以组合标志来构建针对安全审核、故障排除会话或日常清单任务量身定制的扫描。默认情况下,一个基本的nmap target当以 root 权限运行时,命令尝试对最常见的端口进行 TCP SYN 扫描;如果没有提升权限,它会退回到 TCP 连接扫描,这种扫描速度较慢,但不需要特殊权限。
实际用例:何时以及为何使用 Nmap
最终,了解实际场景有助于阐明 Nmap 如何适应现实世界的任务:
- 家庭网络库存:发现连接到家庭网络的所有设备,以识别未知或未经授权的设备。例如,使用
nmap -sn 192.168.1.0/24无需密集端口扫描即可查看连接的内容。 - 服务器安全审计:在将服务器部署到生产环境之前,对其进行扫描以验证仅公开预期的服务。例如,运行
sudo nmap -sV -p- your_server_ip检查所有端口和服务版本。 - 连接故障排除:当服务没有响应时,使用 Nmap 验证端口是否打开以及正在运行的内容。例子:
nmap -p 22,80,443 target_ip快速检查 SSH 和 Web 服务。 - 漏洞评估准备:识别网络设备上运行的软件版本以检查已知漏洞。在这种情况下,
-sV标志显示您可以与 CVE 数据库交叉引用的版本号。 - 学习网络协议:在实验室环境中进行练习,了解不同协议如何响应扫描,从而为网络安全工作奠定基础知识。
使用 Nmap 命令指定目标
因此,Nmap 提供了灵活的方法来定义扫描目标。以下是适合初学者的最常见方法:
用于扫描单个主机(IP 或主机名)的 Nmap 命令
通常,最简单的 Nmap 命令针对单个主机,例如 IP 地址或主机名。
命令:
nmap 192.168.1.1或者,使用主机名:
nmap scanme.nmap.org它的作用:
此命令对指定主机执行默认扫描(如果以 root 权限运行,则通常为 TCP SYN 扫描,否则为 TCP 连接扫描)。它旨在识别最常见的开放 TCP 端口以及侦听它们的任何服务。如果给定主机名,Nmap 首先使用 DNS 将其解析为 IP 地址。请参阅有关目标规范的官方文档了解更多详情。
示例输出(缩写):
Starting Nmap X.XX ( https://nmap.org ) Nmap scan report for 192.168.1.1 Host is up (0.0020s latency). Not shown: 997 filtered 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 X.XX seconds
解释输出:
Host is up:确认目标在线且有响应。Not shown: 997 filtered ports:表示在扫描的默认 1000 个端口中,有 997 个未响应或无法明确确定其状态(通常是由于防火墙)。PORT STATE SERVICE:列出开放端口、其状态(例如开放)以及与该端口关联的公共服务(例如端口 22 的 SSH)。
用于扫描整个子网的 Nmap 命令(CIDR 表示法)
同样,为了扫描整个网段,通常使用 CIDR(无类域间路由)表示法。
命令:
nmap 192.168.1.0/24它的作用:
扫描指定子网内的所有 256 个 IP 地址(192.168.1.0到192.168.1.255在本例中)来识别活动主机及其开放端口。这/24表示IP地址的前24位是固定的,定义网络部分。这对于发现本地网络上的所有设备非常有价值。
扫描不属于您的子网时要小心。在扫描您自己的实验室或家庭环境之外的网络之前,请务必获得许可。使用虚拟机设置测试网络以安全地进行练习,而 VirtualBox 或 VMware 等工具可让您创建隔离网络以进行学习。
用于八位位组范围扫描的 Nmap 命令
此外,为了比 CIDR 进行更精细的控制,您可以指定 IP 地址的各个部分(八位字节)的范围。
命令:
nmap 192.168.1.100-150它的作用:
该命令扫描 IP 地址192.168.1.100到192.168.1.150。您可以在任何八位位组中使用范围,例如,192.168.1-3.100会扫描192.168.1.100,192.168.2.100, 和192.168.3.100。这对于在较大网络中定位特定的 IP 块非常有用。
用于从文件扫描目标的 Nmap 命令 (`-iL`)
或者,如果您有很长的目标列表,您可以将它们保存在文件中并告诉 Nmap 从中读取。
文件内容(例如,targets.txt):
192.168.1.1 192.168.1.2 scanme.nmap.org 10.0.0.0/24
命令:
nmap -iL targets.txt它的作用:
Nmap 读取每一行targets.txt并扫描指定的主机或网络。每个条目可以采用 Nmap 在命令行上接受的任何格式(IP、主机名、CIDR、八位字节范围)。这对于扫描许多目标非常方便,而且不会使命令行变得混乱。了解有关从列表输入的更多信息。
基本 Nmap 主机发现命令
通常,在端口扫描之前,Nmap 会尝试发现哪些主机在线。您可以自定义此行为。
用于主机发现的 Nmap Ping 扫描命令 (`-sn`)
有时,您只需要确定哪些设备在线,而不需要执行端口扫描。在这种情况下,ping 扫描会派上用场。
命令:
nmap -sn 192.168.1.0/24它的作用:
具体来说,-sn标志(以前-sP)告诉 Nmap 仅执行 ping 扫描(主机发现)。它向指定子网中的每个 IP 发送 ICMP 回显请求(以及其他探测,例如到端口 443 的 TCP SYN、到端口 80 的 TCP ACK,以及默认情况下的 ICMP 时间戳请求),以识别活动设备。重要的是,它不会扫描开放端口,这使得它比完整端口扫描更快、侵入性更小。有关 ping 扫描的详细信息可以在 Nmap 文档中找到。
样本输出:
Starting Nmap X.XX ( https://nmap.org ) Nmap scan report for 192.168.1.1 Host is up (0.0023s latency). MAC Address: XX:XX:XX:XX:XX:XX (Vendor Name) Nmap scan report for 192.168.1.2 Host is up (0.0018s latency). MAC Address: YY:YY:YY:YY:YY:YY (Another Vendor) Nmap done: 256 IP addresses (2 hosts up) scanned in X.XX seconds
解释输出:
- 在这种情况下,输出仅列出响应的主机,显示它们在线。
- 此外,如果Nmap可以确定它,它还会显示MAC地址和网络接口卡的供应商,这可以帮助识别本地网络上的设备类型。
Nmap 列表扫描命令(`-sL`):列出目标而不扫描
同样,要简单地列出 Nmap 将扫描的目标而不实际向其发送任何数据包,请使用列表扫描。
命令:
nmap -sL 192.168.1.0/29它的作用:
在此模式下,-sL选项告诉 Nmap 执行列表扫描。它将解析 DNS 名称(除非-n也使用)作为目标,然后简单地打印出它将扫描的主机列表。这对于快速检查您的目标规范并确保 Nmap 按预期解释您的目标范围非常有用,而不会对目标产生任何网络流量。 Nmap 在列出条目时仍会打印诸如“Host is up”之类的行,但摘要显示零个主机已启动,因为实际上没有发送任何探测。列表扫描使用方法请参考文档。
示例输出:
Starting Nmap X.XX ( https://nmap.org ) Host 192.168.1.0 is up. Host 192.168.1.1 is up. Host 192.168.1.2 is up. Host 192.168.1.3 is up. Host 192.168.1.4 is up. Host 192.168.1.5 is up. Host 192.168.1.6 is up. Host 192.168.1.7 is up. Nmap done: 8 IP addresses (0 hosts up) scanned in X.XX seconds
将所有主机视为在线的 Nmap 命令(`-Pn`)
同样,某些主机可能不会响应 Nmap 的默认发现探测(例如,由于防火墙阻止 ping)。在这种情况下,您可以告诉 Nmap 跳过主机发现阶段并直接进行端口扫描。
命令:
nmap -Pn 192.168.1.50它的作用:
这-Pn选项(其中“P”代表 Ping,“n”代表 no)指示 Nmap 假设所有指定的目标主机都在线并跳过初始主机发现阶段。当扫描已知已启动但受阻止发现探测的防火墙保护的主机时,这非常有用。没有-Pn,Nmap 可能会错误地将此类主机报告为已关闭。请参阅-Pn文档。
如果正常的 Nmap 扫描显示主机已关闭,但您确定它在线,请尝试添加
-Pn。但是,请注意,这将导致 Nmap 尝试对每个指定的 IP 进行完整端口扫描,如果大多数主机确实处于离线状态,这对于较大的目标范围可能会非常耗时。
高级 Nmap 命令和扫描技术
针对特定端口的 Nmap 端口扫描命令(`-p`)
通常,Nmap 最常见的用途之一是识别目标设备上的开放端口。您可以指定要扫描的端口。
命令:
nmap -p 1-1000 192.168.1.1它的作用:
这-p标志允许您指定端口范围。此命令扫描目标主机上的 TCP 端口 1 到 1000 (192.168.1.1)来查找哪些是打开的、关闭的或已过滤的。扫描所有 65,535 个端口(-p-或者-p 1-65535)可能非常耗时。有关端口规范的更多信息,请参见此处。
常见的端口扫描变化:
- 扫描特定端口:
nmap -p 22,80,443 target_ip - 扫描TCP端口:
nmap -p T:21,22,25,80,443 target_ip(默认为TCP) - 扫描UDP端口:
nmap -sU -p U:53,161,162 target_ip(注:UDP 扫描-sU通常比 TCP 扫描速度慢且可靠性低) - 扫描前 N 个端口:
nmap --top-ports 20 target_ip(扫描20个最常用端口) - 扫描所有端口:
nmap -p- target_ip或者nmap -p 1-65535 target_ip
提示:此外,集中端口范围或扫描顶部端口可以显着加快扫描速度并减少网络负载。这使您的扫描更加高效,并且不太可能触发网络入侵检测系统 (NIDS)。
Nmap 快速扫描命令 (`-F`)
或者,为了进行更快的扫描(检查比默认情况下更少的常用端口),请使用快速扫描模式。
命令:
nmap -F 192.168.1.1它的作用:
这-F选项选择 100 个最常见的端口进行扫描,如 Nmap 中列出的nmap-services文件。这比扫描默认 1000 个端口或所有 65,535 个端口要快得多。当您需要快速概览主机上最有可能运行的服务时,这是一个不错的选择。阅读 Nmap 文档中有关快速扫描模式的信息。
用于服务和版本检测的 Nmap 命令(`-sV`)
此外,了解端口是否打开很有用,但了解该端口上正在运行什么服务(及其版本)就更好了。这-sV标志启用服务和版本检测。
命令:
nmap -sV 192.168.1.1它的作用:
发现开放端口后,Nmap 使用-sV选项向这些端口发送一系列探测以确定特定服务(例如,Apache、OpenSSH)及其版本号。这对于漏洞评估至关重要,因为过时的软件版本通常具有已知的漏洞。有关版本检测的更多详细信息可以在此处找到。
示例输出:
Starting Nmap X.XX ( https://nmap.org ) Nmap scan report for 192.168.1.1 Host is up (0.0021s latency). Not shown: 997 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0) 80/tcp open http Apache httpd 2.4.54 ((Debian)) 443/tcp open ssl/http Apache httpd 2.4.54 ((Debian)) (SSL-Apache/2.4.54 OpenSSL/1.1.1n) Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Nmap done: 1 IP address (1 host up) scanned in XX.XX seconds
解释输出:
- 这
VERSION该列现在显示有关每个端口上运行的软件的详细信息。 Service Info可能会提供额外的详细信息,例如 Nmap 根据服务猜测的操作系统。- 唯一性说明:这些详细的版本信息是 Nmap 的一个关键区别,对于安全专业人员来说至关重要。例如,知道它是“OpenSSH 8.4p1”后,您可以检查该特定版本是否存在任何已知漏洞。
Nmap操作系统检测命令(`-O`)
同样,Nmap 可以尝试确定目标主机的操作系统。
命令:
nmap -O 192.168.1.1它的作用:
这-O选项启用操作系统检测。 Nmap 向目标发送一系列 TCP 和 UDP 探测并分析响应。它将这些响应与已知操作系统指纹的数据库进行比较(nmap-os-db)对目标操作系统做出有根据的猜测。这通常需要 root 或特权访问才能发送和接收原始数据包。了解有关 Nmap 操作系统检测功能的更多信息。
示例输出片段:
Device type: general purpose Running: Linux 5.X OS CPE: cpe:/o:linux:linux_kernel:5.x OS details: Linux 5.4 - 5.15 Network Distance: 1 hop
操作系统检测并不总是 100% 准确,尤其是在主机设有严格防火墙或运行不常见配置的情况下。它提供了一个猜测,这通常是非常好的。此外,
-A选项可实现操作系统检测、版本检测、脚本扫描和跟踪路由,是全面扫描的流行选择,但它的强度要大得多。
控制 Nmap 命令的输出
因此,理解和管理 Nmap 的输出是有效分析的关键。
用于增加扫描详细程度的 Nmap 命令(`-v`、`-vv`)
同时,要获取有关 Nmap 在扫描期间执行的操作的更多详细信息,请使用详细程度选项。
命令:
nmap -v 192.168.1.1或者了解更多详细信息:
nmap -vv 192.168.1.1它的作用:
这-v选项增加了详细级别,导致 Nmap 在扫描过程发生时打印更多有关扫描过程的信息。使用-vv进一步增加它。这有助于了解不同扫描阶段所花费的时间以及获取实时更新,特别是在较长扫描时。
用于将扫描输出保存到文件的 Nmap 命令(`-oN`)
同样,对于较长的扫描或保存记录,将输出保存到文件中也是必不可少的。
命令:
nmap -oN scan_results.txt 192.168.1.1它的作用:
这-oN选项将 Nmap 的“正常”格式的输出保存到指定文件(scan_results.txt)。这与您在屏幕上看到的人类可读的输出相同。 Nmap 还支持其他输出格式,例如 XML (-oX) 和 Grepable (-oG),这对于脚本编写和与其他工具的集成很有用,但是-oN非常适合初学者以后复习。您可以使用命令行工具,例如或者有效分析保存的结果。在 Nmap 文档中探索不同的输出格式。
为初学者排除常见 Nmap 问题
由于 Nmap 的灵活性,新用户在学习时经常会遇到可预见的挑战。以下是最常见问题的实用解决方案:
问题:当您知道主机在线时,“主机出现故障”
解决方案:使用-Pn标志跳过主机发现并强制端口扫描。许多防火墙会阻止 ICMP ping 请求,导致 Nmap 错误地将主机报告为离线。例子:nmap -Pn 192.168.1.50
问题:权限被拒绝或“操作不允许”错误
解决方案:某些扫描类型(例如 SYN 扫描)-sS)需要 root 权限才能发送原始数据包。运行 Nmapsudo:sudo nmap -sS target_ip。或者,使用 TCP 连接扫描(-sT)无需 root 即可工作,但更容易被检测到。
问题:扫描需要很长时间才能完成
解决方案:通过定位特定端口来缩小范围(-p 22,80,443),使用快速扫描模式(-F),或者扫描更少的主机。此外,UDP 扫描 (-sU)本质上较慢,因此请考虑仅扫描关键的 UDP 端口。添加计时模板以加快扫描速度:-T4用于激进的计时(但噪音更大)或-T3以达到平衡的性能。
问题:未显示服务版本信息
解决方案:确保您正在使用-sV用于版本检测的标志。某些服务可能不会响应版本探测,或者防火墙可能会过滤额外的流量。增加版本强度--version-intensity 9用于更积极的探测(默认值为 7,范围为 0-9)。
问题:出现“打开文件过多”错误
解决方案:减少并行度--max-parallelism 10或降低未完成探测的最大数量。扫描大型网络时会出现此错误;将扫描分成更小的子网块也有帮助。
使用 Nmap 命令的最佳实践(初学者)
安全开始使用 Nmap
- 从简单开始:首先使用基本扫描,例如单主机扫描(
nmap target_ip)和 ping 扫描(nmap -sn target_network)熟悉 Nmap 的界面和功能。一旦您感到舒服,您就可以深入研究更复杂的选项。 - 保持合法和道德:仅扫描您拥有或具有明确书面分析权限的网络和设备。未经授权的扫描可能会产生严重的法律后果,并且是不道德的。始终在法律和道德黑客原则的范围内运作。在许多司法管辖区,未经授权扫描网络违反了计算机欺诈和滥用法律。如有疑问,请使用虚拟机或备用硬件设置您自己的测试网络以安全地进行练习。
- 明智地使用目标范围:避免不必要地扫描大型的、不熟悉的网络(例如,使用
10.0.0.0/8除非你管理整个空间)。这可能会消耗大量带宽、触发安全警报,并且可能被视为有敌意。相反,请将扫描重点放在特定目标或更小的、定义明确的网络段上。使用-sL在扫描前验证目标范围。
了解扫描选项和技术
- 了解扫描类型:Nmap 提供多种扫描类型(TCP SYN、TCP Connect、UDP 等)。对于初学者,坚持使用默认扫描或简单的 TCP 扫描(例如,
nmap -sT target_ip对于 TCP 连接扫描(其隐蔽性较差,但如果 SYN 扫描被阻止,则可以更可靠)是一个很好的起点。 - 杠杆作用
-Pn谨慎地:如果您确定主机已启动但 Nmap 表示其已关闭,请尝试使用-Pn。但是,请注意,这将尝试对每个指定的 IP 进行端口扫描,这在大型且大多离线的范围内可能会很慢。 - 逐步组合选项:尝试一次组合一个标志(例如,第一个
-p 1-100,然后添加-sV喜欢nmap -p 1-100 -sV target_ip)以了解每个选项对扫描结果和持续时间的影响。
管理扫描性能和结果
- 阅读手册:Nmap 手册(
man nmap在您的终端中或通过在线Nmap.org)是一个极好的资源。虽然内容广泛,但参考它的具体选项可以澄清它们的用法。 - 要有耐心:一些扫描,尤其是涉及版本检测的扫描(
-sV)、操作系统检测(-O), UDP 扫描 (-sU),或脚本扫描(-sC),可能需要相当长的时间,特别是在远程或有防火墙的主机上。使用冗长的内容(-v)以查看进度。 - 使用
-F用于快速检查:当您需要快速概览时,nmap -F target_ip是你的朋友。 - 保存您的结果:对于任何重要的扫描,请使用保存输出
-oN filename.txt或者-oA basename(以 Normal、XML 和 Grepable 格式保存)。
初学者 Nmap 命令总结
您现在已经探索了 Nmap 的基础知识,并了解了它的命令如何揭示原本隐藏的网络见解。本指南涵盖了基本内容Nmap 命令范围从发现活动主机和开放端口到检测服务和操作系统。无论您是管理网络、开始网络安全职业,还是只是对您的家庭设置感到好奇,这些技能都构成了实用的基础。
当您获得信心时,请探索高级功能,例如主动扫描(-A)或 Nmap 脚本引擎(NSE)用于漏洞检测和更深入的分析。始终在获得明确许可的情况下以合乎道德的方式进行扫描,因为未经授权的扫描违反了法律和信任。练习上官方 Nmap 测试服务器 (scanme.nmap.org),使用虚拟机构建您自己的测试实验室,并咨询Nmap的官方文档当您需要特定选项的详细信息时。通过以下指南继续扩展您的 Linux 命令专业知识,, 和。
