windows - 如何从任何进程关闭 Windows 上的套接字(ipv4 和 ipv6)连接?

标签 windows sockets winapi

如何在 Windows 上关闭 tcp v4 和 tcp v6 连接?我不想杀死具有开放连接的整个进程,因为这显然会使其他所有人退出该进程。我需要从一个单独的进程中执行此操作,因此无法访问套接字句柄等。我正在使用 Windows API 来获取 tcp 表等,所以我知道哪些连接处于事件状态。

最佳答案

一种方法可能是枚举系统上所有打开的句柄,或者至少是给定目标进程的打开句柄,直到找到 SOCKET。处理您感兴趣的(参见 HOWTO: Enumerate handlesSocket HandlesC++ 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/

相关文章:

windows - 获取 Active Directory 用户列表及其全名和电子邮件

c++ - 在 WIN32 上结合 CreateProcess 和 AllowSetForegroundWindow

c - 使用 _sprintf_l 格式化 double 和数千个数

c++ - 使用 boost::asio 从套接字读取 JSON

c - 为什么 getaddrinfo 需要 3 个 header ?

C++ WINSOCK tcpaccept 在 "attack"之后停止接受连接

c++ - MSPaint 未接收通过 PostCommand 发送的命令

c - 捕获WM_CHAR消息时如何检测UNICODE字符?

C++ win32复选框列表-多重选择

c++ - 如何为MS VC++开发的C++程序分配特定段的代码