1. nmap 性能
nmap 开发的最高优先级是性能。在本地网络对一个主机的默认扫描(nmap hostname)需要 0.2 秒。一眨眼的时间,就需要扫描上万甚至几十万台的主机。一些特定的扫描选项会明显增加扫描时间,如 UDP 扫描和版本检测,防火墙配置以及特殊的响应速度限制也会增加扫描时间。当然用户对 nmap 如何工作拥有最终的控制权。高级用户可以调整 nmap 命令,在满足时间要求的同时获得他们所关心的信息。
2. 调整并行扫描组的大小
nmap 具有并行扫描多主机端口或版本的能力,Nmap 将多个目标 IP 地址空间分成组,然后在同一时间对一个组进行扫描。通常,大的组更有效。缺点是只有当整个组扫描结束后才会提供主机的扫描结果。如果组的大小定义为 50,则只有当前 50 个主机扫描结束后才能得到报告 (详细模式中的补充信息除外)。
2.1. 最小组
--min-hostgroup<milliseconds>
该选项说明最小的组,nmap 会保持组大于这个值。如果在指定的接口上没有足够的目标主机来满足所指定的最小值,nmap 可能会采用比所指定的值小的组。这两个参数虽然很少使用,但都用于保持组的大小在一个指定的范围之内。
2.2. 最大组
--max-hostgroup<milliseconds>
选项用于说明使用最大的组,nmap 不会超出这个大小。
3. 调整探测报文的并行度
默认状态下 nmap 基于网络性能计算一个理想的并行度,这个值经常改变。如果报文被丢弃, nmap
降低速度,探测报文数量减少。随着网络性能的改善,理想的探测报文数量会缓慢增加。这些选项确定这个变量的大小范围。默认状态下,当网络不可靠时理想的并行度值可能为 1,在好的条件下可能会增长至几百。
3.1. 最小并行度
--min-parallelism <milliseconds>
该选项控制用于主机组的最少探测报文数量,可用于端口扫描和主机发现。最常见的应用是该选项的值大于 1,以加快性能不佳的主机或网络的扫描,但是如果这个选项的参数过高则会影响扫描的准确度,同时也会降低 nmap 基于网络条件动态控制并行度的能力。这个值设为 10 较为合适,注意这个值的调整往往作为最后的手段。
3.2 最大并行度
--max-parallelism <milliseconds>
该选项控制用于主机组的最多探测报文数量,可用于端口扫描和主机发现。该选项通常设为 1 以防止 nmap 在同一时间向主机发送多个探测报文,虽然这个选项本身的用途已经很好但是选择与--scan-delay
同时使用是非常有用的。
4. 调整探测报文超时
nmap 使用一个运行超时值来确定等待探测报文响应的时间,随后会放弃或重新发送探测报文。nmap 基于上一个探测报文的响应时间来计算超时值,如果网络延迟比较显著和不定,这个超时值会增加几秒。初始值的比较保守(高),当 nmap 扫描无响应的主机时,这个保守值会保持一段时间。
4.1. 最小探测报文超时
--min_rtt_timeout
这个选项很少使用,当网络不可靠时, nmap 的默认值也显得过于强烈,这时这个选项可起作用。当网络看起来不可靠时,nmap 仅将超时时间降至最小值,这个情况是不正常的,需要向 namp-dev 邮件列表报告 bug。
4.2. 最大探测报文超时
--max-rtt-timeout
采用小的 --max-rtt-timeout 值,使 --initial-rtt-timeout 值大于默认值可以明显减少扫描时间,特别是对不能 ping 通的扫描(-P0)以及具有严格过滤的网络。如果使用太小的值,使得很多探测报文超时从而重新发送,而此时可能响应消息正在发送,这使得整个扫描的时间会增加。
如果所有的主机都在本地网络,对于--max-rtt-timeout 值来说,100 毫秒比较合适。如果存在路由,首先使用 ICMP ping 工具 ping 主机,或使用其它报文工具如 hpings,可以更好地穿透防火墙。查看大约 10 个包的最大往返时间,然后将 --initial-rtt-timeout 设成这个时间的 2 倍,--max-rtt-timeout 可设成这个时间值的 3 倍或 4 倍。通常,不管 ping 的时间是多少,最大的 rtt 值不得小于 100ms,不能超过 1000ms。
5. 放弃低速目标主机
--host-timeout <milliseconds>
(放弃低速目标主机) 由于性能较差或不可靠的网络硬件或软件,带宽限制严格的防火墙等原因,一些主机需要很长的时间扫描,而且这些极少数的主机扫描往往占据了大部分的扫描时间。所以有时候我们可以忽略这些主机,这时可以使用该选项设置一个超时时间,比如使用--host-timeout
选项来说明等待的时间(毫秒)。通常使用 1800000 来保证 nmap 不会在单个主机上使用超过半小时的时间,同时在这半小时中依旧可以同时扫描其它主机,因此并不是完全放弃扫描。
6. 调整探测报文的时间间隔
--scan-delay <milliseconds>
和--max_scan-delay <milliseconds>
(调整探测报文的时间间隔) 该选项用于 nmap 控制针对一个主机发送探测报文的等待时间(毫秒),在带宽控制的情况下这个选项非常有效。Solaris 主机在响应 UDP 扫描探测报文报文时,每秒只发送一个 ICMP 消息,因此 Nmap 发送的很多数探测报文是浪费的。--scan-delay 设为 1000,使 nmap 低速运行。nmap 尝试检测带宽控制并相应地调整扫描的延迟,但并不影响明确说明何种速度工作最佳。--scan-delay
的另一个用途是躲闭基于阈值的入侵检测和预防系统(IDS/IPS)。
7. 设置时间模板
-T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane>
(设置时间模板) nmap 支持优化扫描时间,namp 提供 6 个时间模板,使用时采用-T
选项及数字(0 - 5) 或名称。如果不使用数字那么可以使用的模板名称有paranoid (代表0)
,sneaky (代表1)
,polite (代表2)
,normal(代表3)
,aggressive (代表4)
,insane (代表5)
。
paranoid (代表0)
,sneaky (代表1)
这两种模式用于 IDS 躲避,Polite 模式降低了扫描速度以使用更少的带宽和目标主机资源。默认模式为normal
(即-T3
) 实际上是未做任何优化。aggressive
模式假设用户具有合适及可靠的网络从而加速扫描。insane
模式假设用户具有特别快的网络或者愿意为获得速度而牺牲准确性。