扫描更多端口时,nmap 的速度呈指数级缓慢

扫描更多端口时,nmap 的速度呈指数级缓慢

我有时使用 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 分钟以上才能完成。

30分钟后还nmap -sS -p 0-7999 example.com没有完成。

因此:
1000 个端口 -> 12 秒
4000 个端口 -> 3 分钟
9000 个端口 -> 30 分钟

有什么问题?
如何使用 nmap 找到一台主机的开放 TCP 端口?

答案1

Nmap 尽最大努力找到准确找到每个端口状态(打开、关闭或过滤)的速度。计时系统很复杂,并且有一些最坏的情况可能导致扫描速度非常慢。其中一种情况是目标是限速 TCP 连接重置 (RST),这是 Nmap 在端口关闭时收到的响应。系统上的大多数端口通常是关闭的,并且为了节省资源或可能阻止扫描尝试,目标操作系统可能选择每秒仅发出一次 RST。

当 Nmap 检测到 RST 速率限制时,它必须减慢其探测速度以匹配该速率,否则关闭的端口可能会被标记为“已过滤”,因为没有收到响应,这与防火墙丢弃到该端口的流量一致。这种减速行为是逐渐发生的,因此前几个端口受到的影响不如后面的端口那么大。此外,它只影响关闭的端口,因此 1 到 1000 之间的常用端口不太可能导致速度变慢。

这个问题有一个解决方法,但它会带来准确性的损失。如果您不关心了解过滤端口和关闭端口之间的区别,您可以使用该--defeat-rst-ratelimit选项不让速率限制的 RST 影响 Nmap 的计时。 Nmap 将继续以适合网络的速率发送,检测丢弃的数据包并在必要时放慢速度,但非常乐意将关闭的端口标记为已过滤。开放端口的集合应该完全相同,这就是大多数人想要的。事实上,您甚至可以添加--open以避免完全打印有关关闭和过滤端口的信息。

答案2

您可以添加-T5选项以提高扫描速度。根据nmap 时序和性能建议使用-T4选项:

我建议始终使用-T4。有些人喜欢-T5,尽管它对我来说太激进了。人们有时会指定 -T2,因为他们认为这不太可能导致主机崩溃,或者因为他们认为自己总体上很有礼貌。他们常常没有意识到礼貌到底有多慢。他们的扫描时间可能比默认扫描长十倍。使用默认计时选项 (-T3) 时,机器崩溃和带宽问题很少见,因此我通常建议谨慎的扫描仪使用该选项。在减少这些问题方面,省略版本检测比使用计时值更有效。

答案3

尝试使用-v(verbose) 运行 nmap 来帮助您找出速度变慢的原因。

在我自己的一台服务器上运行nmap -sS -Pn -v -p 1-9999 myserver.com会在 3000 个端口之后的某个位置产生以下结果:

Increasing send delay for (ip address) from 0 to 5 due to max_successful_tryno increase to 4
Increasing send delay for (ip address) from 5 to 10 due to 17 out of 55 dropped probes since last increase.
[...]
Increasing send delay for (ip address) from 160 to 320 due to 11 out of 31 dropped probes since last increase.
SYN Stealth Scan Timing: About 17.08% done; ETC: 13:17 (0:02:30 remaining)

这些消息似乎不会出现在端口 1024 以下。

相关内容