使用 Nmap 扫描自定义端口

NmapNmapBeginner
立即练习

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

简介

在本实验中,你将学习如何使用强大的网络扫描工具 Nmap 扫描自定义端口。本实验重点在于指定要扫描的目标端口,将自定义端口扫描与 SYN 扫描相结合以提高效率,以及保存扫描结果以供后续分析。

你将首先使用 -p 选项在本地主机(127.0.0.1)上扫描特定端口,如 1000 和 2000。然后,你将把这与 SYN 扫描(-sS)相结合,以扫描一系列端口,如 1000 - 2000。本实验还包括使用 -v 选项增加详细程度,并使用 -oN 选项将扫描结果保存到文件中。最后,你将查看保存的结果,并将其与顶级端口扫描结果进行比较。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/common_ports("Common Ports Scanning") nmap/NmapGroup -.-> nmap/output_formats("Output Formats") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/verbosity("Verbosity Levels") nmap/NmapGroup -.-> nmap/syn_scan("SYN Scan") subgraph Lab Skills nmap/common_ports -.-> lab-547112{{"使用 Nmap 扫描自定义端口"}} nmap/output_formats -.-> lab-547112{{"使用 Nmap 扫描自定义端口"}} nmap/save_output -.-> lab-547112{{"使用 Nmap 扫描自定义端口"}} nmap/port_scanning -.-> lab-547112{{"使用 Nmap 扫描自定义端口"}} nmap/target_specification -.-> lab-547112{{"使用 Nmap 扫描自定义端口"}} nmap/verbosity -.-> lab-547112{{"使用 Nmap 扫描自定义端口"}} nmap/syn_scan -.-> lab-547112{{"使用 Nmap 扫描自定义端口"}} end

使用 nmap -p 1000,2000 192.168.1.1 扫描自定义端口

在这一步中,我们将学习如何使用 Nmap 在目标机器上扫描特定端口。Nmap 是一个强大的网络扫描工具,用于通过发送数据包并分析响应来发现计算机网络上的主机和服务。默认情况下,Nmap 会扫描一组知名端口。然而,你可以自定义扫描以针对感兴趣的特定端口。

要扫描自定义端口,你可以使用 -p 选项,后跟用逗号分隔的端口号列表或端口范围。

让我们从扫描目标 IP 地址 192.168.1.1 上的 1000 和 2000 端口开始。由于这是一个实验环境,为了演示目的,我们将使用 127.0.0.1(localhost)作为目标。这意味着我们将扫描我们当前正在使用的机器。

打开你的 Xfce 终端并执行以下命令:

nmap -p 1000,2000 127.0.0.1

此命令告诉 Nmap 在本地主机(127.0.0.1)上扫描 1000 和 2000 端口。

你应该会看到类似这样的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000082s latency).

PORT     STATE  SERVICE
1000/tcp closed unknown
2000/tcp closed cisco-sccp

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

输出显示了每个扫描端口的状态。在这个例子中,两个端口都是关闭的。如果这些端口上运行着某个服务,状态可能会显示为 open

现在,让我们尝试扫描一系列端口。

使用 nmap -sS -p 1000-2000 127.0.0.1 与 SYN 扫描相结合

在这一步中,我们将把自定义端口扫描与 SYN 扫描相结合。SYN 扫描,也称为半开放扫描,是 Nmap 扫描的一种类型,它向目标机器发送 SYN 数据包,但不完成 TCP 连接。这种技术比完整的 TCP 连接扫描更快且更难被检测到。

Nmap 中的 -sS 选项指定 SYN 扫描。我们将使用此选项以及 -p 选项来扫描特定范围的端口。

打开你的 Xfce 终端并执行以下命令:

sudo nmap -sS -p 1000-2000 127.0.0.1

此命令告诉 Nmap 在本地主机(127.0.0.1)上对 1000 到 2000 端口执行 SYN 扫描。由于执行 SYN 扫描需要发送原始数据包,所以你需要 sudo 权限。

你应该会看到类似这样的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000079s latency).
Not shown: 999 closed ports
PORT     STATE SERVICE
1000/tcp open  iss-realsecure

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

输出显示了指定范围内每个扫描端口的状态。在这个例子中,1000 端口是开放的,并且正在运行 iss-realsecure 服务,而其他 999 个端口是关闭的。“Not shown: 999 closed ports”消息表示 Nmap 正在抑制关闭端口的显示以减少混乱。

使用 nmap -v -p 1000,2000 192.168.1.1 增加详细程度

在这一步中,我们将增加 Nmap 扫描的详细程度。详细程度的增加会使 Nmap 在扫描过程中提供更多信息。这有助于你了解 Nmap 正在做什么,并对排查任何问题都有帮助。

Nmap 中的 -v 选项启用详细模式。使用一次 -v 会增加详细程度级别。你可以使用 -vv 甚至 -vvv 来获得更详细的输出。

打开你的 Xfce 终端并执行以下命令:

nmap -v -p 1000,2000 127.0.0.1

此命令告诉 Nmap 在本地主机(127.0.0.1)上扫描 1000 和 2000 端口,并提供详细输出。

你应该会看到类似这样的输出(确切输出可能会有所不同):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
Initiating Ping Scan at 10:10
Scanning localhost (127.0.0.1) [4 ports]
Completed Ping Scan at 10:10, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:10
Completed Parallel DNS resolution of 1 host. at 10:10, 0.00s elapsed
Initiating SYN Stealth Scan at 10:10
Scanning localhost (127.0.0.1) [2 ports]
Discovered open port 1000/tcp on 127.0.0.1
Completed SYN Stealth Scan at 10:10, 0.06s elapsed (2 total ports)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000079s latency).

PORT     STATE SERVICE
1000/tcp open  iss-realsecure
2000/tcp closed cisco-sccp

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

注意 Nmap 提供的额外信息,例如扫描开始时间、正在执行的扫描类型以及经过的时间。这种详细的输出对于理解扫描过程和识别潜在问题非常有用。

使用 nmap -p 1000-2000 -oN custom_ports.txt 127.0.0.1 保存自定义端口扫描结果

在这一步中,我们将把自定义端口扫描的结果保存到一个文件中。这对于后续分析或将结果分享给他人很有用。

Nmap 中的 -oN 选项指定输出应以正常格式保存到指定文件。

打开你的 Xfce 终端并执行以下命令:

nmap -p 1000-2000 -oN custom_ports.txt 127.0.0.1

此命令告诉 Nmap 在本地主机(127.0.0.1)上扫描 1000 到 2000 端口,并将结果以正常格式保存到当前目录(~/project)中一个名为 custom_ports.txt 的文件里。

扫描完成后,你可以使用 cat 命令查看文件内容:

cat custom_ports.txt

你应该会在终端中看到 Nmap 扫描结果,类似于你不使用 -oN 选项运行扫描时看到的内容。不同之处在于结果现在也保存在了 custom_ports.txt 文件中。

输出内容大致如下:

## Nmap 7.80 scan initiated Fri Oct 27 10:15:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000079s latency).
Not shown: 999 closed ports
PORT     STATE SERVICE
1000/tcp open  iss-realsecure

## Nmap done at Fri Oct 27 10:15:00 2023 -- 1 IP address (1 host up) scanned in 0.25 seconds

在 Xfce 终端中查看自定义端口扫描结果

在这一步中,我们将查看上一步保存到 custom_ports.txt 文件中的自定义端口扫描结果。我们将使用 cat 命令在 Xfce 终端中显示该文件的内容。

打开你的 Xfce 终端并执行以下命令:

cat custom_ports.txt

此命令将在终端中显示 custom_ports.txt 文件的内容。你应该会看到 Nmap 扫描结果,包括扫描期间发现的开放和关闭端口。

输出内容大致如下:

## Nmap 7.80 scan initiated Fri Oct 27 10:15:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000079s latency).
Not shown: 999 closed ports
PORT     STATE SERVICE
1000/tcp open  iss-realsecure

## Nmap done at Fri Oct 27 10:15:00 2023 -- 1 IP address (1 host up) scanned in 0.25 seconds

检查输出以确定开放端口。在这个例子中,端口 1000 是开放的。“SERVICE”列提供了有关该端口上可能运行的服务的提示。在这种情况下,它显示为“iss-realsecure”。

你还可以使用其他命令行工具,如 grep 来过滤结果并查找特定信息。例如,要查找所有包含“open”一词的行,可以使用以下命令:

grep open custom_ports.txt

这将只输出 custom_ports.txt 文件中包含“open”一词的行。

1000/tcp open  iss-realsecure

这使你能够从扫描结果中快速识别出开放端口。

在 Xfce 终端中与常用端口扫描结果进行比较

在这一步中,我们将对最常用的 1000 个端口进行扫描,并将结果与之前的自定义端口扫描结果进行比较。这将帮助我们了解在自定义端口上运行的服务是否也在常用端口上运行。

首先,使用以下命令在本地主机(127.0.0.1)上扫描前 1000 个端口:

nmap -F 127.0.0.1

-F 选项告诉 Nmap 仅扫描 nmap-services 文件中列出的端口,该文件包含最常用端口的列表。这相当于扫描前 100 个端口。要扫描前 1000 个端口,可以使用 --top-ports 1000 选项。不过,在本实验中,为了更快地扫描,我们将使用 -F 选项。

输出内容大致如下:

Starting Nmap 7.80 ( https://nmap.org ) at Fri Oct 27 10:20:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000079s latency).
Not shown: 97 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http

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

现在,让我们将这些结果与 custom_ports.txt 中自定义端口扫描的结果进行比较。我们从上一步中知道端口 1000 是开放的。让我们检查常用端口扫描是否也发现端口 1000 是开放的。

你可以使用 grep 命令在常用端口扫描的输出中搜索端口 1000。由于输出直接打印到终端,我们可以将输出通过管道传输给 grep

nmap -F 127.0.0.1 | grep 1000

如果命令返回任何输出,则表示在常用端口扫描中找到了端口 1000。如果没有返回输出,则表示端口 1000 不在常用端口之列。

在这种情况下,你可能不会看到任何输出,因为端口 1000 不是常用端口。这展示了扫描常用端口和扫描自定义端口之间的区别。扫描常用端口有助于快速识别知名服务,而扫描自定义端口则有助于发现不太常见或有意隐藏的服务。

总结

在本实验中,我们学习了如何使用 Nmap 的 -p 选项在目标机器上扫描特定端口,可以指定单个端口或端口范围。我们以本地主机(127.0.0.1)为目标,练习扫描了端口 1000 和 2000,然后扫描了从 1000 到 2000 的端口范围。

此外,我们使用 -sS 选项将自定义端口扫描与 SYN 扫描相结合,从而能够对指定的端口范围进行更快且更不易被检测到的扫描。本实验展示了如何针对感兴趣的特定端口进行扫描,并分析扫描结果以确定每个端口的状态。