admin管理员组

文章数量:1532657

2024年3月23日发(作者:)

3.4.6 目前主要端口扫描技术

目前主要的端口扫描技术有以下几种。

1.TCP connect Scan(TCP连接扫描)

这种方法也称之为“TCP全连接扫描”。它是最简单的一种扫描技术,所利用的是TCP

协议的3次握手过程。它直接连到目标端口并完成一个完整的3次握手过程(SYN、

SYN/ACK和ACK)。操作系统提供的“connect()”函数完成系统调用,用来与目标计算

机的端口进行连接。如果端口处于侦听状态,那么“connect()”函数就能成功。否则,这

个端口是不能用的,即没有提供服务。

TCP连接扫描技术的一个最大的优点是不需要任何权限,系统中的任何用户都有权利

使用这个调用。另一个好处是速度快。如果对每个目标端口以线性的方式,使用单独的

“connect()”函数调用,那么将会花费相当长的时间,用户可以同时打开多个套接字,从

而加速扫描。使用非阻塞I/O允许用户设置一个低的时间以用尽周期,并同时观察多个套

接字。但这种方法的缺点是很容易被发觉,并且很容易被过滤掉。目标计算机的日志文件

会显示一连串的连接和连接出错的服务消息,目标计算机用户发现后就能很快使它关闭。

2.TCP SYN Scan(TCP同步序列号扫描)

若端口扫描没有完成一个完整的TCP连接,即在扫描主机和目标主机的一指定端口建

立连接的时候,只完成前两次握手,在第三步时,扫描主机中断了本次连接,使连接没有

完全建立起来,所以这种端口扫描又称为“半连接扫描”,也称为“间接扫描”或“半开式

扫描”(Half Open Scan)。

SYN扫描,通过本机的一个端口向对方指定的端口,发送一个TCP的SYN连接建立

请求数据报,然后开始等待对方的应答。如果应答数据报中设置了SYN位和ACK位,那

么这个端口是开放的;如果应答数据报是一个RST连接复位数据报,则对方的端口是关闭

的。使用这种方法不需要完成Connect系统调用所封装的建立连接的整个过程,而只是完

成了其中有效的部分就可以达到端口扫描的目的。

此种扫描方式的优点是不容易被发现,扫描速度也比较快。同时通过对MAC地址的

判断,可以对一些路由器进行端口扫描,缺点是需要系统管理员的权限,不适合使用多线

程技术。因为在实现过程中需要自己完成对应答数据报的查找、分析,使用多线程容易发

生数据报的串位现象,也就是原来应该这个线程接收的数据报被另一个线程接收,接收后,

这个数据报就会被丢弃,而等待线程只好在超时之后再发送一个SYN数据报,等待应答。

这样,所用的时间反而会增加。

3.TCP FIN Scan(TCP结束标志扫描)

这种扫描方式不依赖于TCP的3次握手过程,而是TCP连接的“FIN”(结束)位标

志。原理在于TCP连接结束时,会向TCP端口发送一个设置了FIN位的连接终止数据报,

关闭的端口会回应一个设置了RST的连接复位数据报;而开放的端口则会对这种可疑的数

据报不加理睬,将它丢弃。可以根据是否收到RST数据报来判断对方的端口是否开放。

此扫描方式的优点比前两种都要隐秘,不容易被发现。该方案有两个缺点:首先,要

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

一些系统并没有遵循规定,最典型的就是Microsoft公司所开发的操作系统。这些系统一

旦收到这样的数据报,无论端口是否开放都会回应一个RST连接复位数据报,这样一来,

这种扫描方案对于这类操作系统是无效的。

4.IP Scan(IP协议扫描)

这种方法并不是直接发送TCP协议探测数据包,而是将数据包分成两个较小的IP协

议段。这样就将一个TCP协议头分成好几个数据包,从而过滤器就很难探测到。但必须小

心,一些程序在处理这些小数据包时会有些麻烦。

5.TCP Xmas Tree Scan

这种方法向目标端口发送一个含有FIN(结束)、URG(紧急)和PUSH(弹出)标志

的分组。根据RFC793,对于所有关闭的端口,目标系统应该返回RST标志。根据这一原

理就可以判断哪些端口是开放的。

6.TCP Null Scan

这种方法与上一方法原理是一样,只是发送的数据包不一样而已。本扫描方案中,是

向目标端口发送一个不包含任何标志的分组。根据RFC793,对于所有关闭的端口,目标

系统也应该返回RST标志。

7.UDP Scan(UDP协议扫描)

在UDP扫描中,是往目标端口发送一个UDP分组。如果目标端口是以一个“ICMP port

Unreachable”(ICMP端口不可到达)消息来作为响应的,那么该端口是关闭的。相反,

如果没有收到这个消息那就可以推断该端口打开着。还有就是一些特殊的UDP回馈,比如

SQL Server服务器,对其1434号端口发送“x02”或者“x03”就能够探测得到其连接

端口。由于UDP是无连接的不可靠协议,因此这种技巧的准确性很大程度上取决于与网络

及系统资源的使用率相关的多个因素。另外,当试图扫描一个大量应用分组过滤功能的设

备时,UDP扫描将是一个非常缓慢的过程。如果要在互联网上执行UDP扫描,那么结果

就是不可靠的。

8.ICMP echo扫描

其实这并不能算是真正意义上的扫描。但有时的确可以通过支持Ping命令,判断在一

个网络上主机是否开机。Ping是最常用的,也是最简单的探测手段,用来判断目标是否活

动。实际上Ping是向目标发送一个回显(Type=8)的ICMP数据包,当主机得到请求后,

再返回一个回显(Type=0)的数据包。而且Ping程序一般是直接实现在系统内核中的,

而不是一个用户进程,更加不易被发现。

9.高级ICMP扫描技术

Ping是利用ICMP协议实现的,高级的ICMP扫描技术主要利用ICMP协议最基本的

用途——报错。根据网络协议,如果接收到的数据包协议项出现了错误,那么接收端将产

生一个“Destination Unreachable”(目标主机不可达)ICMP的错误报文。这些错误报

文不是主动发送的,而是由于错误,根据协议自动产生的。

当IP数据包出现Checksum(校验和)和版本的错误的时候,目标主机将抛弃这个数

据包;如果是Checksum出现错误,那么路由器就直接丢弃这个数据包。有些主机比如

AIX、HP/UX等,是不会发送ICMP的Unreachable数据包的。

例如,可以向目标主机发送一个只有IP头的IP数据包,此时目标主机将返回

“Destination Unreachable”的ICMP错误报文。如果向目标主机发送一个坏IP数据包,

比如不正确的IP头长度,目标主机将返回“Parameter Problem”(参数有问题)的ICMP

错误报文。

注意:如果是在目标主机前有一个防火墙或者一个其他的过滤装置,可能过滤掉提出的

要求,从而接收不到任何的回应。这时可以使用一个非常大的协议数字作为IP头部的协议

内容,而且这个协议数字至少在今天还没有被使用,主机一定会返回Unreachable;如果

没有Unreachable的ICMP数据包返回错误提示,那么,就说明被防火墙或者其他设备过

滤了,也可以用这个方法探测是否有防火墙或者其他过滤设备存在。

本文标签: 端口目标连接扫描协议