我有一个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
的端口,这可能是导致我的应用程序失败的原因。
netsh int ip delete excludedportrange protocol=tcp numberofports=100 startport=49909
型
但是我看到了一个错误Access is denied.
,这让我认为无论是什么保留了这个端口正在积极地运行,但我不知道那可能是什么。
同样奇怪的是,在运行该命令后,即使我看到了一个错误,如果我重新启动excludedportrange
,情况也会不同。
作为一个健全性检查,我还运行了resmon.exe
,并确认没有任何东西运行在端口50005
和50006
。
我如何知道添加excludedportrange
的是什么?
**编辑:**我已将此范围缩小到Hyper-V.如果禁用Hyper-V,则不会排除这些矶钓.
4条答案
按热度按时间pdsfdshx1#
调查并释放端口
看起来Hyper-V保留了随机端口(或者至少与Hyper-V相关的端口)。使用
netsh int ip show excludedportrange protocol=tcp
确认不工作的端口是否在输出中。这对我来说很有效,可以释放端口。对我来说,这似乎并不打扰(25个大拇指):
这通常是由Windows NAT驱动程序(winnat)引起的,停止并重新启动该服务可以解决此问题。
字符串
在此之后,端口不再保留,但我的WSL 2终端不再连接到互联网,所以我需要重新启动后,让一切再次工作。
从现在开始预留端口
如果你不做更多的事情,你可能会再次遇到这个问题。所以,例如,保留端口9012和9013供你将来使用(所以
winnat
永远不会尝试使用它们):型
(谢谢@Venryx提醒我)
其他方法
在回答一个关于为什么Docker不能打开端口的类似问题时(24个大拇指),这对我来说也很有效:
netcfg -d
--这将清理所有网络设备,并需要重新启动有人确实警告过它(竖起4个大拇指)。你的邮寄时间可能会有所不同。它对我有效,主要是因为我没有看到下面的警告,直到我成功运行它。
那个(
netcfg -d
)是危险的命令,它损坏了我的Docker,它不再启动了。即使在重新安装HyperV之后。重新启动机器。似乎这个命令删除了几个网络适配器。重新启动也没有任何作用。我不得不重置(松散的)容器和映像,但这导致了另一个问题另一个类似的docker问题的答案(129个大拇指)是这样的,但它似乎对我来说更复杂,所以我没有尝试:
@veqryn解决方法对我有效,步骤是:
1.禁用hyper-v(这需要重新启动几次)
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
个1.完成所有必需的重启后,保留所需的端口,以便hyper-v不会将其保留回去
netsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1 store=persistent
个1.重新启用hyper-V(这将需要几次重启)
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
个当您的系统恢复正常时,您将能够成功绑定到该端口。
p5fdfcr12#
在不冲突的地方设置Windows“动态端口范围”
我们设法包含这个问题,对于您无法将端口的需求更改为其他位置的情况(如不可配置的应用程序)。
当您发出命令时:
字符串
您将得到一个输出,其中包含一个保留的端口范围列表:
型
最有可能的原因是Windows Hyper-V(微软的硬件虚拟化产品)保留了随机的端口范围(通常是100个端口的块)。这是一个痛苦的问题,因为如果你正在开发一个使用多个端口的应用程序或更大的解决方案,* 有时你会遇到冲突,而有时在重新启动系统后不会发生冲突。
要查找 “动态端口范围”,您可以发出以下命令:
型
答案是:
型
您可以指示Windows将此范围修改为冲突区域之外的范围。
假设你的开发是在60000端口以下,你可以发出下面的命令来限制它的动态端口范围 (你必须有管理员权限):
型
要使Hyper-V(以及一般的Windows)使用这个新的动态范围,您必须重新启动系统。
现在,如果我们请求排除的端口范围:
型
答案已经改变:
型
只有“管理端口排除”保留在端口60001之下
u59ebvdq3#
我也遇到了同样的问题,并重新安装了Hyper-V,但保留端口仍然存在。
nwsw7zdq4#
回答
首先,以admin身份在
cmd.exe
中运行netsh int ipv4 show dynamicport tcp
,确认这些答案适用于您。如果您看到有问题的端口在这些范围之一内,请执行以下步骤:
1.以管理员身份运行
cmd.exe
1.运行
netsh int ipv4 set dynamic tcp start=49152 num=16383
1.重新启动计算机
1.确认新的动态端口范围
netsh int ipv4 show dynamicport tcp
基本原理
动态端口范围**应为49152-65535
来源
为了符合Internet Internet用户号码管理局(IANA)的建议,Microsoft增加了传出连接的动态客户端端口范围。新的默认起始端口为49152,新的默认结束端口为65535。
端口号以各种方式分配,基于三个范围:系统端口(0-1023),用户端口(1024-49151)和动态和/或专用端口(49152-65535);这些范围的不同用途在[RFC 6335]中描述。
动态端口,也称为专用端口或临时端口,从49152-65535(从未分配)