我有一个Windows应用程序,它需要使用端口50005和50006,但是它被阻塞了。
当我运行netsh int ip show excludedportrange protocol=tcp时,我看到了以下内容
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
5357 5357
49709 49808
49809 49908
49909 50008
50009 50108
50109 50208
50280 50379
* - Administered port exclusions.因此,我的机器上的一些东西是将端口49909保留给50008,这大概是导致我的应用程序失败的原因。我尝试用以下命令删除这个excludedportrange:
netsh int ip delete excludedportrange protocol=tcp numberofports=100 startport=49909但是我看到了一个错误Access is denied.,它使我认为保留这个端口的东西正在积极运行,但我不知道这可能是什么。
同样奇怪的是,在运行该命令之后,即使我看到了一个错误,如果我重新启动excludedportrange,情况就会有所不同。
作为正常检查,我还运行了resmon.exe,并确认端口50005和50006上没有任何运行。
我如何知道是什么添加了excludedportrange
编辑:,我把范围缩小到Hyper-V。如果我禁用Hyper-V,那么这些端口就不会被排除在外。
发布于 2020-12-11 15:52:36
调查和释放港口
看来Hyper-V保留了随机端口(或者至少与Hyper-V相关的东西).使用netsh int ip show excludedportrange protocol=tcp确认不工作的端口在输出中。
这帮我把港口解放了。在我看来,这似乎不算打扰(25大拇指):
这通常是由Windows NAT驱动程序(winnat)引起的,停止并重新启动该服务可能会解决问题。 停止温纳特码头开始..。net启动winnat
在此之后,端口不再被保留,但我的WSL2终端不再与互联网连接,因此我需要在此之后重新启动,以使一切恢复工作。
从现在起保留港口
如果你不做更多的事情,你很可能再次遇到这个问题。因此,例如,为将来使用预留端口9012和9013 (因此winnat从不尝试使用它们):
netsh int ipv4 add excludedportrange protocol=tcp startport=9012 numberofports=2(谢谢@Venryx提醒我)
其他方法
在一个类似的关于为什么码头工人不能打开港口 (24拇指向上)的问题的回答中,这也适用于我:
netcfg -d--这将清理所有网络设备,并需要重新启动。
不过,有人会做警告 (4拇指向上)。您的邮资可能会有所不同。它对我有效,主要是因为我在成功运行之后才看到下面的警告.
这(
netcfg -d)是危险的命令,它损坏了我的码头,它不再启动。即使在重新安装HyperV之后。和重启机。该命令似乎删除了几个网络适配器。此外,重新启动什么也不做。我不得不重新设置(松散的)容器和图像,但这导致了另一个问题。
一个类似的码头问题的另一个答案 (129个大拇指)有这样的功能,但对我来说似乎更多,所以我没有尝试:
@veqryn解决办法对我有用,步骤如下:
dism.exe /Online /Disable-Feature:Microsoft-Hyper-Vnetsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1 store=persistentdism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All当您的系统返回时,您将能够成功地绑定到该端口。
发布于 2022-02-19 23:32:20
在非冲突的位置设置Windows“动态端口范围”
我们设法控制了这个问题,因为在无法将端口的需求更改为其他位置的情况下(比如不可配置的应用程序)。
发出命令时:
netsh int ip show excludedportrange protocol=tcp您将得到一个具有保留端口范围列表的输出:
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
33474 33573
50000 50059 *
58159 58258
58259 58358
58359 58458
58459 58558
58559 58658
58659 58758
58759 58858
* - Administered port exclusions.最有可能的原因是Windows Hyper-V (微软的硬件虚拟化产品)保留随机端口范围(通常是100个端口块)。这很痛苦,因为如果您正在开发一个使用多个端口的应用程序或更大的解决方案,那么在重新启动您的系统后,有时会遇到冲突,而有些时候则不会得到。
要查找“动态端口范围”,可以发出以下命令:
netsh int ipv4 show dynamicport tcp答案是:
Protocol tcp Dynamic Port Range
---------------------------------
Start Port : 1024
Number of Ports : 64511您可以指示Windows在冲突区域之外修改此范围。
假设您的开发位于端口60000之下,可以发出以下命令来限制动态端口范围--(您必须拥有管理员权限)
netsh int ipv4 set dynamic tcp start=60001 num=5534要使Hyper(和Windows在一般情况下)使用这个新的动态范围,您必须重新启动您的系统。
现在,如果我们请求排除的端口范围:
netsh int ip show excludedportrange protocol=tcp答复发生了变化:
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
50000 50059 *
63904 64003
64004 64103
64105 64204
64205 64304
64305 64404
64405 64504
64505 64604
64605 64704
* - Administered port exclusions.只有“托管港口除外”仍低于60001港口。
发布于 2021-09-01 07:43:45
我也有同样的问题,卸载了Hyper-V,但预备役港口仍然在那里。经过多次尝试,我发现Windows 是要卸载的罪魁祸首
https://stackoverflow.com/questions/54010365
复制相似问题