У меня есть простой сервер на Python, который может работать с несколькими клиентами:Восстановление на соединение TCP
import select
import socket
import sys
host = ''
port = 50000
backlog = 5
size = 1024
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host,port))
server.listen(backlog)
input = [server,sys.stdin]
running = 1
while running:
inputready,outputready,exceptready = select.select(input,[],[])
for s in inputready:
if s == server:
# handle the server socket
client, address = server.accept()
input.append(client)
elif s == sys.stdin:
# handle standard input
junk = sys.stdin.readline()
running = 0
else:
# handle all other sockets
data = s.recv(size)
if data:
s.send(data)
else:
s.close()
input.remove(s)
server.close()
Один клиент подключается к нему, и они могут общаться. У меня есть третий ящик, откуда я посылаю сигнал RST
на сервер (используя Scapy). Диаграмма состояний TCP не указывает, должна ли конечная точка пытаться восстановить соединение, когда видит СБРОС. Есть ли способ заставить сервер восстановить соединение? (Я хочу, чтобы он отправил обратно SYN
, чтобы он подключился к третьему клиенту)
Я думаю, что OP подделал действительный RST (он упоминает scapy), но да, то, что он просит, не ясен. – jman
@skjaidev Возможности OP по подделке действительного RST равны 1 в 2^32. – EJP