如何在 Windows 上关闭 tcp v4 和 tcp v6 连接?我不想杀死具有开放连接的整个进程,因为这显然会使其他所有人退出该进程。我需要从一个单独的进程中执行此操作,因此无法访问套接字句柄等。我正在使用 Windows API 来获取 tcp 表等,所以我知道哪些连接处于事件状态。
最佳答案
一种方法可能是枚举系统上所有打开的句柄,或者至少是给定目标进程的打开句柄,直到找到 SOCKET
。处理您感兴趣的(参见 HOWTO: Enumerate handles 、 Socket Handles 和 C++ Get Handle of Open Sockets of a Program - 虽然我不确定您将如何检索 SOCKET
的 IP/端口对以与您的事件连接进行比较感兴趣,无需将远程 getsockname()
/getpeername()
调用注入(inject)到 SOCKET
的拥有进程中。
一旦找到 SOCKET
处理你想要的,然后你可以使用 DuplicateHandle()
关闭它与 DUPLICATE_CLOSE_SOURCE
标志 1。
1:这就是 Process Explorer 中的“关闭句柄”功能的工作原理。
关于windows - 如何从任何进程关闭 Windows 上的套接字(ipv4 和 ipv6)连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55620627/