我有时使用 nmap 来检查我的主机。例如:nmap -sS -p- example.com
但是这个命令永远不会完成。
所以我把扫描分成小部分:nmap -sS -p 0-999 example.com
(12 秒完成)
然后nmap -sS -p 1000-1999 example.com
(14 秒完成)等等。这很乏味。
如果使用较宽的零件:nmap -sS -p 0-3999 example.com
需要 3 分钟以上才能完成。
并且nmap -sS -p 0-7999 example.com
在 30 分钟后还没有完成。
所以:
1000 个端口 -> 12 秒
4000 个端口 -> 3 分钟
9000 个端口 -> 30 分钟
有什么问题?
如何使用 nmap 找到一台主机的开放 TCP 端口?
Nmap 尽最大努力找到它可以准确找到每个端口的状态(打开、关闭或过滤)的速度。计时系统很复杂,它有一些最坏的情况会导致扫描速度非常慢。其中一种情况是当目标是限速 TCP 连接重置 (RST) 时,这是 Nmap 在端口关闭时收到的响应。系统上的大多数端口通常是关闭的,为了节省资源或阻碍扫描尝试,目标的操作系统可能会选择每秒仅发出一次 RST。
当 Nmap 检测到 RST 速率限制时,它必须减慢其探测速度以匹配该速率,否则关闭的端口可能被标记为“已过滤”,因为没有收到响应,这与防火墙将流量丢弃到该端口一致。这种减速行为是逐渐发生的,因此前几个端口不会像后面的端口那样受到影响。此外,它只影响关闭的端口,因此 1 到 1000 之间的常用端口不太可能导致缓慢。
这个问题有一个解决方法,但它会降低准确性。如果您不关心知道过滤端口和关闭端口之间的区别,您可以使用--defeat-rst-ratelimit
选项不让速率限制的 RST 影响 Nmap 的时序。Nmap 将继续以适当的网络速率发送,检测丢失的数据包并在必要时放慢速度,但非常高兴将关闭的端口标记为已过滤。开放端口集应该完全相同,这是大多数人想要的。事实上,您甚至可以添加--open
以避免打印有关关闭和过滤端口的信息。
您可以添加-T5
选项以提高扫描速度。根据nmap 时序和性能,建议使用-T4
选项:
我建议始终使用-T4。有些人喜欢-T5,尽管它对我来说太激进了。人们有时会指定 -T2,因为他们认为这不太可能导致主机崩溃,或者因为他们认为自己总体上很有礼貌。他们常常没有意识到礼貌到底有多慢。他们的扫描时间可能比默认扫描长十倍。使用默认计时选项 (-T3) 时,机器崩溃和带宽问题很少见,因此我通常建议谨慎的扫描仪使用该选项。在减少这些问题方面,省略版本检测比使用计时值更有效。