如何查看在Windows上保留临时端口范围的内容



我有一个Windows应用程序需要使用端口5000550006,但它被阻止了。

当我运行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.

因此,我的机器上有一些东西正在保留端口4990950008,这可能是导致我的应用程序失败的原因。我尝试用以下命令删除此excludedportrange

netsh int ip delete excludedportrange protocol=tcp numberofports=100 startport=49909

但我看到一个错误Access is denied.,这让我认为保留这个端口的东西正在积极运行,但我不知道这可能是什么

同样奇怪的是,在运行该命令后,即使我看到了一个错误,如果我重新启动excludedportrange,也会有所不同。

作为健全性检查,我还运行了resmon.exe,并确认端口5000550006上没有运行任何内容。

如何判断添加excludedportrange的内容?

编辑:我已经将范围缩小到Hyper-V。如果禁用Hyper-V,则不会排除这些端口。

调查并释放端口

Hyper-V似乎保留了随机端口(或者至少与Hyper-V相关的端口)。使用netsh int ip show excludedportrange protocol=tcp确认不工作的端口在输出中。

这对我来说起到了解放港口的作用。这对我来说似乎没有什么侵扰性(竖起25个大拇指):

这通常是由Windows NAT驱动程序(winnat)引起的,停止并重新启动该服务可能会解决问题。

net stop winnat
docker start ...
net start winnat

之后,端口不再保留,但我的WSL2终端不再连接到互联网,所以我需要在这之后重新启动,以使一切恢复正常。

从现在起保留端口

如果你再不做任何事情,你很可能会再次遇到这个问题。因此,例如,保留端口9012和9013供您将来使用(因此winnat永远不会尝试使用它们):

netsh int ipv4 add excludedportrange protocol=tcp startport=9012 numberofports=2

(感谢@Venryx提醒我)

其他方法

在回答一个关于docker为什么不能打开端口的类似问题时(竖起24个大拇指),这也对我有效:

netcfg -d--这将清理所有网络设备,并需要重新启动

不过确实有人对此发出了警告(竖起4个大拇指)。您的邮件地址可能有所不同。它对我有效,主要是因为我直到成功运行后才看到以下警告。。。。

(netcfg -d)是一个危险的命令,它损坏了我的docker,不再启动。即使在重新安装HyperV。以及重新启动机器。此命令似乎删除了几个网络适配器。此外,重新启动也没有任何作用。我不得不重置(松散的)容器和图像,但这导致我遇到了另一个问题

类似docker问题的另一个答案(129个赞)是这样的,但对我来说似乎更麻烦,所以我没有尝试:

@veqryn解决方法对我有效,步骤是:

  1. 禁用hyper-v(需要几次重新启动)

    dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

  2. 当你完成所有需要的重新启动时,保留你想要的端口,这样hyper-v就不会将其保留回

    netsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1 store=persistent

  3. 重新启用hyper-V(需要几次重新启动)

    dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

当您的系统恢复时,您将能够成功绑定到该端口。

设置窗口"动态端口范围";在一个没有冲突的地方

我们设法解决了这个问题,因为您无法将端口的需求更改为其他位置(如不可配置的应用程序)。

当您发出命令时:

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-V(以及一般的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 以下

我遇到了同样的问题,并卸载了Hyper-V,但保留端口仍然存在。经过几次尝试,我确定Windows沙盒是取消安装的罪魁祸首

相关内容

  • 没有找到相关文章

最新更新