有人知道如何通过 Windows 命令行关闭单个连接的 TCP 或 UDP 套接字吗?
谷歌搜索,我看到有人问同样的事情。但答案看起来像是 netstat 或 netsh 命令的手册页,重点是如何监控端口。我不想要关于如何监控它们的答案(我已经这样做了)。我想关闭/杀死他们。
编辑,澄清一下:假设我的服务器监听 TCP 端口 80。客户端建立连接并为其分配端口 56789。然后,我发现这个连接是不受欢迎的(例如,这个用户正在做坏事,我们要求他们停止,但连接并没有在途中的某个地方断开)。通常,我会添加防火墙来完成这项工作,但这需要一些时间,而且我处于紧急情况。杀死拥有该连接的进程在这里确实是一个坏主意,因为这会关闭服务器(当我们只想有选择地暂时删除这个连接时,所有用户都会失去功能)。
是的,这是可能的。您不必是拥有套接字的当前进程即可关闭它。考虑一下远程机器、网卡、网线和您的操作系统都可能导致套接字关闭。
还要考虑 Fiddler 和 Desktop VPN 软件可以将自己插入网络堆栈并向您显示所有流量或重新路由所有流量。
因此,您真正需要的只是让 Windows 提供一个 API 直接允许这样做,或者让某人编写一个运行有点像 VPN 或 Fiddler 的程序,并为您提供一种关闭通过它的套接字的方法。
至少有一个程序(CurrPorts)可以做到这一点,我今天使用它来关闭在 CurrPorts 启动之前启动的进程上的特定套接字。当然,要做到这一点,您必须以管理员身份运行它。
请注意,可能不容易导致程序不侦听端口(嗯,这是可能的,但该功能被称为防火墙......),但我认为这里没有被问到。我相信问题是“我如何有选择地关闭一个活动连接(套接字)到我的程序正在侦听的端口?”。问题的措辞有点偏离,因为给出了不希望的入站客户端连接的端口号,它被称为“端口”,但很明显它是对那个套接字的引用,而不是侦听端口。