Клиент отправляет [RST] после получения [SYN, ACK] - PullRequest
0 голосов
/ 06 января 2020

Я пытаюсь сделать рукопожатие с сервером, который я скачал с inte rnet. Но когда клиент получает [SYN, ACK], он отправляет обратно [RST]. Понятия не имею, что происходит. Уже проверил подтверждение и порядковый номер, но все кажется нормальным.

В wireshark я получил это:

enter image description here

Вот клиент рукопожатия исходный код:

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 Ответ

2 голосов
/ 06 января 2020

Проблема в том, что ваша ОС получает пакет SYN-ACK, не знает, почему он был отправлен (поскольку сама ОС не запускала рукопожатие) и сбрасывает соединение.

Вы можете найти некоторые решения здесь (для Linux) - Нежелательный пакет RST TCP с Scapy

Другой вариант - использовать IP, отличный от ОС, или в Windows отключить стек IP используемого интерфейса (только если это единственное, для чего вы используете этот интерфейс!)

...