简介
在本实验中,你将学习理解 Nmap 命令语法。实验开始时,会引导你在 Xfce 中打开一个终端,并使用命令 nmap 127.0.0.1
在本地系统上运行基本的 Nmap 扫描。你还将探索各种选项,例如使用 -h
显示帮助、使用 -v
增加详细程度、使用 -d
启用调试以及组合选项。最后,你将使用 nmap -v 192.168.1.1
在本地网络上测试语法。
在本实验中,你将学习理解 Nmap 命令语法。实验开始时,会引导你在 Xfce 中打开一个终端,并使用命令 nmap 127.0.0.1
在本地系统上运行基本的 Nmap 扫描。你还将探索各种选项,例如使用 -h
显示帮助、使用 -v
增加详细程度、使用 -d
启用调试以及组合选项。最后,你将使用 nmap -v 192.168.1.1
在本地网络上测试语法。
在这一步中,你将学习如何使用 Nmap(网络映射器)工具扫描本地系统。Nmap 是一个强大的网络扫描实用程序,它允许你通过发送数据包并分析响应来发现计算机网络上的主机和服务。
系统管理员和安全专业人员通常使用 Nmap 来:
在使用 Nmap 之前,我们需要在 Xfce 桌面环境中打开一个终端:
Ctrl + Alt + T
打开一个终端窗口现在你已经打开了一个终端,你将在本地机器(localhost)上执行你的第一次 Nmap 扫描。IP 地址 127.0.0.1
始终指的是你当前正在使用的本地机器。
cd ~/project
nmap 127.0.0.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
让我们分析一下这个输出:
注意:由于开放端口取决于 LabEx VM 上当前正在运行的服务,因此你的实际结果可能会有所不同。
这个基本扫描为你提供了有关系统上哪些网络服务处于活动状态的重要信息,为进一步的安全分析或故障排除奠定了基础。
在这一步中,你将学习如何访问 Nmap 的内置帮助文档。了解如何访问和使用帮助信息对于掌握任何命令行工具(包括 Nmap)至关重要。
命令行工具通常有众多难以记住的选项和功能。帮助选项提供了对可用命令、其语法和简要描述的快速参考。对于 Nmap 而言,帮助文档尤其有价值,因为它针对不同场景有许多扫描选项。
要显示 Nmap 的帮助信息,请按以下步骤操作:
cd ~/project
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
...
在查看帮助信息时,要特别留意这些重要部分:
帮助文档内容丰富,因此无需记住所有选项。相反,重点是理解一般类别,并知道在需要时如何快速获取帮助。
在本实验的后续步骤中,你将使用在此帮助文档中看到的一些选项,特别是详细程度(-v
)和调试(-d
)选项。
在这一步中,你将学习如何使用 -v
选项增加 Nmap 扫描的详细程度。详细程度控制着 Nmap 在扫描过程中显示的信息量,这对于了解幕后发生的事情非常有用。
在运行像 Nmap 这样的命令行工具时,默认输出通常只提供基本信息。然而,有时你需要更多关于以下方面的详细信息:
-v
标志(“verbose”的缩写)指示 Nmap 在其操作过程中提供更详细的输出。
增加详细程度在以下情况下特别有用:
让我们运行一次详细程度增加的 Nmap 扫描:
cd ~/project
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
注意标准扫描中没有的以下附加信息:
Nmap 支持多个详细程度级别。你可以使用多个 -v
选项进一步增加详细程度:
nmap -vv 127.0.0.1 ## 更详细
nmap -vvv 127.0.0.1 ## 极其详细
对于大多数情况,单个 -v
提供了很好的信息平衡,不会用过多细节使你应接不暇。
在接下来的步骤中,你将探索其他 Nmap 选项,这些选项会提供关于扫描过程的更多信息。
在这一步中,你将学习如何使用 -d
选项在 Nmap 中启用调试模式。虽然你在上一步中使用的详细程度选项 -v
提供了更多操作细节,但调试通过揭示 Nmap 的内部工作原理更进一步。
调试是比详细程度更高一级的信息输出。详细程度侧重于提供关于 Nmap 正在做什么的更多操作细节,而调试则揭示:
调试输出在以下场景中特别有用:
让我们运行一次启用调试的 Nmap 扫描:
cd ~/project
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)
...
调试输出包括几个关键组件:
与详细程度类似,Nmap 支持多个调试级别。你可以使用以下方式进一步增加调试细节:
nmap -dd 127.0.0.1 ## 更详细的调试
nmap -ddd 127.0.0.1 ## 极其详细的调试
对于大多数故障排除场景,单个 -d
提供了足够的信息,而不会用过多技术细节使你应接不暇。
调试信息一开始可能看起来很繁杂,但特定组件可能非常有用:
在下一步中,你将学习如何结合详细程度和调试选项,以更全面地了解扫描过程。
在这一步中,你将学习如何组合多个 Nmap 命令行选项,以便在一次扫描中同时获得详细程度和调试的好处。这种强大的方法能让你全面了解 Nmap 扫描过程中发生的事情。
像 Nmap 这样的命令行工具的一大优势在于能够组合不同选项,以定制命令的行为和输出。在前面的步骤中,你已经使用过:
-v
(详细程度)来获取更多操作细节-d
(调试)来查看内部技术信息这些选项可以在单个命令中组合使用,从而在无需运行单独扫描的情况下同时获得两者的好处。
组合详细程度和调试有几个优点:
让我们运行一次同时启用详细程度和调试的 Nmap 扫描:
cd ~/project
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
...
注意输出现在如何包括:
-d
)-v
)-d
)-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
这将提供更详细的信息,不过在大多数情况下,每个级别设置为单个就足够了。
这种组合方法在以下方面特别有用:
在下一步中,你将应用所学知识扫描网络上的不同目标。
在这一步中,你将通过扫描本地网络上的设备而不仅仅是扫描本地主机,来扩展你对 Nmap 扫描的知识。这是一个重要的进展,因为像 Nmap 这样的网络扫描工具主要用于发现和分析远程主机。
到目前为止,你一直在扫描环回地址 127.0.0.1
,它指的是你自己的机器。扫描本地网络涉及针对与你的计算机连接到同一网络的其他设备。
地址 192.168.1.1
在许多家庭和小型办公室网络中通常用作默认网关(路由器)地址。这使得它成为一个有用的练习目标,因为它在网络上通常是可响应的。
以下是扫描网络地址与扫描本地主机的不同之处:
方面 | 本地主机 (127.0.0.1) | 网络地址 (192.168.1.1) |
---|---|---|
目标 | 你自己的机器 | 网络上的另一个设备 |
流量 | 仅内部(无网络数据包) | 通过你的接口的网络流量 |
安全性 | 无需防火墙/穿越 NAT | 可能涉及跨越网络边界 |
响应时间 | 非常快 | 取决于网络条件 |
结果 | 更可预测 | 因目标配置而异 |
让我们使用你所学的关于详细程度的知识来扫描一个常见的网络地址:
cd ~/project
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 环境(这是一个容器)中,你可能会看到“主机似乎已关闭”的消息。这是因为:
这在实验室环境中是正常且预期的行为。在 192.168.1.1 存在的真实网络中,你会看到不同的结果。
当 Nmap 无法确定主机是否在线时,你可以使用 -Pn
选项跳过主机发现阶段并继续进行端口扫描:
nmap -v -Pn 192.168.1.1
这会告诉 Nmap 假设主机在线,并尝试扫描其端口,而不管 ping 响应如何。
在容器环境中,你可能无法访问典型的网络地址。以下是一些你可以尝试的替代方法:
nmap -v 8.8.8.8
nmap -v 127.0.0.2
即使在这个实验室环境中扫描未到达实际主机,你也学到了重要的概念:
这些技能构成了在你有权扫描的实际环境中进行更高级网络扫描的基础。
请记住,在实际场景中,你应该只扫描你拥有或有明确许可扫描的网络和设备。未经授权的扫描可能:
始终进行负责任的扫描。
在本实验中,参与者学习 Nmap 命令语法。他们首先在 Xfce 桌面环境中打开一个终端,并使用命令 nmap 127.0.0.1
在本地机器上运行基本的 Nmap 扫描。他们还了解了 Nmap 的常见用途,例如网络清单、查找开放端口和安全审计。此外,他们还探索了各种选项,如使用 -h
显示帮助、使用 -v
增加详细程度、使用 -d
启用调试、组合选项以及使用 nmap -v 192.168.1.1
在本地网络上测试语法。