我需要在短时间内使用 nmap 扫描 B 类网络。要求很简单。我想要:
- 尽快扫描
- 满足第 1 点并保持可靠性(10 个中缺失 1/2 是可以接受的)
- 满足第 1 点,同时尽量减少对其他网络用户的干扰
我将从网络内部进行扫描。以下是我目前决定的内容。
nmap -p 0-65535 172.22.0.0/16
(端口范围和 IP 只是示例)
-Pn
跳过主机发现
--min-hostgroup 256
一次扫描 256 个 IP 地址
--ttl 10
我认为这可以减少网络噪音。如果我错了请纠正
--max-retries 1
我我发现这可以加快扫描速度而不会牺牲太多的可靠性
以下是我的问题
- 我正在考虑使用这个选项
-T4
但不确定这会对可靠性和其他用户的网络速度产生多大影响。我应该如何确定是否使用此选项? - 还有其他可靠的方法可以提高扫描速度而不影响要求 2 和 3 吗?
答案1
主要有 4 个因素会导致扫描耗时过长:
- 发送不需要发送的探测
- 潜伏
- 丢弃的数据包
- 目标响应速率限制
加快扫描速度通常是通过测量和规划每个方面来实现的,直到达到所需的速度同时保持准确性。
关于 1,您这里遇到的最大问题是-Pn
,它禁用了主机发现。主机发现Nmap 就是通过这种方式来判断哪些地址值得进行端口扫描(“up”),哪些地址不会以任何方式响应,这通常是因为没有主机配置了该地址。在 /16 网络中,您将扫描 65536 个地址。如果您知道网络上只有 5000 个资产,那么92%您的扫描将被浪费。尝试-P*
使用各种选项-sn
来避免实际的端口扫描,直到您找到一组适合您网络的探测器。现在,如果您可以通过其他方式进行发现,例如使用-iL
从内部 IDS 传感器导入活动地址列表,那么-Pn
可以用来避免跳过您知道已启动的地址,因为它不响应默认发现探测器。
您可能遗漏的另一个潜在探测浪费是反向 DNS 名称解析。这是一个很好的信息来源,Nmap 处理起来非常快,但如果您不需要知道每个地址的 DNS 名称(PTR 记录),那么添加-n
将完全消除该阶段,为您节省一些宝贵的时间。
对于 2,延迟通常是您无法控制的。但您可以明智地让 Nmap 知道您预期的延迟。如果您在 LAN 上,则设置--max-rtt-timeout
可以通过告诉 Nmap 不要等待太长时间来听到任何特定数据包的回复来帮助加快扫描速度。但要注意不要太乐观;如果 Nmap 放弃得太早,它会将数据包视为丢弃,并会放慢速度以避免进一步丢弃。使用试-sn
运行中的延迟信息来了解最坏情况,然后将其加倍以确保安全。如果您的网络速度相当快,它仍然会低于默认值。
说到丢包(我们列表中的第 3 位),这是扫描速度过快时导致不准确的主要原因。如果资源非常受限(如 ICS 或 IoT 设备),您可能会压垮自己的链接或目标本身的功能。如果您的网络速度足够快且足够强大,不会出现太多丢包,则可以将其设置为低于默认值(即 10)的数字以加快速度,但可能会出现一些不准确的风险。由于 Nmap 会检测到丢包并减慢速度,因此除非您继续使用 firehousing 发送数据包,--max-retries
否则您可能不会在几秒钟内影响任何其他人的流量。--min-rate
第 4 项,即按目标限制速率,这很棘手,因为它不受您的控制(除非您可以将扫描机器列入执行速率限制的白名单)。不过,还是有一些技巧:对于特定类型的 TCP RST 速率限制,该--defeat-rst-ratelimit
选项将允许您保持扫描速度,但代价是某些端口被标记为“已过滤”,而这些端口实际上可能处于“关闭”状态。开放端口不会受到影响,而且这通常是您唯一感兴趣的。
计时模板(如-T4
您提到的)将为您设置其中一些选项,但您始终可以使用更具体的选项覆盖它们。查看您使用的 Nmap 版本的手册页,以准确了解每个模板设置的选项。请注意,-T5
设置--host-timeout
选项后,如果任何目标需要超过 15 分钟才能完成(全端口扫描很有可能),它将被删除并且不会显示任何输出。
除非存在路由环路,否则设置较低的 IP TTL 值--ttl
不会减少网络噪音。将要如果这对您很重要,请阻止您的探测器到达距离超过 10 跳的目标。
最后,一定要使用最新的 Nmap 版本可用。我们一直在不断改进,使扫描更快、更可靠。