Nmap 是一个用于网络发现和安全审计的开源实用程序,可以将其用于测试、网络分析等。
这是一个选项非常多的程序,不过我们本文的重点并不是介绍如何使用 nmap,而是介绍扫描端口的各种方法。为了便于演示,我们在下面的例子中将使用 nmap 提供的 scanme.nmap.org 作为扫描目标。
扫描开放的端口
使用 -sT 参数,nmap 可以执行简单的 TCP 扫描,以查找开放的端口:
在上图中可以看到,扫描目标中有两个比较重要的端口开放,分别为端口 22 和 80.
22 端口和 80 端口分别是 ssh 和 http 服务使用的端口。如果这些端口之前未处于活动状态,那么应该检查目标系统的系统日志,以发现可能的安全漏洞。
上述例子是扫描 TCP 端口,如果要扫描 UDP 服务端口,可使用如下命令:
在这里需要注意的是,与 TCP 扫描不同,要扫描 UDP 端口,需要有 root 权限。
扫描指定的端口
nmap 的一个基本功能,使用 -p 选项,可以指定端口号来扫描单个端口。我们来看下面的例子。
Apache 的端口号为 80 和 443,其中端口80是 Apache 上 HTTP 请求的默认端口号,我们可以使用 nmap 扫描该端口号,如下:
同样,对于 https 协议的 443端口(默认端口),也可以同样扫描:
ssh 服务的默认端口号为 22,因此如果要扫描 ssh 连接的话,可以扫描 22 端口:
另外,对于单个端口的扫描,还可以使用服务名称来代替端口号,比如对于ssh端口,可以使用:
以上是使用 nmap 扫描指定端口号的例子,大家可以照例尝试下扫描其他协议或端口号。
下面给出了一些常用服务(协议)的默认端口号:
- 20: FTP data
- 21: FTP 控制端口
- 22: SSH
- 23: Telnet (不安全,不建议使用)
- 25: SMTP
- 53: DNS services
- 67: DHCP server port
- 68: DHCP client port
- 80: HTTP
- 143: IMAP 邮件端口
- 161: SNMP
- 443: HTTPS - 加密的web服务
- 587: SMTP - 消息提交端口
扫描多个端口
要扫描多个端口,依然可以使用 -p 选项,将多个端口之间使用逗号隔开,如下:
指定多个端口范围:
关于端口的范围,还有一种用法,比如上面的端口范围 80-85,可以省略前面的80,变成 -85,这样的话,实际的扫描范围为 1-85。下面的例子扫描端口 1 到 22:
类似,如果在端口范围中,省略后面那个值,则会从第一个指定的端口号开始扫描,一直到最后一个可能的端口号:
在 nmap 中使用通配符
使用通配符还可以简化扫描任务,假设我们要扫描所有与 http 相关的端口:
扫描顶部端口
扫描每个协议的所有 65536 个端口是一项非常耗时的任务,然而,这些端口中的大多数几乎没有开放。。。Nmap 的开发人员 Fyodor 简化了这个操作。
他通过研究数百万个IP地址和探索许多企业网络,找到了最流行的TCP和UDP端口。
根据 Fyodor 的研究,扫描工作要覆盖 90% 的开放端口,只需要针对 576 个 TCP 端口和 11307 个 UDP 端口即可。--top-ports 选项仅扫描这些常用的端口:
-F 选项只扫描最常用的前 100 个端口。
下面是我们总结的几个最常用的使用 nmap 扫描端口的方法:
扫描 TCP 端口,使用 -sT 选项:
扫描 UDP 端口,使用 -sU 选项:
扫描 TCP 和 UDP 端口,可使用如下命令:
扫描SYN数据包,可以使用 -sS 选项:
使用 nmap 可以扫描目标网站上开放的端口,此外我们可以结合使用 netstat 和 ps 命令,通过这些扫描出来的端口,来识别相应的服务。