扫描优化用来提高扫描效率。当描一个大范围网络中的主机时,如果使用通用的方法可能需要很长的时间,此时可以使用一些特定选项进行扫描优化,以提高扫描效率。Nmap提供了几种优化方式,如分组扫描、设置发包方式和超时时间等。
分组扫描
分组扫描是指对一组主机同时进行网络扫描。Nmap可以将目标进行分组,然后在同一时间对一个组进行扫描。当用户扫描的目标较多时可以进行分组扫描。Nmap提供了两个分组扫描选项
- --min-hostgroup <msec>:指定在同一时间内扫描的最小分组数。如果指定的接口上没有足够的目标主机来满足所指定的最小值,Nmap将使用实际数目数作为分组值。
- --max-hostgroup <msec>:指定在同一时间内扫描的最大分组数
发包方式
- 并行发包 同一时间发送的探测报文数量。Nmap默认将自动调整报文数量。如果自动调整后还是出现丢包,需要强制设置最大值为1。如果为了加快扫描速度,可以将最小值调高。Nmap提供了两个选项,可以用来设置并行发包的最小数和最大数。
- --max-paralelism <numprobes>
- --min-parallelism <numprobes>
- 发包延迟 优化发包延迟时间就是缩短发送数据包的延迟时间。Nmap中提供了两个选项可以用来优化发包延迟时间,单位都是秒
- --scan-delay <tiem>:设置探测报文的时间间隔,默认单位为
- --max-scan-delay <time>:设置探测帧最长时间间隔,默认单位为
- 发包速率
- --min-rate <number>:设置每秒发送的最少数据包数
- --max-rate <number>:设置每秒发送的最多数据包数
超时控制
- 控制报文响应超时 对于使用任何协议传输的报文,都有默认的响应时间。一般情况下,默认的超时值都比较长。为了提高扫描效率,可以设置较短的报文响应超时。
- --min-rtt-timeout <time> 设置探测报文的最小超时时间,单位为ms
- --max-rtt-timeout <time>:设置探测报文的最多超时时间。单位为ms
- --initial-rtt-timeout <time>:设置探测报文的初始化超时时间,单位为ms
- 主机响应超时 --host-timeout <time>:设置主机响应超时时间,单位为ms
- 超时重试次数 --max-retries <tries>:设置扫描的重发次数
重置处理
重置是指对数据包的一种处理方式。例如,当TCP建立连接时,如果出现异常导致连接关闭,系统将会响应TCP RST报文,表示复位。通常情况下,默认响应这些数据包可能需要等待很长的时间。为了提高扫描速率,用户可以忽略这些报文的速率限制。
- --defeat-rst-ratelimit:忽略系统RST包的速率限制
- --defeat-icmp-ratelimit:忽略系统ICMP错误消息速率限制
内置时间设置模板
Nmap中默认内置了6个时间模板,分别为paranoid(0)、sneaky(1)、polite(2)、normal(3)、aggressive(4)和insane(5),默认为Normal。通过 -T<1-5>设置
- paranoid(0)模板主要用于规避入侵防护系统(IDS)警告,当扫描大量的主机或端口时,需要的时间也更长。该选项会影响连续扫描,在一个时间段内只能扫描一个端口,每个探测报文的发送时间间隔为5min
- sneaky(1)模板主要用于规避IDS警告。使用该时间模板扫描的速度也很慢,探测报文间隔时间为15s
- ploite(2)模板和sneaky模板类似,探测报文间隔时间为0.4s。该模板降低了扫描速度,消耗的带宽和目标资源较少。但是,该时间模板的扫描速度非常慢,比默认时间要多用10倍的时间
- normal(3)模板是默认的时间模板,启用了并行扫描。该模板可以根据目标的反应自动调整时间模式,而且很少会出现主机崩溃和带宽问题
- aggressive(4)模板需要用户具有较稳定的网络,以实现加速扫描。如果用户有充足的带宽或使用以太网连接,建议使用该时间模板。该模板针对TCP端口禁止动态扫描的延迟时间为10ms。T4选项相当于--max-rtt-timeout 1250 --initial-rtt-timeout 500。
- insane(5)模板适用于用户的网络较快,并且对扫描的准确性没有要求的情况。该模板对TCP端口禁止动态扫描的延迟时间为5ms。T5选项和--max-rtt-timeout 300 --min-rtt- timeout 50 --initial-rtt-timeout 250 --host-timeout 900000是等价的。