Nmap基础知识入门与常用扫描技术详解
介绍 在这次实验里,你会接触到 Nmap 的基础用法。Nmap 是一款功能很强的网络扫描工具,在网络安全领域里,经常被用来做网络发现和安全审计。接下来要做的,就是学习如何用 Nmap 扫描网络、发现开放端口,以及识别目标主机上正在运行的服务。 掌握这些方法之后,你会建立起网络管理和安全评估所需
## 介绍
在这次实验里,你会接触到 Nmap 的基础用法。Nmap 是一款功能很强的网络扫描工具,在网络安全领域里,经常被用来做网络发现和安全审计。接下来要做的,就是学习如何用 Nmap 扫描网络、发现开放端口,以及识别目标主机上正在运行的服务。
掌握这些方法之后,你会建立起网络管理和安全评估所需的重要技能。更关键的是,这类动手实践带来的并不只是概念上的理解,而是能够真正用于现实场景的实用经验,帮助你更清楚地认识网络基础设施,以及其中需要重点关注的安全问题。
## 了解 Nmap 基础
Nmap,全称 Network Mapper,是一款开源工具,在网络发现和安全审计中占据着非常重要的位置。放在网络安全的语境里看,它很像一位侦探:通过原始 IP 数据包来收集信息。借助 Nmap,可以判断网络中有哪些主机在线,这些主机提供了哪些服务、运行着什么操作系统,以及其他一些关键特征。
接下来就从 Nmap 的基础开始,一步一步熟悉它的使用。首先,需要打开终端。终端可以理解为一个指挥中心,所有命令都从这里输入,并与系统进行交互。打开方式很简单:点击任务栏中的终端图标,或者直接按下 `Ctrl+Alt+T`。
终端打开后,先确认当前位置已经切换到项目目录。所谓项目目录,就是这次实验相关文件和操作所使用的指定文件夹。进入项目目录可以使用下面这条命令:
```bash
cd /home/labex/project
```
到这里,环境就算准备好了。下一步,需要先检查系统中安装的 Nmap 版本。这个信息不能忽略,因为不同版本之间,功能和具体行为可能会存在差异。。要检查版本,请运行以下命令:nn```bashnnmap --versionn```nn运行该命令后,你应该会看到类似以下的输出。此输出显示了系统上安装的 Nmap 版本,以及一些关于它所使用的编译库和可用的 nsock 引擎的信息。nn```nNmap version 7.80 ( https://nmap.org )nPlatform: x86_64-pc-linux-gnunCompiled with: liblua-5.3.3 openssl-1.1.1f libpcre-8.39 libpcap-1.9.1 nmap-libdnet-1.12 ipv6nCompiled without:nA vailable nsock engines: epoll poll selectn```nn现在,让我们进行第一次基本的 Nmap 扫描。我们将扫描本地主机(localhost),这就像是对自己的系统进行一次自检。这次扫描将帮助我们了解系统上哪些端口是开放的。端口就像建筑物中的门,不同的服务使用不同的端口进行通信。运行以下命令:nn```bashnnmap localhostn```nn此命令将扫描本地主机上最常见的 1000 个端口。运行该命令后,你应该会看到类似以下的输出。输出会告诉我们系统上哪些端口是开放的。例如,端口 22 通常用于 SSH(安全外壳协议),这是一种用于安全访问远程计算机的协议,而端口 80 用于 HTTP(Web 服务)。请记住,根据你系统上运行的服务,你的输出可能会显示不同的开放端口。nn```nStarting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 15:45 UTCnNmap scan report for localhost (127.0.0.1)nHost is up (0.000097s latency).nNot shown: 998 closed portsnPORT STATE SERVICEn22/tcp open sshn80/tcp open httpnnNmap done: 1 IP address (1 host up) scanned in 0.08 secondsn```nn在接下来的练习中,我们需要一个服务来进行扫描。我们将使用 netcat 创建一个简单的服务,netcat 是一个多功能的网络实用工具。这个服务将监听端口 8888。运行以下命令:nn```bashnnc -lk 8888 &n```nn让我们来分析一下这个命令。`-l` 选项告诉 netcat 监听传入的连接。`-k` 选项使 netcat 即使在客户端断开连接后也能继续监听。末尾的 `&` 符号将命令放在后台运行,这样你就可以继续使用终端执行其他任务。nn为了验证服务是否正在运行,我们可以使用以下命令:nn```bashnnetstat -tuln | grep 8888n```nn此命令会列出所有网络连接,并过滤输出以仅显示与端口 8888 相关的信息。如果服务正在运行,你应该会看到类似以下的输出:nn```ntcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTENn```nn此输出确认我们的模拟服务正在运行并监听端口 8888。n","need_verify":true,"has_solution":false},{"position":2,"title":"探索 Nmap 端口扫描技术","layout":"doc-workbench-split","text":"## 探索 Nmap 端口扫描技术nnNmap 是网络安全领域的强大工具,尤其在端口扫描方面表现出色。端口扫描是一种用于发现目标系统上哪些端口处于开放状态,以及这些端口上可能运行着哪些服务的方法。存在不同类型的端口扫描技术,每种技术都有其独特的优势和特定的使用场景。在这一步中,我们将通过扫描我们的模拟服务来探索其中一些技术。nn首先,让我们针对端口 8888 进行一次基本的 TCP 连接扫描。TCP 连接扫描是检查端口是否开放的一种直接方法。它通过尝试与目标端口建立完整的 TCP 连接来工作。如果连接成功,则认为该端口是开放的。nn```bashnnmap -p 8888 localhostn```nn在这个命令中,`-p` 选项用于指定我们要扫描的端口。这里,我们告诉 Nmap 扫描 `localhost`(即当前机器)上的端口 8888。运行此命令后,你应该会看到类似以下的输出:nn```nStarting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 15:50 UTCnNmap scan report for localhost (127.0.0.1)nHost is up (0.000097s latency).nnPORT STATE SERVICEn8888/tcp open sun-answerbooknnNmap done: 1 IP address (1 host up) scanned in 0.05 secondsn```nn此输出确认我们的端口 8888 是开放的。Nmap 还根据其内部数据库识别出了与该端口关联的服务名称。nn现在,让我们尝试进行一次 SYN 扫描。与 TCP 连接扫描相比,SYN 扫描是一种更隐蔽的方法。它不会完成完整的 TCP 连接,因此更不容易被入侵检测系统发现。nn```bashnsudo nmap -sS -p 8888 localhostn```nn`-sS` 选项指定我们要执行 SYN 扫描。这种类型的扫描需要 root 权限,因为它涉及发送原始网络数据包,这是一种底层操作。这就是我们使用 `sudo` 命令的原因。输出应该与之前的扫描类似:nn```nStarting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 15:55 UTCnNmap scan report for localhost (127.0.0.1)nHost is up (0.000097s latency).nnPORT STATE SERVICEn8888/tcp open sun-answerbooknnNmap done: 1 IP address (1 host up) scanned in 0.04 secondsn```nn接下来,让我们尝试进行一次 UDP 扫描。UDP(用户数据报协议)与 TCP 是不同类型的网络协议。TCP 提供可靠的、面向连接的服务,而 UDP 是无连接协议。我们将使用 UDP 扫描来检查端口 8888 是否对 UDP 流量开放。nn```bashnsudo nmap -sU -p 8888 localhostn```nn`-sU` 选项指定进行 UDP 扫描。UDP 扫描可能比 TCP 扫描更耗时,因为 UDP 没有像 TCP 那样内置的确认机制,所以 Nmap 必须等待更长时间才能确定端口是开放还是关闭。输出可能如下所示:nn```nStarting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 16:00 UTCnNmap scan report for localhost (127.0.0.1)nHost is up (0.000097s latency).nnPORT STATE SERVICEn8888/udp closed sun-answerbooknnNmap done: 1 IP address (1 host up) scanned in 0.15 secondsn```nn注意,UDP 端口显示为关闭。这是预期的,因为我们的 netcat 服务正在监听 TCP 连接,而不是 UDP。nn最后,让我们进行一次服务版本检测扫描。这种类型的扫描有助于我们识别特定端口上运行的具体服务及其版本。nn```bashnnmap -sV -p 8888 localhostn```nn`-sV` 选项告诉 Nmap 执行服务/版本检测。它会尝试向开放端口发送特定的探测包,并分析响应以确定服务及其版本。输出可能如下所示:nn```nStarting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 16:05 UTCnNmap scan report for localhost (127.0.0.1)nHost is up (0.000097s latency).nnPORT STATE SERVICE VERSIONn8888/tcp open http Apache httpdnService Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelnnNmap done: 1 IP address (1 host up) scanned in 6.51 secondsn```nn版本检测可能无法准确地将我们的 netcat 服务识别为真正的应用程序,但它展示了 Nmap 如何尝试确定开放端口上运行的内容。nn让我们将我们的发现保存到一个文件中,以备将来参考。保存扫描结果使我们能够稍后查看它们、与他人共享或用于进一步分析。nn```bashnnmap -p 8888 localhost > /home/labex/project/nmap_scan_results.txtn```nn在这个命令中,`>` 符号用于将 Nmap 扫描的输出重定向到位于 `/home/labex/project` 目录下名为 `nmap_scan_results.txt` 的文件中。nn你可以使用以下命令查看保存的结果:nn```bashncat /home/labex/project/nmap_scan_results.txtn```nn`cat` 命令用于显示文件的内容。nn至此,我们对不同的 Nmap 端口扫描技术的探索就结束了。n","need_verify":true,"has_solution":false},{"position":3,"title":"理解 Nmap 扫描的时间和性能模板","layout":"doc-workbench-split","text":"## 理解 Nmap 扫描的时间和性能模板nn在使用 Nmap 进行扫描时,扫描时间起着至关重要的作用。如果扫描过于激进,可能会被入侵检测系统(Intrusion Detection System,简称 IDS)察觉。IDS 是一种安全工具,用于监控网络流量中的可疑活动。激进的扫描还可能使目标系统不堪重负,导致其出现故障或无响应。另一方面,如果扫描速度过慢,完成扫描可能需要花费大量时间,这效率极低,尤其是在需要扫描大量目标时。nnNmap 提供了扫描时间模板,让你能够控制扫描的速度和激进程度。这些模板从 T0(偏执模式)到 T5(疯狂模式)不等。数字越大,扫描速度越快,也越激进。nn以下是对这些扫描时间模板的详细介绍:nn- `-T0`(偏执模式):这是一种极其缓慢的扫描时间模板。主要用于躲避入侵检测系统。通过非常缓慢地发送请求,触发 IDS 警报的可能性较小。n- `-T1`(隐秘模式):它和偏执模式有点像,都是走“慢速扫描”这条路,主要目的是绕开 IDS。区别在于,它发请求的节奏会比偏执模式快一点,但整体依然控制得比较慢,通常足以降低被发现的概率。`-T2`(礼貌模式):这个模板会主动放慢扫描速度,尽量减少对目标主机带宽和系统资源的占用。如果不希望给目标系统带来任何明显干扰,这通常是个更稳妥的选择。`-T3`(正常模式):这是 Nmap 默认使用的时间模板,在扫描速度和结果可靠性之间做了一个比较均衡的取舍,适合大多数常规扫描场景。`-T4`(激进模式):这个模板会明显提速,不过前提是网络本身足够快、也足够稳定。它会更快地发送请求,从而压缩整体扫描耗时。`-T5`(疯狂模式):这是非常激进的一档时间模板,默认假设你手里的网络环境极快。它会以很高的频率发出请求,扫描时间会大幅缩短,但与此同时,被检测到的风险也会随之上升。
先用默认的扫描时间模板 `T3` 试一次。这里配合 `time` 命令来统计扫描耗时。`time` 是一个很实用的小工具,可以显示某条命令执行时消耗的实际时间、用户时间以及系统时间。
```bash
time nmap -T3 -p 8888 localhost
```
执行这条命令后,看到的输出大致会是下面这样:
```
Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 16:10 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
PORT STATE SERVICE
8888/tcp open sun-answerbook
Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
real 0m0.115s
user 0m0.033s
sys 0m
```0.015sn```nn现在,让我们尝试使用更激进的扫描时间模板(T4)。同样使用 `time` 命令来测量扫描时间。nn```bashntime nmap -T4 -p 8888 localhostn```nn你可能会注意到扫描完成的速度略有加快。以下是输出可能的示例:nn```nStarting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 16:15 UTCnNmap scan report for localhost (127.0.0.1)nHost is up (0.000097s latency).nnPORT STATE SERVICEn8888/tcp open sun-answerbooknnNmap done: 1 IP address (1 host up) scanned in 0.04 secondsnnreal 0m0.105snuser 0m0.032snsys 0m0.014sn```nn为了更明显地看出扫描时间的差异,让我们尝试使用 T3 和 T4 模板扫描所有端口。nn```bashntime nmap -T3 -p- --max-retries 0 localhost | grep "open" > /dev/nulln```nn`-p-` 选项告诉 Nmap 扫描目标系统上的所有 65535 个端口。`--max - retries 0` 选项减少了每个端口扫描的重试次数,有助于加快扫描速度。我们将输出重定向到 `grep` 以过滤出仅包含 "open" 一词的行,然后将结果重定向到 `/dev/null`,这样我们就可以专注于扫描的时间。nn```bashntime nmap -T4 -p- --max-retries 0 localhost | grep "open" > /dev/nulln```nn你应该会注意到,在这些全面扫描中,扫描时间有更显著的差异。nn现在,按照原实验的要求,让我们将一次隐秘扫描的结果保存到一个文件中。我们将使用 T4 扫描时间模板来平衡速度和可靠性。nn```bashnnmap -T4 -p 8888 localhost > /home/labex/project/nmap_stealthy_scan.txtn```nn你可以使用 `cat` 命令查看保存的结果:nn```bashncat /home/labex/project/nmap_stealthy_scan.txtn```nnT4 扫描时间模板在大多数情况下是一个不错的选择,因为它在速度和可靠性之间取得了平衡。在进行安全评估时,根据你的具体需求和限制(如网络速度、目标系统的敏感性以及被检测到的风险)来调整扫描时间模板非常重要。n","need_verify":true,"has_solution":false},{"position":4,"title":"Nmap 输出格式与扫描结果分析","layout":"doc-workbench-split","text":"## Nmap 输出格式与扫描结果分析nnNmap 提供了多种输出格式,这些格式在不同场景下非常有用。例如,可用于记录扫描结果的文档编写、进行更深入的分析,或者与其他安全工具集成。在这一步中,我们将详细了解这些输出格式,并学习如何有效地分析扫描结果。nnNmap 主要支持以下几种输出格式:nn1. 普通输出(默认):这是一种人类可读的文本格式。它以一种易于直观理解的方式呈现扫描结果,类似于一份报告。n2. XML 输出(`-oX`):XML 是一种结构化格式。它以层次化和有组织的方式排列数据,非常便于程序解析和处理。n3. 可 grep 输出(`-oG`):这种格式设计为便于使用 `grep` 等工具和其他文本处理实用程序进行解析。它具有特定的结构,使得提取相关信息变得简单直接。n4. 所有格式(`-oA`):当你使用此选项时,Nmap 会同时以普通、XML 和可 grep 格式保存扫描结果。当你需要各种类型的输出以满足不同需求时,这非常有用。nn让我们逐个尝试这些格式:nn首先,我们将以普通格式保存一次扫描结果。以下命令将扫描 `localhost` 上的 8888 端口,并将结果保存到一个文本文件中:nn```bashnnmap -p 8888 localhost -oN /home/labex/project/normal_output.txtn```nn现在,让我们以 XML 格式保存一次扫描结果。此命令将对 `localhost` 的 8888 端口执行相同的扫描,并将结果保存到一个 XML 文件中:nn```bashnnmap -p 8888 localhost -oX /home/labex/project/xml_output.xmln```nn接下来,我们将以可 grep 格式保存一次扫描结果。下面的命令将扫描 `localhost` 上的 8888 端口,并将结果保存到一个可由 `grep` 轻松解析的文件中:nn```bashnnmap -p 8888 localhost -oG /home/labex/project/grep_output.txtn```nn最后,让我们以所有格式保存一次扫描结果。以下命令将为 `localhost` 的 8888 端口的同一次扫描创建三个不同格式的文件:nn```bashnnmap -p 8888 localhost -oA /home/labex/project/all_formatsn```nn这将创建三个文件:`all_formats.nmap`、`all_formats.xml` 和 `all_formats.gnmap`。nn现在,让我们检查这些文件,以了解它们格式上的差异。nn要查看普通输出,我们使用 `cat` 命令:nn```bashncat /home/labex/project/normal_output.txtn```nn你应该会看到标准的 Nmap 输出,这种输出人类易于阅读。以下是可能的输出示例:nn```n## Nmap 7.80 scan initiated Mon Oct 30 16:45:00 2023 as: nmap -p 8888 -oN /home/labex/project/normal_output.txt localhostnNmap scan report for localhost (127.0.0.1)nHost is up (0.00010s latency).nnPORT STATE SERVICEn8888/tcp open sun-answerbooknn## Nmap done at Mon Oct 30 16:45:00 2023 -- 1 IP address (1 host up) scanned in 0.04 secondsn```nn要查看 XML 输出,我们同样使用 `cat` 命令:nn```bashncat /home/labex/project/xml_output.xmln```nn这种格式是为便于程序解析而设计的。以下是 XML 输出的示例:nn```xmlnnnn n n n nnn n n n n n n n n n n```nn要查看可 grep 输出,我们再次使用 `cat` 命令:nn```bashncat /home/labex/project/grep_output.txtn```nn这种格式设计为便于使用 `grep` 等工具进行解析。以下是可 grep 输出的示例:nn```n## Nmap 7.80 scan initiated Mon Oct 30 16:45:15 2023 as: nmap -p 8888 -oG /home/labex/project/grep_output.txt localhostnHost: 127.0.0.1 (localhost) Status: UpnHost: 127.0.0.1 (localhost) Ports: 8888/open/tcp//sun-answerbook///n## Nmap done at Mon Oct 30 16:45:15 2023 -- 1 IP address (1 host up) scanned in 0.04 secondsn```nn让我们练习使用 `grep` 从可 grep 输出中提取特定信息。以下命令将显示所有包含开放端口的行:nn```bashngrep "open" /home/labex/project/grep_output.txtn```nn输出应该是:nn```nHost: 127.0.0.1 (localhost) Ports: 8888/open/tcp//sun-answerbook///n```nn你还可以使用更复杂的过滤器。以下命令仅提取开放端口的端口号:nn```bashngrep -E "Ports:.*open" /home/labex/project/grep_output.txt | cut -d':' -f3 | cut -d'/' -f1n```nn输出将是:nn```n 8888n```nn这些不同的输出格式使你能够将 Nmap 扫描结果与其他工具和工作流程集成,使其成为你安全工具包中多功能的一部分。n","need_verify":true,"has_solution":false},{"position":5,"title":"总结","layout":"doc-fullscreen","text":"## 总结nn在本次实验中,你学习了强大的网络扫描和安全评估工具 Nmap 的基础知识。你首先掌握了 Nmap 的基本用法,例如扫描主机和识别开放端口。随后,你探索了各种端口扫描技术,如 TCP 连接扫描、SYN 扫描和 UDP 扫描,每种技术都有独特的优势和适用场景。nn你还练习了使用扫描时间模板来平衡扫描速度和隐蔽性。最后,你学会了以不同格式保存扫描结果,并使用文本处理工具对其进行分析。这些技能为网络发现、安全评估和漏洞识别奠定了基础。Nmap 对于网络管理员、安全专业人员和道德黑客来说至关重要。请记住,要负责任且合乎道德地使用这些工具,在扫描陌生网络或系统之前,务必获得适当的授权。n","need_verify":false,"has_solution":false}
来源:https://labex.io/zh/tutorials/nmap-learn-nmap-fundamentals-and-scanning-techniques-415937
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。
相关推荐
补充同频道和同主题内容,方便继续浏览更多相关内容。
同类最新
继续查看同栏目最近更新的文章。
DDoS攻击的三大主要形式:原理、特征与防御重点
DDoS攻击主要分为基于流量(Volume)、基于应用层(Application)和基于协议(Protocol)三种形式。流量型攻击通过海量数据淹没带宽;应用层攻击利用Web漏洞耗尽服务器资源;协议层攻击则利用TCP握手缺陷导致系统挂起。了解这些原理是制定针对性防御策略的基础。
如何有效预防和缓解DDoS攻击:5大核心策略详解
面对DDoS攻击,单纯增加带宽已非长久之计。本文详解5大核心防护策略:优化网络硬件配置、建立DNS冗余机制、部署透明缓解技术、引入负载平衡器及专用Anti-DDoS模块。通过合理组合这些技术手段,可有效抵御SYN泛洪、Slowloris等常见攻击,保障业务连续性与网站可用性。
DDoS防护四大误区:CDN、防火墙与黑名单的局限性解析
许多企业误以为CDN、防火墙或黑名单能完全抵御DDoS攻击。本文深入解析四大常见误区:CDN仅提供部分缓解、静态黑名单易失效、防火墙算力有限且可能成为目标、阈值警报仅具滞后性。了解这些局限性,有助于构建更立体的防御体系,避免在攻击发生时措手不及。
常见DDoS攻击类型详解:原理、特征与防御策略
本文详细解析四种常见DDoS攻击类型:SYN Flood利用TCP三次握手缺陷耗尽资源;UDP Flood通过海量数据包造成带宽拥塞;ICMP Flood利用Ping请求消耗系统算力;应用层Flood针对Web脚本进行高频请求。了解其原理是制定有效防御策略的基础。
如何有效抵御DDOS攻击:4种核心防护方案解析
面对DDOS攻击,企业需构建多层防护体系。本文详解四大核心策略:利用反向路由器查询进行流量清洗,通过GCDN智能分配节点隐藏源站IP,部署负载均衡硬件分担压力,以及接入高防机房抵御数百G恶意流量。掌握这些技术,可最大程度保障业务连续性。
