gpt4 book ai didi

sockets - 恢复 TCP 连接

转载 作者:可可西里 更新时间:2023-11-01 02:49:31 26 4
gpt4 key购买 nike

我有一个可以处理多个客户端的简单 Python 服务器:

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 状态图没有说明端点是否应该在看到 RESET 时尝试恢复连接。有什么办法可以强制服务器恢复连接? (我希望它发回一个 SYN 以便它连接到第三个客户端)

最佳答案

你的问题没有多大意义。 TCP 并不是那样工作的。

  1. 关于“TCP 状态图没有说明端点在看到 RESET 时是否应该尝试恢复连接”:RFC 793 #3.4明确表示“如果接收器处于任何其他状态 [除了 LISTEN 或 SYN-RECEIVED],它会中止连接并通知用户并进入 CLOSED 状态。”。

  2. RST 不会干扰连接,除非它通过该连接到达。我猜你可以伪造一个,但你必须知道当前的 TCP 序列号,而且你无法从任何一个对等点中获得它,更不用说第三个主机了。

  3. 如果您以某种方式成功了,那么连接就会中断、结束、kaput。也看不出那有什么意义。

  4. 对于您要求服务器向第三台主机发送 SYN 以响应来自第三台主机的 RST,我无法赋予任何意义,它看起来好像来自第二宿主。 TCP 也不能像这样工作。

  5. 如果您希望服务器连接到第三台主机,它只需像其他人一样调用 connect()。在这种情况下,它当然成为客户。

关于sockets - 恢复 TCP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12486342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com