我有一个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,则不会排除这些端口。
答案 0 :(得分:0)
似乎Hyper-V保留了随机端口(或至少与Hyper-V有关的端口)。
在回答有关为何docker couldn't open ports(24竖起大拇指)的类似问题时,这对我有用:
netcfg -d
-这将清理所有网络设备,并需要重新启动
尽管有人warn about it(4个大拇指)。您的邮件可能会有所不同。它对我有用,直到成功运行警告后我才看到警告。
(
netcfg -d
)是危险的命令,它损坏了我的docker,并且不再启动。即使在重新安装HyperV之后。并重启机器。看来此命令删除了几个网络适配器。重新启动也无济于事。我不得不重置(松散)容器和图像,但这又导致了另一个问题
another answer to a similar docker question(竖起大拇指129)具有此功能,但对我而言它似乎更具吸引力,所以我没有尝试:
@veqryn解决方法对我有用,步骤为:
禁用hyper-v(需要重新启动两次)
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
完成所有必需的重新启动后,请保留所需的端口,以便hyper-v不会保留它
netsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1
重新启用hyper-V(需要重新启动几次)
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
当系统恢复运行时,您将能够成功绑定到该端口。