Python 如何通过发送FIN数据包来关闭连接?

Python 如何通过发送FIN数据包来关闭连接?,python,networking,tcp,network-programming,scapy,Python,Networking,Tcp,Network Programming,Scapy,我需要发送一个FIN数据包来关闭一个具有IP和端口信息(以及来自previus数据包的其他信息)的连接 我已经看到,可以通过三方握手(请参阅)创建一个新连接,但在连接关闭时什么都不做。如所述,您需要发送FIN段,然后等待端点的确认(ACK)+FIN段,然后为其发送最后一个ACK段 下面是一个使用Scapy的简单示例: from scapy.all import * conf.L3socket=L3RawSocket sport=10000 dport=45000 pkt=IP(src="1.

我需要发送一个FIN数据包来关闭一个具有IP和端口信息(以及来自previus数据包的其他信息)的连接

我已经看到,可以通过三方握手(请参阅)创建一个新连接,但在连接关闭时什么都不做。

如所述,您需要发送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)

嘿,卢卡普。能否将最后一个数据包的TCP标志设置为“F”?您是否有正在使用的代码的示例?您是否知道如何在不忽略最后一个FIN的情况下执行此操作(即等待它,接收它,然后发送最后一个ACK)?