常见的扫描类型有以下几种:

秘密扫描是一种不被审计工具所检测的扫描技术。

它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己。

秘密扫描能躲避IDS、防火墙、包过滤器和日志审计,从而获取目标端口的开放或关闭的信息。由于没有包含TCP 3次握手协议的任何部分,所以无法被记录下来,比半连接扫描更为隐蔽。

但是这种扫描的缺点是扫描结果的不可靠性会增加,而且扫描主机也需要自己构造IP包。现有的秘密扫描有TCP FIN扫描、TCP ACK扫描、NULL扫描、XMAS扫描和SYN/ACK扫描等。

TCP connect()扫描

此扫描试图与每一个TCP端口进行“三次握手”通信。如果能够成功建立连接,则证明端口开放,否则为关闭。准确度很高,但是最容易被防火墙和IDS检测到,并且在目标主机的日志中会记录大量的连接请求以及错误信息。

TCP connect端口扫描服务端与客户端建立连接成功(目标端口开放)的过程:

  1. Client端发送SYN;
  2. Server端返回SYN/ACK,表明端口开放;
  3. Client端返回ACK,表明连接已建立;
  4. Client端主动断开连接。

建立连接成功(目标端口开放)如图所示

TCP connect端口扫描服务端与客户端未建立连接成功(目标端口关闭)过程:

  1. Client端发送SYN;

  2. Server端返回RST/ACK,表明端口未开放。

优点:

  1. 实现简单,不需要任何权限,系统中的任何用户都有权利使用这个调用。

  2. 扫描速度快。如果对每个目标端口以线性的方式,使用单独的“connect()”函数调用,那么将会花费相当长的时间,用户可以同时打开多个套接字,从而加速扫描。使用非阻塞I/O允许用户设置一个低的 时间以用尽周期,并同时观察多个套接字。

缺点:

是会在目标主机的日志记录中留下痕迹,易被发现,并且数据包会被过滤掉。目标主机的logs文件会显示一连串的连接和连接出错的服务信息,并且能很快地使它关闭。

TCP SYN扫描:

扫描器向目标主机的一个端口发送请求连接的SYN包,扫描器在收到SYN/ACK后,不是发送的ACK应答而是发送RST包请求断开连接。这样,三次握手就没有完成,无法建立正常的TCP连接,因此,这次扫描就不会被记录到系统日志中。这种扫描技术一般不会在目标主机上留下扫描痕迹。但是,这种扫描需要有root权限。

端口开放:

  1. Client发送SYN
  2. Server端发送SYN/ACK
  3. Client发送RST断开(只需要前两步就可以判断端口开放)

端口关闭:

  1. Client发送SYN
  2. Server端回复RST(表示端口关闭)

优点:SYN扫描要比TCP Connect()扫描隐蔽一些,SYN仅仅需要发送初始的SYN数据包给目标主机。

缺点:

  1. 需要系统管理员的权限
  2. 不适合使用多线程技术。因为在实现过程中需要自己完成对应答数据报的查找、分析,使用多线程容易发生数据报的串位现象,也就是原来应该这个线程接收的数据报被另 一个线程接收,接收后,这个数据报就会被丢弃,而等待线程只好在超时之后再发送一个SYN数据报,等待应答。这样,所用的时间反而会增加。

TCP FIN扫描

这种扫描方式不依赖于TCP的3次握手过程,而是TCP连接的“FIN”(结束)位标志。原理在于TCP连接结束时,会向TCP端口发送一个设置了FIN 位的连接终止数据报,关闭的端口会回应一个设置了RST的连接复位数据报;而开放的端口则会对这种可疑的数据报不加理睬,将它丢弃。可以根据是否收到 RST数据报来判断对方的端口是否开放。

优点:此扫描方式的优点比前两种都要隐秘,不容易被发现。

该方案有两个缺点:

  1. 要判断对方端口是否开放必须等待超时,增加了探测时间,而且容易得出错误的结论;

  2. windows系统不能使用,windows系统一旦收到这样的数据报,无论端口是否开放都会回应一个 RST连接复位数据报。

UDP扫描

在UDP扫描中,是往目标端口发送一个UDP分组。如果目标端口是以一个“ICMP port Unreachable”(ICMP端口不可到达)消息来作为响应的,那么该端口是关闭的。

相反,如果没有收到这个消息那就可以推断该端口打开着。还有就 是一些特殊的UDP回馈,比如SQL Server服务器,对其1434号端口发送“x02”或者“x03”就能够探测得到其连接端口。

优点:linux windows都能用

缺点:

  1. 由于UDP是无连接的不可靠协议,因此这种技巧的准确性 很大程度上取决于与网络及系统资源的使用率相关的多个因素。

  2. 当试图扫描一个大量应用分组过滤功能的设备时,UDP扫描将是一个非常缓慢的过程。如果要在互联网上执行UDP扫描,那么结果就是不可靠的。