客户端在收到 [SYN, ACK] 后发送 [RST]

Client sends [RST] after receive [SYN, ACK]

我正在尝试与从 Internet 下载的服务器进行握手。但是当客户端收到 [SYN, ACK] 时,它会发回 [RST]。不知道发生了什么。已经检查了确认和序列号,但一切似乎都正常。

在 wireshark 中我得到了这个:

握手客户端源代码如下:

from scapy.all import *

src_ip   = "192.168.43.34"
dst_ip   = "192.168.43.115"
src_port = random.randint(1024, 65535)
dst_port = 502

seq_nr   = random.randint(444, 8765432)
ack_nr   = 0



# Create SYN packet
ip       = IP (src   = src_ip, dst = dst_ip)
syn      = TCP(sport = src_port, dport = dst_port, flags='S', seq = seq_nr, ack = ack_nr)
pkt_syn  = ip / syn 

pkt_syn.show()

# send SYN packet and receive SYN/ACK packet
print('Sending SYN')
pkt_syn_ack = sr1(pkt_syn)
print('ACK received')
pkt_syn_ack.show()


# Create the ACK packet
ack_nr   = pkt_syn_ack.seq + 1
seq_nr   = seq_nr + 1

ack = TCP(sport = src_port, dport = dst_port, flags = 'A', seq = seq_nr, ack = ack_nr)
send(ip / ack)

...

问题是您的 OS 正在接收 SYN-ACK 数据包,不知道为什么发送它(因为 OS 本身没有开始握手)并重置连接.

您可以在这里找到一些解决方案(Linux)- Unwanted RST TCP packet with Scapy

另一种选择是使用与 OS 不同的 IP,或者在 Windows 中关闭所用接口的 IP 堆栈(仅当这是您唯一使用的接口时)此界面为!)