理解 Nmap 命令语法

NmapNmapBeginner
立即练习

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

简介

在本实验中,你将学习理解 Nmap 命令语法。实验开始时,会引导你在 Xfce 中打开一个终端,并使用命令 nmap 127.0.0.1 在本地系统上运行基本的 Nmap 扫描。你还将探索各种选项,例如使用 -h 显示帮助、使用 -v 增加详细程度、使用 -d 启用调试以及组合选项。最后,你将使用 nmap -v 192.168.1.1 在本地网络上测试语法。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/basic_syntax("Basic Command Syntax") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/host_discovery("Host Discovery Techniques") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/timing_performance("Timing and Performance") nmap/NmapGroup -.-> nmap/verbosity("Verbosity Levels") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") nmap/NmapGroup -.-> nmap/scripting_basics("Scripting Engine Basics") subgraph Lab Skills nmap/basic_syntax -.-> lab-530159{{"理解 Nmap 命令语法"}} nmap/port_scanning -.-> lab-530159{{"理解 Nmap 命令语法"}} nmap/host_discovery -.-> lab-530159{{"理解 Nmap 命令语法"}} nmap/target_specification -.-> lab-530159{{"理解 Nmap 命令语法"}} nmap/timing_performance -.-> lab-530159{{"理解 Nmap 命令语法"}} nmap/verbosity -.-> lab-530159{{"理解 Nmap 命令语法"}} nmap/service_detection -.-> lab-530159{{"理解 Nmap 命令语法"}} nmap/scripting_basics -.-> lab-530159{{"理解 Nmap 命令语法"}} end

在 Xfce 中打开终端并运行 nmap 127.0.0.1

在这一步中,你将学习如何使用 Nmap(网络映射器)工具扫描本地系统。Nmap 是一个强大的网络扫描实用程序,它允许你通过发送数据包并分析响应来发现计算机网络上的主机和服务。

了解 Nmap 基础

系统管理员和安全专业人员通常使用 Nmap 来:

  • 进行网络清单编制和映射
  • 查找网络主机上的开放端口
  • 识别正在运行的服务及其版本
  • 进行安全审计和漏洞评估

在 Xfce 中打开终端

在使用 Nmap 之前,我们需要在 Xfce 桌面环境中打开一个终端:

  1. 在 Xfce 面板中查找终端图标(通常在屏幕顶部或底部)
  2. 或者,你可以使用键盘快捷键 Ctrl + Alt + T 打开一个终端窗口
  3. 你也可以右键单击桌面并从上下文菜单中选择“在此处打开终端”

运行你的第一次 Nmap 扫描

现在你已经打开了一个终端,你将在本地机器(localhost)上执行你的第一次 Nmap 扫描。IP 地址 127.0.0.1 始终指的是你当前正在使用的本地机器。

  1. 在终端中,确保你在默认目录:
cd ~/project
  1. 运行以下命令扫描你的本地主机:
nmap 127.0.0.1
  1. 等待扫描完成。根据你的系统,这可能需要几秒钟。

理解输出

运行命令后,你应该会看到类似于以下的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-21 15:30 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00016s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
3306/tcp open  mysql

Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds

让我们分析一下这个输出:

  • 标题显示了 Nmap 版本和扫描开始时间
  • “主机已启动”确认目标(你的本地机器)已联机
  • “未显示:997 个关闭的端口”表示大多数端口是关闭的
  • 列表显示了哪些端口是开放的以及可能在这些端口上运行的服务
  • 摘要行显示了扫描统计信息

注意:由于开放端口取决于 LabEx VM 上当前正在运行的服务,因此你的实际结果可能会有所不同。

这个基本扫描为你提供了有关系统上哪些网络服务处于活动状态的重要信息,为进一步的安全分析或故障排除奠定了基础。

使用 nmap -h 显示 Nmap 帮助信息

在这一步中,你将学习如何访问 Nmap 的内置帮助文档。了解如何访问和使用帮助信息对于掌握任何命令行工具(包括 Nmap)至关重要。

为何使用帮助选项?

命令行工具通常有众多难以记住的选项和功能。帮助选项提供了对可用命令、其语法和简要描述的快速参考。对于 Nmap 而言,帮助文档尤其有价值,因为它针对不同场景有许多扫描选项。

显示 Nmap 帮助信息

要显示 Nmap 的帮助信息,请按以下步骤操作:

  1. 确保你仍在使用上一步中的终端窗口。
  2. 如有需要,导航回默认目录:
cd ~/project
  1. 运行以下命令以显示 Nmap 的帮助信息:
nmap -h

理解输出

执行命令后,你将看到一份全面的帮助输出,其中包括:

  • 基本用法语法
  • 目标指定选项
  • 主机发现选项
  • 扫描技术
  • 端口指定选项
  • 服务/版本检测
  • 计时和性能选项
  • 以及更多类别

以下是你将看到的部分示例:

Nmap 7.80 ( https://nmap.org )
Usage: nmap [Scan Type(s)] [Options] {target specification}
TARGET SPECIFICATION:
  Can pass hostnames, IP addresses, networks, etc.
  Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
  -iL <inputfilename>: Input from list of hosts/networks
  -iR <num hosts>: Choose random targets
 ...

需注意的关键部分

在查看帮助信息时,要特别留意这些重要部分:

  1. 目标指定:展示如何指定不同类型的目标(单个主机、IP 范围等)
  2. 扫描技术:Nmap 可以执行的不同类型扫描
  3. 输出选项:控制 Nmap 呈现结果方式的选项
  4. 计时模板:控制扫描速度和强度的选项

有效使用帮助信息

帮助文档内容丰富,因此无需记住所有选项。相反,重点是理解一般类别,并知道在需要时如何快速获取帮助。

在本实验的后续步骤中,你将使用在此帮助文档中看到的一些选项,特别是详细程度(-v)和调试(-d)选项。

使用 nmap -v 127.0.0.1 增加详细程度

在这一步中,你将学习如何使用 -v 选项增加 Nmap 扫描的详细程度。详细程度控制着 Nmap 在扫描过程中显示的信息量,这对于了解幕后发生的事情非常有用。

理解 Nmap 中的详细程度

在运行像 Nmap 这样的命令行工具时,默认输出通常只提供基本信息。然而,有时你需要更多关于以下方面的详细信息:

  • 工具在每个步骤中正在做什么
  • 扫描的计时信息
  • 有关发现的主机和服务的其他详细信息
  • 警告消息和小问题

-v 标志(“verbose”的缩写)指示 Nmap 在其操作过程中提供更详细的输出。

增加详细程度的好处

增加详细程度在以下情况下特别有用:

  1. 排查扫描问题
  2. 了解 Nmap 的工作原理
  3. 深入洞察网络行为
  4. 识别扫描配置中的潜在问题
  5. 收集更全面的数据进行分析

运行详细程度增加的 Nmap 扫描

让我们运行一次详细程度增加的 Nmap 扫描:

  1. 确保你仍在上一步的终端窗口中。
  2. 如有需要,导航回默认项目目录:
cd ~/project
  1. 运行以下命令对你的本地主机进行详细扫描:
nmap -v 127.0.0.1

分析详细输出

启用详细选项后,与你在第一步中执行的基本扫描相比,你会注意到输出明显更多。以下是你可能看到的部分示例:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-21 16:45 UTC
Initiating Ping Scan at 16:45
Scanning 127.0.0.1 [2 ports]
Completed Ping Scan at 16:45, 0.00s elapsed (1 total hosts)
Initiating Connect Scan at 16:45
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 3306/tcp on 127.0.0.1
Completed Connect Scan at 16:45, 0.03s elapsed (1000 total ports)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00016s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
3306/tcp open  mysql

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds

详细输出中的关键差异

注意标准扫描中没有的以下附加信息:

  1. 扫描阶段:详细输出显示了不同的阶段,如“发起 Ping 扫描”和“发起连接扫描”
  2. 实时发现:你会看到每个开放端口被发现的过程,而不仅仅是在最终报告中
  3. 计时信息:关于每个阶段花费多长时间的更详细信息
  4. 技术细节:关于扫描如何执行的信息

多个详细程度级别

Nmap 支持多个详细程度级别。你可以使用多个 -v 选项进一步增加详细程度:

nmap -vv 127.0.0.1  ## 更详细
nmap -vvv 127.0.0.1 ## 极其详细

对于大多数情况,单个 -v 提供了很好的信息平衡,不会用过多细节使你应接不暇。

在接下来的步骤中,你将探索其他 Nmap 选项,这些选项会提供关于扫描过程的更多信息。

使用 nmap -d 127.0.0.1 启用调试

在这一步中,你将学习如何使用 -d 选项在 Nmap 中启用调试模式。虽然你在上一步中使用的详细程度选项 -v 提供了更多操作细节,但调试通过揭示 Nmap 的内部工作原理更进一步。

理解 Nmap 中的调试

调试是比详细程度更高一级的信息输出。详细程度侧重于提供关于 Nmap 正在做什么的更多操作细节,而调试则揭示:

  • 内部算法和决策过程
  • 数据包级别的信息
  • 关于 Nmap 如何与系统交互的技术细节
  • 低级协议信息
  • 内存和资源分配细节

何时使用调试模式

调试输出在以下场景中特别有用:

  1. 排查复杂的扫描问题
  2. 理解 Nmap 为何以某种方式运行
  3. 了解网络协议和扫描技术
  4. 为 Nmap 开发脚本或扩展
  5. 调查异常的网络行为

运行启用调试的 Nmap 扫描

让我们运行一次启用调试的 Nmap 扫描:

  1. 确保你在使用上一步中的终端窗口。
  2. 如有需要,导航回默认项目目录:
cd ~/project
  1. 运行以下命令对你的本地主机进行启用调试的扫描:
nmap -d 127.0.0.1

分析调试输出

运行命令后,与你在上一步中使用的详细模式相比,你会看到输出大幅增加。调试信息非常技术化,包括关于以下方面的详细信息:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-21 17:30 UTC
--------------- Timing report ---------------
  hostgroups: min 1, max 100000
  rtt-timeouts: init 1000, min 100, max 10000
  max-scan-delay: TCP 1000, UDP 1000, SCTP 1000
  parallelism: min 0, max 0
  max-retries: 10, host-timeout: 0
  min-rate: 0, max-rate: 0
---------------------------------------------
NSOCK INFO [0.0100s] nsock_iod_new2(): nsock_iod_new (IOD #1)
NSOCK INFO [0.0100s] nsock_connect_tcp(): TCP connection requested to 127.0.0.1:80 (IOD #1) EID 8
NSOCK INFO [0.0100s] nsock_trace_handler_callback(): Callback: CONNECT SUCCESS for EID 8 [127.0.0.1:80]
NSOCK INFO [0.0100s] nsock_read(): Read request from IOD #1 [127.0.0.1:80] (timeout: -1ms) EID 18
NSOCK INFO [0.0100s] nsock_iod_delete(): nsock_iod_delete (IOD #1)
...

调试输出的关键组件

调试输出包括几个关键组件:

  1. 计时报告:关于扫描中使用的计时参数的详细信息
  2. NSOCK 信息:关于网络套接字操作的详细信息
  3. 原始数据包数据:关于发送和接收的数据包的信息
  4. 内存操作:关于内存分配和使用的详细信息
  5. 特定协议信息:关于 Nmap 如何与各种协议交互的低级详细信息

Nmap 中的调试级别

与详细程度类似,Nmap 支持多个调试级别。你可以使用以下方式进一步增加调试细节:

nmap -dd 127.0.0.1  ## 更详细的调试
nmap -ddd 127.0.0.1 ## 极其详细的调试

对于大多数故障排除场景,单个 -d 提供了足够的信息,而不会用过多技术细节使你应接不暇。

调试信息的实际应用

调试信息一开始可能看起来很繁杂,但特定组件可能非常有用:

  • 网络连接问题通常出现在 NSOCK 部分
  • 扫描计时问题可以使用计时报告进行诊断
  • 特定协议问题可以在协议部分中识别

在下一步中,你将学习如何结合详细程度和调试选项,以更全面地了解扫描过程。

使用 nmap -v -d 127.0.0.1 组合选项

在这一步中,你将学习如何组合多个 Nmap 命令行选项,以便在一次扫描中同时获得详细程度和调试的好处。这种强大的方法能让你全面了解 Nmap 扫描过程中发生的事情。

在 Nmap 中组合命令行选项

像 Nmap 这样的命令行工具的一大优势在于能够组合不同选项,以定制命令的行为和输出。在前面的步骤中,你已经使用过:

  • -v(详细程度)来获取更多操作细节
  • -d(调试)来查看内部技术信息

这些选项可以在单个命令中组合使用,从而在无需运行单独扫描的情况下同时获得两者的好处。

组合选项的好处

组合详细程度和调试有几个优点:

  1. 完整信息:你既能获得高级操作细节,又能获得低级技术信息
  2. 高效扫描:无需运行多次扫描,你可以在一次操作中收集所有信息
  3. 关联输出:信息按时间顺序呈现,便于将事件联系起来
  4. 全面故障排除:在解决网络问题时,一次性获取所有信息可以加快问题解决速度

运行启用组合选项的 Nmap 扫描

让我们运行一次同时启用详细程度和调试的 Nmap 扫描:

  1. 确保你在使用上一步中的终端窗口。
  2. 如有需要,导航回默认项目目录:
cd ~/project
  1. 运行以下命令进行同时启用详细程度和调试的扫描:
nmap -v -d 127.0.0.1

分析组合输出

运行命令后,你将看到一个高度详细的输出,它结合了两个选项的优点:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-21 18:15 UTC
--------------- Timing report ---------------
  hostgroups: min 1, max 100000
  rtt-timeouts: init 1000, min 100, max 10000
  max-scan-delay: TCP 1000, UDP 1000, SCTP 1000
  parallelism: min 0, max 0
  max-retries: 10, host-timeout: 0
  min-rate: 0, max-rate: 0
---------------------------------------------
Initiating Ping Scan at 18:15
Scanning 127.0.0.1 [2 ports]
NSOCK INFO [0.0100s] nsock_iod_new2(): nsock_iod_new (IOD #1)
NSOCK INFO [0.0100s] nsock_connect_tcp(): TCP connection requested to 127.0.0.1:80 (IOD #1) EID 8
NSOCK INFO [0.0100s] nsock_trace_handler_callback(): Callback: CONNECT SUCCESS for EID 8 [127.0.0.1:80]
Completed Ping Scan at 18:15, 0.00s elapsed (1 total hosts)
Initiating Connect Scan at 18:15
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
...

比较组合输出

注意输出现在如何包括:

  1. 计时报告:来自调试选项(-d
  2. 扫描阶段信息:来自详细程度选项(-v
  3. NSOCK 信息:来自调试选项(-d
  4. 端口发现信息:来自详细程度选项(-v

这种组合输出从高级和低级角度为你提供了关于 Nmap 正在做什么的最全面视图。

替代顺序和格式

你也可以以不同顺序指定选项或将它们组合成一个标志。所有这些命令都是等效的:

nmap -v -d 127.0.0.1
nmap -d -v 127.0.0.1
nmap -vd 127.0.0.1

选择你认为最易读或最便于输入的格式。

同时增加两个级别

你还可以同时增加详细程度和调试级别:

nmap -vv -dd 127.0.0.1

这将提供更详细的信息,不过在大多数情况下,每个级别设置为单个就足够了。

实际应用

这种组合方法在以下方面特别有用:

  1. 学习:了解 Nmap 正在做什么以及它是如何做的
  2. 故障排除:利用所有可用信息诊断复杂的扫描问题
  3. 网络分析:深入了解你的网络如何响应不同类型的扫描
  4. 文档记录:创建网络行为的全面记录以供分析或比较

在下一步中,你将应用所学知识扫描网络上的不同目标。

使用 nmap -v 192.168.1.1 在本地网络上测试语法

在这一步中,你将通过扫描本地网络上的设备而不仅仅是扫描本地主机,来扩展你对 Nmap 扫描的知识。这是一个重要的进展,因为像 Nmap 这样的网络扫描工具主要用于发现和分析远程主机。

理解本地网络扫描

到目前为止,你一直在扫描环回地址 127.0.0.1,它指的是你自己的机器。扫描本地网络涉及针对与你的计算机连接到同一网络的其他设备。

地址 192.168.1.1 在许多家庭和小型办公室网络中通常用作默认网关(路由器)地址。这使得它成为一个有用的练习目标,因为它在网络上通常是可响应的。

网络地址与本地主机

以下是扫描网络地址与扫描本地主机的不同之处:

方面 本地主机 (127.0.0.1) 网络地址 (192.168.1.1)
目标 你自己的机器 网络上的另一个设备
流量 仅内部(无网络数据包) 通过你的接口的网络流量
安全性 无需防火墙/穿越 NAT 可能涉及跨越网络边界
响应时间 非常快 取决于网络条件
结果 更可预测 因目标配置而异

运行网络扫描

让我们使用你所学的关于详细程度的知识来扫描一个常见的网络地址:

  1. 确保你在使用上一步中的终端窗口。
  2. 如有需要,导航回默认项目目录:
cd ~/project
  1. 运行以下命令以启用详细程度扫描常见的默认网关地址:
nmap -v 192.168.1.1

分析输出

当你在 LabEx 环境中运行此命令时,你可能会看到类似于以下的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-21 19:30 UTC
Initiating Ping Scan at 19:30
Scanning 192.168.1.1 [2 ports]
Completed Ping Scan at 19:30, 3.01s elapsed (1 total hosts)
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.12 seconds

理解“主机似乎已关闭”

在 LabEx 环境(这是一个容器)中,你可能会看到“主机似乎已关闭”的消息。这是因为:

  1. 容器网络与典型的局域网环境隔离
  2. IP 地址 192.168.1.1 可能在容器网络中不存在
  3. 到外部地址的网络流量可能被过滤

这在实验室环境中是正常且预期的行为。在 192.168.1.1 存在的真实网络中,你会看到不同的结果。

使用 -Pn 跳过主机发现

当 Nmap 无法确定主机是否在线时,你可以使用 -Pn 选项跳过主机发现阶段并继续进行端口扫描:

nmap -v -Pn 192.168.1.1

这会告诉 Nmap 假设主机在线,并尝试扫描其端口,而不管 ping 响应如何。

扫描替代目标

在容器环境中,你可能无法访问典型的网络地址。以下是一些你可以尝试的替代方法:

  1. 扫描公共 DNS 服务器(仅出于谨慎和教育目的):
nmap -v 8.8.8.8
  1. 扫描另一个环回地址:
nmap -v 127.0.0.2

你学到了什么

即使在这个实验室环境中扫描未到达实际主机,你也学到了重要的概念:

  1. 如何指导 Nmap 扫描本地主机之外的网络地址
  2. 扫描本地主机和网络设备之间的区别
  3. 如何解释像“主机似乎已关闭”这样的常见扫描结果
  4. 如何在网络扫描中使用详细程度
  5. 使用扫描工具时网络环境的重要性

这些技能构成了在你有权扫描的实际环境中进行更高级网络扫描的基础。

道德考量

请记住,在实际场景中,你应该只扫描你拥有或有明确许可扫描的网络和设备。未经授权的扫描可能:

  1. 违反你的网络提供商的服务条款
  2. 在某些司法管辖区可能是非法的
  3. 被网络管理员视为可疑或恶意的
  4. 可能会干扰网络操作

始终进行负责任的扫描。

总结

在本实验中,参与者学习 Nmap 命令语法。他们首先在 Xfce 桌面环境中打开一个终端,并使用命令 nmap 127.0.0.1 在本地机器上运行基本的 Nmap 扫描。他们还了解了 Nmap 的常见用途,例如网络清单、查找开放端口和安全审计。此外,他们还探索了各种选项,如使用 -h 显示帮助、使用 -v 增加详细程度、使用 -d 启用调试、组合选项以及使用 nmap -v 192.168.1.1 在本地网络上测试语法。