如何通过scapy发送FIN数据包来关闭连接?
问题描述:
我需要发送FIN数据包来关闭具有IP和端口信息的连接(以及来自previus数据包的其他信息)。如何通过scapy发送FIN数据包来关闭连接?
我已经看到,通过3方握手来建立一个新的连接(请参阅3 way handshake in Scapy),但没有关闭连接。
答
正如RFC所述,您需要发送一个FIN段,然后等待端点的确认(ACK)+ FIN段,然后发送最后一个ACK段。
下面是使用Scapy的一个简单的例子:
from scapy.all import *
conf.L3socket=L3RawSocket
sport=10000
dport=45000
pkt=IP(src="1.2.3.4", dst="4.5.6.7")
SYN=pkt/TCP(sport=sport, dport=dport, flags="S")
SYNACK=sr1(SYN)
ACK=pkt/TCP(sport=sport, dport=dport, flags="A", seq=SYNACK.ack, ack=SYNACK.seq + 1)
send(ACK)
# ...
FIN=pkt/TCP(sport=sport, dport=dport, flags="FA", seq=SYNACK.ack, ack=SYNACK.seq + 1)
FINACK=sr1(FIN)
LASTACK=pkt/TCP(sport=sport, dport=dport, flags="A", seq=FINACK.ack, ack=FINACK.seq + 1)
send(LASTACK)
嘿Lucap。你可以设置最后一个数据包的TCP标志为'F'吗?你有一个你正在使用的代码的例子吗? – Noob123