如何通过Windows命令行关闭TCP和UDP端口

235

有人知道如何通过Windows命令行关闭TCP或UDP套接字的单个连接吗?

通过搜索,我看到一些人问同样的问题。但答案看起来像是netstat或netsh命令的手册,重点是如何监视端口。我不需要关于如何监视它们的答案(我已经在这方面做到了),我想要关闭/终止它们。

编辑,为了澄清:假设我的服务器侦听TCP端口80。客户端建立连接,端口56789被分配给它。然后,我发现这种连接是不必要的(例如,该用户正在做坏事,我们要求他们停止,但连接在某个地方没有断开)。通常,我会添加防火墙来完成这项工作,但这需要一些时间,而我处于紧急情况下。在这里杀死拥有连接的进程真的是一个糟糕的主意,因为这将使服务器崩溃(所有用户将失去功能,而我们只想选择性和暂时地中断这一个连接)。


1
为什么?你无法通过命令行或文件关闭端口。你必须关闭拥有它们的程序。或者你是在指防火墙操作吗?你的问题仍然不清楚。 - user207421
这两个得票最多的答案是错误的(我给它们投了反对票)。 正确且被接受的答案在这里:https://stackoverflow.com/a/14626532/540552 - undefined
18个回答

3

3

如果您没有拥有这些套接字,就无法关闭服务器上的套接字,因此您实际上无法在不运行拥有服务器套接字的进程中关闭套接字。

然而,还有另一种选择,即告诉客户端关闭其套接字。向客户端连接的端口发送RST TCP数据包将导致客户端断开连接。您可以使用nmap进行RST扫描来执行此操作。

http://nmap.org/


2

你可以使用像Sysinternals的TCPView这样的程序。我猜它可以在监控和终止不必要的连接方面对你有很大帮助。


1
为了关闭端口,您可以识别正在监听此端口的进程并终止该进程。

2
@Victor,我看到了,但是没有办法在不关闭进程的情况下强制关闭端口。另一个可能性是以这样的方式编写服务器程序,即您可以监视和管理客户端的控制面板。 - Darin Dimitrov
1
另外,如果套接字监听的接口被关闭,套接字也将会被关闭。 - rustyx
我相信他是在要求一个例子。 - eyoeldefare

1
CurrPorts对我们来说无法使用,我们只能通过ssh访问服务器,因此也无法使用TCPView。我们也无法杀死进程,以免断开其他连接。我们最终做的事情并没有被建议,那就是在Windows防火墙上阻止连接。是的,这将阻止符合规则的所有连接,但在我们的情况下只有一个连接(我们感兴趣的连接)。
netsh advfirewall firewall add rule name="Conn hotfix" dir=out action=block protocol=T
CP remoteip=192.168.38.13

将IP替换为您需要的IP,并根据需要添加其他规则。


-1

即时/可行/部分答案https://dev59.com/7FHTa4cB1Zd3GeqPQVG4#20130959

与之前的答案不同,该答案没有使用netstat -a -o -n,因此不需要查看使用这些端口的应用程序名称,避免了查看极长列表的麻烦。


6
这与HaoQi Li的答案几乎相同。这将会杀死服务器进程并且中断所有连接,而不只是中断不想要的那一个。挑战在于只中断不想要的那一个连接,而不做任何多余的操作。 - Victor Stafusa - BozoNaCadeia
我同意维克多的观点。那不是问题的答案。所以你也可以禁用网络适配器... - Sebastian

-1

如果你正在运行安装了PowerShell v4或更高版本的Windows 8、Windows Server 2012或更高版本,则可以使用下面的脚本。它会查找与该端口相关联的进程并终止它们(即杀死进程以及其连接;而不仅仅是连接)。

代码

#which port do you want to kill
[int]$portOfInterest = 80

#fetch the process ids related to this port
[int[]]$processId = Get-NetTCPConnection -LocalPort $portOfInterest | 
    Select-Object -ExpandProperty OwningProcess -Unique | 
    Where-Object {$_ -gt 0} 

#kill those processes
Stop-Process -Id $processId 

文档:


3
我在Windows 10上进行了测试,发现它并不仅仅杀死了TCP连接,而是整个正在使用该连接的进程或线程。正如Victor所说,这并不是他的目标。 - Sebastian

-4

是的,有可能关闭TCP或UDP端口,DOS中有一个命令可以实现。

TASKKILL /f /pid 1234 

我希望这对您有用


4
我在Windows 10上测试过,它不会单独关闭TCP连接,而是会关闭整个正在使用该连接的进程或线程。正如Victor所说的那样,这并不是他的目标。 - Sebastian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接