引言
本文通过scapy【1】和wireshark对于TCP连接建立、发送数据以及socket关闭过程进行分析。
并通过scapy编写程序模拟TCP协议分组丢失、重传的场景。可以学习scapy的使用和并熟悉TCP传输-确认机制。
scapy介绍
scapy可以发送、监听、剖析及伪造网络数据包,是功能非常强大的数据包操控程序。
主要完成两方面的事情:发送数据包、接收应答。读者可以通过scapy文档中的示例进行学习。
TCP数据发送
基本环境
服务端192.168.199.221,运行nc程序监听:
nc -l 25000
客户端19.168.199.230, 连接服务端之后,发送数据包。然后等待服务端关闭,确认FIN数据包并发送自身FIN,然后等待接收服务端发送的ACK数据包。
TCP三次握手协议
tcp通过三次握手协议建立连接【2】【3】,可以通过scapy构造数据包观察数据发送过程。
数据发送程序如下:
from scapy.all import *from scapy.sendrecv import *import timeprint(scapy.__version__)i_sport = 43210i_dport = 25000ip = scapy.all.IP(dst="192.168.199.221")syn = scapy.all.TCP(sport=i_sport, dport=i_dport,seq= 12344321, flags='S', options=[('SAckOK', "")])syn_pkt = ip / synsyn_ack = sr1(syn_pkt, timeout=3)# syn_ack.display()syn_ack_seq = syn_ack.seq + 1ack = scapy.all.TCP(sport=i_sport, dport=