TCP是面向连接的协议,一个成功的TCP连接一般都会首先完成三次握手的过程,而几乎所有的TCP扫描都是在三次握手的过程中做文章

TCP connect扫描

这是最基本的TCP扫描方式,其原理是直接使用系统提供的连接函数完成三次握手。
优点:不需要关注三次握手的细节,并且该函数对使用用户权限没有太大限制
缺点:安全性差,很容易被对方发觉,或者被防火墙过滤掉,目标主机的日志文件也会记录下这一连串的连接和连接出错的服务消息,并被反向查出来

TCP SYN扫描

TCP SYN扫描又称半开扫描。回顾TCP连接的三次握手,申请方首先发生的是一个SYN数据包,服务方在接到这个SYN数据包后,如果该端口处于侦听状态,则会回复一个SYN|ACK数据包,如果该端口没有处于侦听状态,则返回一个RST数据包。而此时对方处于侦听状态,申请方还需要向对方回复一个ACK数据包以示建立连接。此时对方就会认为建立连接,并记入日志。
无论服务方回复SYN|ACK的数据包,还是RST数据包,申请方其实已经能够判断对方端口处于开或关状态,之后的ACK数据包发送则被对方监视,如果此时不发送ACK数据包,而是发送一个RST数据包,则不仅关闭了整个未完成的连接过程,并且也会因为连接未建立而不会被记录。这种扫描方式因为使用了TCP SYN位,所以被称为SYN扫描
优点:一般不会在目标计算机上留下记录
缺点:必须要有管理员权限才能建立自己的SYN数据包

TCP ACK扫描 (开了回复RST否则不回复)

ACK扫描和SYN扫描原理差不多,是利用协议规定,当申请方主机向目标主机的一个端口发送只有ACK标志位的TCP数据包时,如果目标端口是开的,则返回一个RST数据包,否则不回复,根据这一原理可以判断目标端口是否开放

TCP NULL扫描 (关了回复RST,否则不回复)

NULL扫描和SYN扫描原理差不多,是利用协议规定,当申请方主机向目标主机的一个端口发送TCP数据包所有标志位都为空,如果目标该端口是关的状态,则返回一个TCP RST数据包,否则不回复。

TCP FIN+URG+PSH扫描 (关了回复RST,否则不回复)

FIN+URG+PSH扫描和SYN扫描原理差不多,是利用协议规定,当申请方主机向目标主机的一个端口发送TCP数据包中FIN URG PSH都置位,如果目标该端口是关的状态,则返回一个TCP RST数据包,否则不回复。

TCP FIN扫描 (关了回复RST,否则不回复)

FIN扫描和SYN扫描原理差不多,当申请方主机向目标主机的一个端口发送的TCP标志位FIN位置的数据包,如果目标该端口是关的状态,则返回一个TCP RST数据包,否则不回复。根据这一原理可以判断对方端口是关状态还是开状态。
缺点:该原理不是协议规定,因而具体的协议系统实现有一定关系,因为有些系统在实现的时候,不管端口开放与否,都会回复RST数据包,从而导致此方法失效,不过也正因为这一特性,该方法可以判断目标是Linux系统还是windows系统

TCP 反向Indent扫描

Indent protocol 标识协议 提供了一种方法,可以对建立TCP连接的用户身份进行标识,该协议使用113端口,一旦建立连接,该服务就会读取指定TCP连接的查询数据,将拥有指定TCP连接的用户信息反馈给对方,即Indent协议允许通过TCP连接查询任何进程的用户名,即使这个连接不上由这个进程开始的。根据这一原理,扫描程序可以通过TCP连接到对方的WWW端口,然后通过indent协议判断对方是否正以管理员身份运行。
缺点: 是只能在目标端口建立一个完整的TCP连接后才能看到