有人知道如何通过windows命令行关闭单个连接的TCP或UDP套接字吗?
在谷歌上搜索这件事时,我看到一些人问同样的问题。但答案看起来像是netstat或netsh命令的手册页面,重点是如何监控端口。我不想要关于如何监控它们的答案(我已经这样做了)。我想关闭/杀死他们。
编辑,以便澄清:假设我的服务器侦听TCP端口80。客户端建立连接,并为其分配端口56789。然后,我发现这个连接是不受欢迎的(例如,这个用户正在做坏事,我们要求他们停止连接,但连接没有在过程中的某个地方断开)。通常,我会添加一个防火墙来完成这项工作,但这需要一些时间,而且我处于紧急情况下。在这里杀死拥有连接的进程真的不是一个好主意,因为这会关闭服务器(当我们只想有选择地暂时丢弃这个连接时,所有用户都会失去功能)。
发布于 2013-01-31 21:08:25
是的,这是可能的。您不必是拥有套接字的当前进程才能关闭它。考虑一下,远程计算机、网卡、网线和操作系统都可能导致套接字关闭。
还要考虑Fiddler和Desktop VPN软件可以将自身插入到网络堆栈中,并向您显示所有流量或重新路由所有流量。
因此,你真正需要的就是让Windows提供一个API,直接允许这样做,或者让某人编写一个程序,它的操作有点像VPN或Fiddler,并为您提供了一种关闭通过它的套接字的方法。
至少有一个程序(CurrPorts)可以做到这一点,我今天使用它来关闭在CurrPorts启动之前启动的进程上的特定套接字。当然,要做到这一点,您必须以管理员身份运行它。
请注意,可能不太容易导致程序不侦听端口(嗯,这是可能的,但该功能被称为防火墙...),但我认为这里没有问到这一点。我认为问题是“我如何有选择地关闭到我的程序正在侦听的端口的一个活动连接(套接字)?”这个问题的措辞有点离谱,因为给出了不需要的入站客户端连接的端口号,它被称为" port“,但很明显,它是对该套接字的引用,而不是侦听端口。
发布于 2018-03-25 04:57:27
如果您知道要释放的端口,可以通过查找指定的端口对netstat列表进行排序,如下所示:
netstat -ano | findstr :8080
然后,pid将出现在您可以用taskkill杀死的右端。
taskkill /pid 11704 /F
您可能还想看看这个专门针对本地主机的question,但我认为它是相关的:
发布于 2016-12-25 17:17:57
例如,您想要释放端口8080,然后执行以下命令。
netstat -ano
taskkill /f /im [PID of the port 8080 got from previous command]
完成了!
https://stackoverflow.com/questions/8688949
复制相似问题