模块
Host Discovery
任何的网络探测第一步肯定是设备发现,Nmap的Host Discovery模块提供了非常多的选项, 但是使用-sL
和-Pn
参数可以直接跳过设备发现这一步。
如果在使用nmap扫描时没有指定任何的options,那么nmap的默认行为是:
- send an ICMP echo request
- send a TCP SYN packet to port 443
- send a TCP ACK packet to port 80
- send an ICMP timestamp request
上面这些默认的行为等同于nmap -PE -PS443 -PA80 -PP
进行扫描
另外,如果nmap检测到当前的网络是local ethernet network, 并且nmap是在特权模式下运行的,那么nmap会触发ARP(for IPv4)和Neighbor Discovery(for IPv6扫描,非特权模式下的话,nmap会使用连接(connect)tcp的80和443端口,并发送一个SYN包。
但是根据实际经验来看,nmap的host discovery功能在一些情况下并不能探测到所有的联网设备,尤其是对于一些息屏下的手机设备,后面会介绍一种来自于fing的特殊探测算法。
Timing and Performance
一个网络扫描工具不但追加扫描质量,扫描性能也十分的重要,zmap和masscan都打着几分钟可以扫描整个公网IP的旗号。 nmap每个版本都在进行性能方面的优化,并且提供了很多options让用户可以在不同的网络状态下努力达到最优性能。
--scan-delay <time>; --max-scan-delay <time>
很多系统都存在rate limiting, 比如你在进行UDP的port scan时,可能目标设备在一秒之内只会回应一个ICMP报文,这时即使你在1秒进行了很多次不同UDP的端口探测,这个设备在1秒内都不会再发ICMP回应。
另外,为了逃避被IDS(intrusion detection system)检测到,对于简单的检测rule,设置--scan-delay
可以有效的逃避被侦测到。比如对于开源的IDS Snort, 对于其默认的配置,将--scan-delay
设置为1075ms就可以躲避被Snort侦测到。
--defeat-rst-ratelimit; --defeat-icmp-ratelimit
很多系统不但会限制ICMP error messages的回应频率,而且还限制了RST报文的发送,这时通过设置这2个选项,让nmap不要自动去适应缓慢的ICMP和RST回应速度,这样虽然会降低nmap的扫描准确性,但是在某些情况下是值得的,比如比起那些closed或者filtered的port,你更关心哪里port是开启的。
--min-hostgroup <numhosts>; --max-hostgroup <numhosts>
nmap支持在port scan 和 version scan时进行并行扫描,namp默认会把多个hosts进行分组,每次扫描一整个group里面的设备。不过这个选项对于host discovery阶段没有作用。
--min-parallelism <numprobes>; --max-parallelism <numprobes>
上面的选项是控制一个group里面多少host进行同时扫描,这个选项是控制对于每个group并行的发送多少probes(一个探测包)。
-T paranoid (0), sneaky (1), polite (2), normal (3), aggressive (4), and insane (5)
控制timing和performence的参数很多,新用户可能很难掌握,所以nmap综合上面所有的选项,提供了timing template
。比如-T0
和-T1
就是为了避免被IDS系统侦测到, -T4
等同于设置--max-rtt-timeout 1250ms --min-rtt-timeout 100ms --initial-rtt-timeout 500ms --max-retries 6 and sets the maximum TCP and SCTP scan delay to 10ms
, -T5
等同于设置--max-rtt-timeout 300ms --min-rtt-timeout 50ms --initial-rtt-timeout 250ms --max-retries 2 --host-timeout 15m --script-timeout 10m --max-scan-delay as well as setting the maximum TCP and SCTP scan delay to 5ms
。