常见的端口扫描类型及原理
文章目录
常见的扫描类型有以下几种:
秘密扫描是一种不被审计工具所检测的扫描技术。
它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己。
秘密扫描能躲避IDS、防火墙、包过滤器和日志审计,从而获取目标端口的开放或关闭的信息。由于没有包含TCP 3次握手协议的任何部分,所以无法被记录下来,比半连接扫描更为隐蔽。
但是这种扫描的缺点是扫描结果的不可靠性会增加,而且扫描主机也需要自己构造IP包。现有的秘密扫描有TCP FIN扫描、TCP ACK扫描、NULL扫描、XMAS扫描和SYN/ACK扫描等。
TCP connect()扫描
此扫描试图与每一个TCP端口进行“三次握手”通信。如果能够成功建立连接,则证明端口开放,否则为关闭。准确度很高,但是最容易被防火墙和IDS检测到,并且在目标主机的日志中会记录大量的连接请求以及错误信息。
TCP connect端口扫描服务端与客户端建立连接成功(目标端口开放)的过程:
- Client端发送SYN;
- Server端返回SYN/ACK,表明端口开放;
- Client端返回ACK,表明连接已建立;
- Client端主动断开连接。
建立连接成功(目标端口开放)如图所示
TCP connect端口扫描服务端与客户端未建立连接成功(目标端口关闭)过程:
-
Client端发送SYN;
-
Server端返回RST/ACK,表明端口未开放。
优点:
-
实现简单,不需要任何权限,系统中的任何用户都有权利使用这个调用。
-
扫描速度快。如果对每个目标端口以线性的方式,使用单独的“connect()”函数调用,那么将会花费相当长的时间,用户可以同时打开多个套接字,从而加速扫描。使用非阻塞I/O允许用户设置一个低的 时间以用尽周期,并同时观察多个套接字。
缺点:
是会在目标主机的日志记录中留下痕迹,易被发现,并且数据包会被过滤掉。目标主机的logs文件会显示一连串的连接和连接出错的服务信息,并且能很快地使它关闭。
TCP SYN扫描:
扫描器向目标主机的一个端口发送请求连接的SYN包,扫描器在收到SYN/ACK后,不是发送的ACK应答而是发送RST包请求断开连接。这样,三次握手就没有完成,无法建立正常的TCP连接,因此,这次扫描就不会被记录到系统日志中。这种扫描技术一般不会在目标主机上留下扫描痕迹。但是,这种扫描需要有root权限。
端口开放:
- Client发送SYN
- Server端发送SYN/ACK
- Client发送RST断开(只需要前两步就可以判断端口开放)
端口关闭:
- Client发送SYN
- Server端回复RST(表示端口关闭)
优点:SYN扫描要比TCP Connect()扫描隐蔽一些,SYN仅仅需要发送初始的SYN数据包给目标主机。
缺点:
- 需要系统管理员的权限
- 不适合使用多线程技术。因为在实现过程中需要自己完成对应答数据报的查找、分析,使用多线程容易发生数据报的串位现象,也就是原来应该这个线程接收的数据报被另 一个线程接收,接收后,这个数据报就会被丢弃,而等待线程只好在超时之后再发送一个SYN数据报,等待应答。这样,所用的时间反而会增加。
TCP FIN扫描
这种扫描方式不依赖于TCP的3次握手过程,而是TCP连接的“FIN”(结束)位标志。原理在于TCP连接结束时,会向TCP端口发送一个设置了FIN 位的连接终止数据报,关闭的端口会回应一个设置了RST的连接复位数据报;而开放的端口则会对这种可疑的数据报不加理睬,将它丢弃。可以根据是否收到 RST数据报来判断对方的端口是否开放。
优点:此扫描方式的优点比前两种都要隐秘,不容易被发现。
该方案有两个缺点:
-
要判断对方端口是否开放必须等待超时,增加了探测时间,而且容易得出错误的结论;
-
windows系统不能使用,windows系统一旦收到这样的数据报,无论端口是否开放都会回应一个 RST连接复位数据报。
UDP扫描
在UDP扫描中,是往目标端口发送一个UDP分组。如果目标端口是以一个“ICMP port Unreachable”(ICMP端口不可到达)消息来作为响应的,那么该端口是关闭的。
相反,如果没有收到这个消息那就可以推断该端口打开着。还有就 是一些特殊的UDP回馈,比如SQL Server服务器,对其1434号端口发送“x02”或者“x03”就能够探测得到其连接端口。
优点:linux windows都能用
缺点:
-
由于UDP是无连接的不可靠协议,因此这种技巧的准确性 很大程度上取决于与网络及系统资源的使用率相关的多个因素。
-
当试图扫描一个大量应用分组过滤功能的设备时,UDP扫描将是一个非常缓慢的过程。如果要在互联网上执行UDP扫描,那么结果就是不可靠的。
文章作者 Forz
上次更新 2017-06-25