IP______________________________________________________________. |version| ihl | tos | totlen | |___4___|___5___ |____0x00=0_____ |___________0x0028=40___________ | | id |r|D|M| offsetfrag | |____________0x2262=8802________|0|0|0|________0x0000=0_________ | | ttl | protocol | checksum | |_____0x80=128___|______0x06=6____|____________ 0x2013__________ | | source | |__________________________192.168.59.131_________________________ | | destination | |__________________________192.168.59.135_________________________ | TCP_____________________________________________________________. | source port | destination port | |____________0x01BB=443__________ |__________0x1F90=8080__________ | | seqnum | |_____________________ 0xA97F8D14=2843708692_____________________ | | acknum | |_________________________0x00000000=0__________________________ | | doff | r | r | r | r | C | E | U | A | P | R | S | F| window | |_ 5_| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0|______0x05DC=1500______| | checksum | urgptr | |___________0x59CC=22988___________|__________0x0000=0__________ |
TCP是一种面向连接的协议,每次请求都需要对方确认。为了建立连接,TCP客户端和TCP服务器需要进行三次握手。下面将详细介绍三次握手的过程。
第一次握手:在建立连接时,客户端向服务器发送一个SYN报文(SEQ=x,SYN=1),并进入SYN_SENT状态,等待服务器的确认。
第二次握手:实际上,第二次握手分为两个部分,即SYN+ACK(请求和确认)报文。
第三次握手:第三次握手是客户端收到服务器的回复(SYN+ACK报文)。此时,客户端也向服务器发送一个确认包(ACK)。完成这三次握手后,客户端和服务器进入已建立连接的状态。
在握手过程中,每个标志位的值是不同的。为了更好地分析每个标志位在三次握手过程中的变化,可以使用Wireshark工具来捕获TCP连接的数据包并进行分析。
通过抓包分析,可以看到每个数据包的源IP地址、目标IP地址以及TCP报文中的标志位。通过构造TCP三次握手数据包,可以伪造连接指定端口或使用未启用的端口回复连接,以干扰连接者的判断。
构造三次握手数据包可以使用netwox工具中的编号42模块。例如,已知主机A的IP地址为192.168.59.131,端口443处于开放状态,主机B的IP地址为192.168.59.135,端口8080处于开放状态。可以通过主机A连接主机B,并构造三次握手。
通过抓包验证,可以确认成功构造了第一次和第二次握手包。如果构造的握手包连接的是主机B未开放的端口,将不会收到对应的第二次握手包。为了干扰判断,可以在主机B上构造第二次握手包,使主机A认为主机B上的端口是开放的。
最后,在主机A上构造第三次握手包,完成三次握手。通过抓包验证,可以确认成功构造了第三次握手包。
以上是关于TCP三次握手过程的详细解释和构造握手数据包的示例。