另一个主机发现的选项是UDP ping,也就是向指定的端口发送UDP数据包。端口列表的格式与前面讨论的-PS和-PA选项相同。如果未指定端口,则默认值为40125。该默认值可以在编译时修改,只要修改nmap.h文件中的DEFAULT_UDP_PROBE_PORT_SPEC的值即可。默认情况下使用高度不常见的端口,因为对于这种特定的扫描类型,通常不希望数据包被发送到打开的端口。
对于大多数端口,该数据包将为空,尽管对于一些常见端口(如53和161),将发送协议特定的有效负载,该负载更有可能获得响应。- -data-length选项为所有端口发送固定长度的随机有效负载。
命中目标计算机上的关闭端口后,UDP探针会引起主机返回一个ICMP端口不可达的数据包。这向Nmap表示机器已启动并且可用。许多其他类型的ICMP报错,例如主机/网络无法访问或TTL超过,都表明主机已关闭或无法访问,缺乏回应也可以这样解释。如果达到了开放端口,则大多数服务只会忽略空数据包,而不会返回任何响应。这就是为什么默认端口设置为40125的原因,它看起来最不可能被使用。极少数一些服务会对空UDP数据包进行回应,例如:Character Generator protocol,这样Nmap更容易知道这些机器是在线的。对于具有负载的端口,自定义有效负载使探针更有可能获得响应。
这种扫描类型的主要优点是它可以绕过那些过滤TCP数据包的防火墙。例如:我曾经有一个BEFW11S无线宽带路由器。它的外部接口默认过滤所有TCP端口,但是使用UDP探针还是能从端口引发不可达信息,因此这就绕过了设备默认的防护机制。