gpt4 book ai didi

python - 如何在不适当关闭套接字的情况下突然断开套接字

转载 作者:太空狗 更新时间:2023-10-29 17:19:15 25 4
gpt4 key购买 nike

我有一个 Python 测试程序,用于测试另一个软件组件的功能,我们称后者为被测组件 (COT)。Python 测试程序通过持久的 TCP 连接连接到 COT。Python 程序为此使用 Python 套接字 API。现在为了模拟物理链接的故障,我想让 Python 程序关闭套接字,但没有适本地断开连接。IE。我不想再在 TCP channel 上发送任何内容,包括任何 TCP SYN/ACK/FIN。我只想让套接字安静下来。它必须不再响应远程数据包。

这并不像看起来那么容易,因为在套接字上调用 close 会将 TCP FIN 数据包发送到远程端。 (优雅断开连接)。那么如何在不发送任何数据包的情况下终止套接字呢?

我无法关闭 Python 程序本身,因为它需要维护与其他组件的其他连接。有关信息,套接字在单独的线程中运行。所以我想到了硬生生的杀掉线程,但这也不是那么容易的。 ( Is there any way to kill a Thread? )

有什么想法吗?

最佳答案

您不能从用户态进程执行此操作,因为内核网络堆栈仍保留与给定 TCP 连接相关的资源和状态。如果您终止整个进程,内核将发送一个 FIN 到另一端,因为它知道您的进程有哪些文件描述符,并将尝试正确清理它们。

解决此问题的一种方法是使用防火墙软件(在本地或中间机器上)。调用一个脚本,告诉防火墙丢弃来自/到给定 IP 和端口的所有数据包(这当然需要适当的管理权限)。

关于python - 如何在不适当关闭套接字的情况下突然断开套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13458206/

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