英文:
Client sends [RST] after receive [SYN, ACK]
问题
我正在尝试与从互联网下载的服务器进行握手。但是当客户端接收到[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
# 创建SYN数据包
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()
# 发送SYN数据包并接收SYN/ACK数据包
print('发送SYN')
pkt_syn_ack = sr1(pkt_syn)
print('接收到ACK')
pkt_syn_ack.show()
# 创建ACK数据包
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)
...
如您所要求,这是源代码的翻译部分,不包含其他内容。
英文:
I am trying to do a handshake with a server I downloaded from the internet. But when the client receives [SYN, ACK] it sends back a [RST]. Have no idea what is happening. Already checked the acknowledge and sequence number but everything seems ok.
In wireshark I got this:
Here is the handshake client source code:
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)
...
答案1
得分: 3
问题在于您的操作系统接收到了SYN-ACK数据包,但不知道为什么发送该数据包(因为操作系统本身没有启动握手),所以重置了连接。
您可以在这里找到一些解决方案(适用于Linux)-
https://stackoverflow.com/questions/9058052/unwanted-rst-tcp-packet-with-scapy
另一个选择是使用与操作系统不同的IP地址,或者在Windows中关闭所使用接口的IP协议栈(仅当该接口仅用于此用途时)。
英文:
The problem is that your OS is receiving the SYN-ACK packet, has no idea why it was sent (as the OS itself didn't start a handshake) and reset the connection.
You can find some solutions here (for Linux)-
https://stackoverflow.com/questions/9058052/unwanted-rst-tcp-packet-with-scapy
Another option is to use a different IP than the OS's, or in Windows turn off the IP stack of the used interface (only if this is the only thing that you use this interface for!)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论