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

a7qyws3x  于 2023-11-21  发布在  Windows
关注(0)|答案(4)|浏览(221)

我有一个Windows应用程序需要使用5000550006端口,但它被阻止了。
当我运行netsh int ip show excludedportrange protocol=tcp时,我看到以下内容:

  1. Protocol tcp Port Exclusion Ranges
  2. Start Port End Port
  3. ---------- --------
  4. 5357 5357
  5. 49709 49808
  6. 49809 49908
  7. 49909 50008
  8. 50009 50108
  9. 50109 50208
  10. 50280 50379
  11. * - Administered port exclusions.

字符串
所以我的机器上的某个东西保留了4990950008的端口,这可能是导致我的应用程序失败的原因。

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


但是我看到了一个错误Access is denied.,这让我认为无论是什么保留了这个端口正在积极地运行,但我不知道那可能是什么。
同样奇怪的是,在运行该命令后,即使我看到了一个错误,如果我重新启动excludedportrange,情况也会不同。
作为一个健全性检查,我还运行了resmon.exe,并确认没有任何东西运行在端口5000550006
我如何知道添加excludedportrange的是什么?

**编辑:**我已将此范围缩小到Hyper-V.如果禁用Hyper-V,则不会排除这些矶钓.

pdsfdshx

pdsfdshx1#

调查并释放端口

看起来Hyper-V保留了随机端口(或者至少与Hyper-V相关的端口)。使用netsh int ip show excludedportrange protocol=tcp确认不工作的端口是否在输出中。
这对我来说很有效,可以释放端口。对我来说,这似乎并不打扰(25个大拇指):
这通常是由Windows NAT驱动程序(winnat)引起的,停止并重新启动该服务可以解决此问题。

  1. net stop winnat
  2. docker start ...
  3. net start winnat

字符串
在此之后,端口不再保留,但我的WSL 2终端不再连接到互联网,所以我需要重新启动后,让一切再次工作。

从现在开始预留端口

如果你不做更多的事情,你可能会再次遇到这个问题。所以,例如,保留端口9012和9013供你将来使用(所以winnat永远不会尝试使用它们):

  1. 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
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
当您的系统恢复正常时,您将能够成功绑定到该端口。

展开查看全部
p5fdfcr1

p5fdfcr12#

在不冲突的地方设置Windows“动态端口范围”

我们设法包含这个问题,对于您无法将端口的需求更改为其他位置的情况(如不可配置的应用程序)。
当您发出命令时:

  1. netsh int ip show excludedportrange protocol=tcp

字符串
您将得到一个输出,其中包含一个保留的端口范围列表:

  1. Protocol tcp Port Exclusion Ranges
  2. Start Port End Port
  3. ---------- --------
  4. 33474 33573
  5. 50000 50059 *
  6. 58159 58258
  7. 58259 58358
  8. 58359 58458
  9. 58459 58558
  10. 58559 58658
  11. 58659 58758
  12. 58759 58858
  13. * - Administered port exclusions.


最有可能的原因是Windows Hyper-V(微软的硬件虚拟化产品)保留了随机的端口范围(通常是100个端口的块)。这是一个痛苦的问题,因为如果你正在开发一个使用多个端口的应用程序或更大的解决方案,* 有时你会遇到冲突,而有时在重新启动系统后不会发生冲突。
要查找 “动态端口范围”,您可以发出以下命令:

  1. netsh int ipv4 show dynamicport tcp


答案是:

  1. Protocol tcp Dynamic Port Range
  2. ---------------------------------
  3. Start Port : 1024
  4. Number of Ports : 64511

您可以指示Windows将此范围修改为冲突区域之外的范围。

假设你的开发是在60000端口以下,你可以发出下面的命令来限制它的动态端口范围 (你必须有管理员权限)

  1. netsh int ipv4 set dynamic tcp start=60001 num=5534


要使Hyper-V(以及一般的Windows)使用这个新的动态范围,您必须重新启动系统。
现在,如果我们请求排除的端口范围:

  1. netsh int ip show excludedportrange protocol=tcp


答案已经改变:

  1. Protocol tcp Port Exclusion Ranges
  2. Start Port End Port
  3. ---------- --------
  4. 50000 50059 *
  5. 63904 64003
  6. 64004 64103
  7. 64105 64204
  8. 64205 64304
  9. 64305 64404
  10. 64405 64504
  11. 64505 64604
  12. 64605 64704
  13. * - Administered port exclusions.


只有“管理端口排除”保留在端口60001之下

展开查看全部
u59ebvdq

u59ebvdq3#

我也遇到了同样的问题,并重新安装了Hyper-V,但保留端口仍然存在。

nwsw7zdq

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(从未分配)

展开查看全部

相关问题