nmap 在二层做主机发现时使用的参数是 sn(ping 扫描,不做端口扫描)。在三层做主机发现时也是使用的 sn 参数,这里二三层都用的 sn 参数,而具体使用的是二层协议 arp 还是三层协议 icmp,判断依据是是否属于同一个网段。在四层发现时主要利用的是 tcp 和 udp,而 nmap 用到的主要参数就是 PU 和 PA。
nmap 使用 udp 来做端口扫描时,用到的参数是 sU,来看下 man 手册的介绍:
先来看一下 nmap 的单个端口检测,不论是单个端口还是多个端口,都需要使用 p 参数来指定,下面是一个开放端口和一个不开放端口的返回结果,可以看到 state 分别是 open 和 closed:
多个不连续的端口,用逗号隔开。如果是连续的端口则可以写成 1-100。如果不加 p 参数,则默认是常用的 1000 个端口号(80、3306 这种)。示例如下:
通过 wireshark 抓包如下:
如果要扫描多个 ip,可以把 ip 放入到文件中,然后通过 iL 参数指定即可,格式:nmap -iL iplist.txt -sU -p 1-100。
nmap 通过 sU 参数使用 udp 进行端口发现,原理是根据是否有返回信息,是否包含端口不可达来判断。