Nmap 是用于网络发现和安全审计的开源实用程序。 您可以将其用于渗透测试、网络分析等。
它是一个具有大量选项的实用程序,但本教程的目标是向您展示扫描端口的各种方法。
✍?注意:本教程大部分时间,我会使用提供的 Nmap scanme.nmap.org
网站作为我们的扫描目标。
开放端口的基本扫描
随着 -sT
参数,nmap 可以做一个简单的 TCP 扫描来寻找开放的端口:
nmap -sT scanme.nmap.org
可以看到目标上有两个重要的开放端口—— 22
和 80
.
这些端口分别由 SSH 和 HTTP 服务使用。 如果这些端口之前未处于活动状态,则应检查目标系统的系统日志以了解可能的安全漏洞。
如果您正在寻找在 UDP 端口上运行的服务器的 UDP 端口扫描,请使用:
sudo nmap -sU scanme.nmap.org
另外,需要注意的是,与 TCP 不同,要扫描 UDP 端口,您需要具有 root 权限。
扫描特定端口
最基本的,Nmap 可以通过指定目标端口号来扫描单个端口 -p
选项。
让我们看一些流行的端口扫描示例:
Apache 港口 80
和 443
: 港口 80
是 HTTP 请求的默认端口号 Apache. 您可以使用 Nmap 将其扫描为:
nmap -p 80 scanme.nmap.org
同样,对于端口上的 https 流量 443
(默认端口号),您可以使用 Nmap 扫描为:
nmap -p 443 scanme.nmap.org

SSH 连接的默认端口号是 22
,因此在这种情况下,Nmap 扫描命令将是:
nmap -p 22 scanme.nmap.org
这里要注意的一件事是,您还可以使用端口的名称而不是其编号; 为了 example,对于 SSH 扫描,您可以使用:
nmap -p ssh scanme.nmap.org

这些只是向您展示 Nmap 扫描如何在具有给定协议号的协议上工作的两个示例。 您可以以相同的方式使用其他协议号。
下面给出了一些常用端口和协议的简要列表:
- 20:FTP数据
- 21:FTP控制端口
- 22: SSH
- 23:Telnet(不安全,不推荐用于大多数用途)
- 25: SMTP
- 53:DNS服务
- 67:DHCP 服务器端口
- 68:DHCP 客户端端口
- 80:HTTP – 未加密的 Web 流量
- 143:IMAP 邮件端口
- 161: SNMP
- 443:HTTPS – 安全的网络流量
- 587: SMTP – 邮件提交端口
扫描多个端口
要扫描多个端口,您需要用逗号分隔它们,如下所示:
nmap -p 22,25,80 scanme.nmap.org

指定多个范围。
nmap -p 80-85,130-140,22 scanme.nmap.org

您可以对端口范围进行进一步自定义。 为了 example,您可以删除起始端口以从端口一开始扫描:
nmap -p -22 scanme.nmap.org

同样,您可以排除最后一个端口以扫描到最后一个可能的端口:
nmap -p 65255- scanme.nmap.org

在 Nmap 中使用通配符
使用通配符还可以简化扫描任务。 假设您要扫描所有与 http 相关的端口:
nmap -p http* scanme.nmap.org

扫描顶部端口
扫描每个协议的所有 65,536 个端口是一项耗时的任务。 但是,这些端口中的大多数几乎都没有打开。 Nmap 开发人员 Fyodor 为他的出色工具赢得了热烈的掌声,减少了扫描如此庞大的端口范围的头痛。
他通过研究数百万个 IP 地址和探索许多企业网络,掌握了最流行的 TCP 和 UDP 端口。
简而言之,根据他的研究,要覆盖 90% 的开放端口,您只需要定位 576 个 TCP 端口和 11,307 个 UDP 端口。 这 --top-ports
选项仅扫描最常见的端口。
nmap --top-ports 1000 scanme.nmap.org

这 -F
选项仅扫描前 100 个端口。
使用 Nmap 执行端口扫描的方法有多种。 最常用的是这些:
对于扫描 TCP 连接,您可以使用 -sT
旗帜:
sudo nmap -sT scanme.nmap.org
对于扫描 UDP 连接,您可以使用 -sU
旗帜:
sudo nmap -sU scanme.nmap.org
要扫描 TCP 和 UDP 开放端口,您可以使用:
sudo nmap -n -PN -sT -sU -p- scanme.nmap.org
对于扫描 SYN 数据包,您可以使用 -sS
旗帜:
sudo nmap -sS scanme.nmap.org
结论
在本文中,我向您展示了如何使用 Nmap 扫描服务器上的端口。 你也可以使用 netstat
和 ps
与 Nmap 并行的命令来识别使用扫描端口的服务。