您现在的位置:e-works > 智造书屋 > 书籍列表 > 网络安全编程技术与实例 > 高级TCP扫描技术

第三章 网络安全扫描编程

第四节 高级TCP扫描技术

    利用TCP协议来进行端口扫描是常用的端口扫描方法,因为现在的很多网络应用都是基于TCP协议来实现的,例如Web服务器就是基于TCP端口80。

    而最基本的TCP扫描就是使用TCP连接来实现,如果目标主机能够连接成功,就表示对方开放了此端口,如果失败就表示端口关闭。在TCP连接扫描过程中实现了正常的TCP协议的连接过程,但是这种方式需要的时间比较长,而且容易产生审计数据,所以有很多限制。

    TCP是一个面向连接的协议,首先来看一下TCP协议的数据格式,如图3-10所示。

 TCP协议格式   

图3-10  TCP协议格式

    端口号对应服务类型,也是TCP通信与应用程序的接口,每个TCP通信程序都有一个TCP端口,或者是临时的端口或者是固定的端口。一个四元组(客户机IP,客户端口,服务器IP,服务器端口)对应一个完整的TCP连接。

    TCP中有六个标志位,其中URG 表示紧急指针,ACK 表示确认号,RSH 置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。RST 置1时重建连接,如果接收到RST位,通常表明发生了某些错误。SYN 置1时用来发起一个连接。FIN 置1时表示发送端完成发送任务,用来释放连接,表明发送方已经没有数据发送了。

    一个正常的TCP连接过程如图3-11所示。

    TCP正常连接也称为三次握手过程,在这个过程中的第一个报文的代码位设置为SYN,序列号为m,表示开始一次握手。接收方收到这个段后,向发送者回发一个报文。代码位设置为SYN和ACK,序列号设置为n,确认序列号设置为m+1。发送者在收到这个报文后,就可以进行TCP数据发送,于是,它又向接收者发送一个ACK段,表示双方的连接已经建立。在完成握手之后,就开始正式的数据传输。上面握手段中的序列号都是随机产生的。

    TCP正常终止连接的过程如图3-12所示。

TCP正常连接过程    

图3-11  TCP正常连接过程    图3-12  TCP正常终止连接过程

    TCP 用三个报文建立一个链接,而终止连接时需要四个报文。原因在于被动关闭链接一方需要关闭处理时间,因此 ACK 和 FIN 不能同时发给主动关闭一方。

    在高级的TCP扫描技术中主要利用TCP连接的三次握手特性来进行,也就是所谓的半开扫描。这些办法可以绕过一些防火墙,而得到防火墙后面的主机信息,当然,是在不被欺骗的情况下的。这些方法还有一个好处就是比较难以被记录,不容易被系统发现。

    基于TCP连接的扫描过程如图3-13所示。

    根据TCP/IP协议,函数connect()会激发TCP的三次握手过程。如果使用Socket函数connect()连接成功,表示端口开放,如果返回错误,就表示端口关闭。