【问题标题】:Client sends [RST] after receive [SYN, ACK]客户端收到 [SYN, ACK] 后发送 [RST]
【发布时间】:2020-04-24 00:11:17
【问题描述】:

我正在尝试与从 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)

...

【问题讨论】:

    标签: tcp wireshark scapy


    【解决方案1】:

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

    您可以在此处找到一些解决方案(适用于 Linux)- Unwanted RST TCP packet with Scapy

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

    【讨论】:

    • Scapy 的常见问题解答中也提到了这一点:scapy.readthedocs.io/en/latest/…
    • 谢谢!现在我面临另一个问题。握手之后,当从服务器接收到一个包时,内核(我认为)会发回一个 ICMP。我不知道这两个问题是否相关。 pasteboard.co/IOKXmzX.png
    • 如果你在链接中使用了第一个解决方案(丢弃重置数据包),我认为使用第二个解决方案(丢弃所有数据包到 Scapy 端口)应该也有助于 ICMP
    猜你喜欢
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2015-07-04
    • 1970-01-01
    相关资源
    最近更新 更多