TCP
-sS/sT/sA/sW/sM TCP SYN/TCP connect()/ACK/TCP窗口扫描/TCP Maimon
-sN/sF/sX TCP Null,FIN,and Xmas扫描
-sS | TCP SYN扫描 | 通常又叫“半开放”扫描。因为它不必打开一个完整的TCP连接,只发送一个SYN包,就能做到打开连接的效果,然后等待对端的反应。如果对端返回SYN/ACK报文,则表示该端口处于监听状态,此时,扫描端则必须再返回一个RST报文来关闭此连接;返回RST报文表示该端口没有开放。 |
-sT | TCP connect扫描 | 是一种常见的扫描方式。它通过操作系统与目标机器建立连接,而不是直接发送原始数据包。这与浏览器、P2P客户端以及大多数网络应用程序一样,建立连接由高层系统调用。执行这种扫描的最大好处是无需root权限,但会在系统日志里留下记录 |
-sA | TCP ACK扫描 | ACK扫描发送一个只设置ACK标志位的数据包,目标主机端口无论是关闭还是开放状态,都会返回RST数据包。但ACK扫描不能确定目标主机的端口状态,可以确定对方主机是否存活,可以发现防火墙规则来确定防火墙的状态。 |
-sW | 窗口扫描 | 在某些系统上,开放端口用正数表示窗口大小,而关闭的窗口大小则为0。窗口扫描,就是通过检查返回RST报文的窗口字段,来判断端口是否开放。窗口扫描依赖于少数的系统实现细节,不支持它的系统通常会返回“所有端口都关闭”信息;甚至有些系统会给出相反的行为(比如:扫描显示1000端口开放,3个端口关闭,那么这3个端口反而是开放的)。 |
-sN | TCP NULL扫描 | 根据RFC 793,主机发送一个没有任何标志位的TCP包,如果目标主机的对应端口是关闭的话,则会返回一个RST数据包,如果没有响应则表示该端口是开放的。NULL扫描,可以躲过无状态防火墙和报文过滤路由器,且比SYN扫描要隐秘。值得注意的是,并不是所有系统都遵循RFC 793。一些系统不管端口是开放还是关闭,都响应RST数据包。如Cisco设备、BSDI等。根据RFC793,类似的扫描还有FIN扫描、FIN+PSH+URG扫描。 |
-sF | FIN扫描 | 根据四次挥手过程,主动结束的一方会发送FIN帧。当我们发送FIN帧给一个非监听的端口时,会有RST应答,反之,发给一个正在监听的端口时,不会有任何回应。只能用于linux系统,windows系统下无效,在windows下,无论端口是否监听,都将回应RST帧,造成无法判断;不可靠,当收不到应答包时,不确定是端口在监听,还是丢包了。 |
-sM | FIN\ACK扫描 | FIN/ACK扫描也被称作Maimon扫描,根据发现者Uriel Maimon命名。其实Maimon扫描与NULL、FIN扫描的原理一样,根据RFC 793,无论端口是关闭还是开放,目标主机都会对FIN+ACK探测数据包,响应RST报文(但许多基于BSD的系统,会丢弃FIN+ACK探测数据包)。 |
UDP
-sU | UDP扫描 | UDP扫描,通常与ICMP相结合进行。在给目标主机发送没有携带任何数据的UDP数据包时,如果返回信息为“ICMP端口不可达”(类型为3,代码为3)的提示,则表示目标端口是关闭的,但主机是存活的;如果某服务响应一个UDP报文,则表明该端口是开放的。当然,UDP扫描也存在瓶颈,那就是速度。很多主机默认限制发送“ICMP端口不可达”信息,或者限制发包的频率。如Linux2.4.20内核,就只允许一秒钟发送一条目标不可达信息。这样,扫描65535个端口,需要18小时的时间。这是不可接受的,所以加速UDP扫描的方法,通常是并发扫描或先扫描主要端口。 |