首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查看在Windows上保留临时端口范围的内容?

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

Stack Overflow用户
提问于 2019-01-02 17:05:43
回答 3查看 24.7K关注 0票数 78

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

当我运行netsh int ip show excludedportrange protocol=tcp时,我看到了以下内容

代码语言:javascript
复制
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

代码语言:javascript
复制
netsh int ip delete excludedportrange protocol=tcp numberofports=100 startport=49909

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

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

作为正常检查,我还运行了resmon.exe,并确认端口5000550006上没有任何运行。

我如何知道是什么添加了excludedportrange

编辑:,我把范围缩小到Hyper-V。如果我禁用Hyper-V,那么这些端口就不会被排除在外。

EN

回答 3

Stack Overflow用户

发布于 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从不尝试使用它们):

代码语言:javascript
复制
netsh int ipv4 add excludedportrange protocol=tcp startport=9012 numberofports=2

(谢谢@Venryx提醒我)

其他方法

在一个类似的关于为什么码头工人不能打开港口 (24拇指向上)的问题的回答中,这也适用于我:

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

不过,有人会做警告 (4拇指向上)。您的邮资可能会有所不同。它对我有效,主要是因为我在成功运行之后才看到下面的警告.

这(netcfg -d)是危险的命令,它损坏了我的码头,它不再启动。即使在重新安装HyperV之后。和重启机。该命令似乎删除了几个网络适配器。此外,重新启动什么也不做。我不得不重新设置(松散的)容器和图像,但这导致了另一个问题。

一个类似的码头问题的另一个答案 (129个大拇指)有这样的功能,但对我来说似乎更多,所以我没有尝试:

@veqryn解决办法对我有用,步骤如下:

  1. 禁用超级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

当您的系统返回时,您将能够成功地绑定到该端口。

票数 64
EN

Stack Overflow用户

发布于 2022-02-19 23:32:20

在非冲突的位置设置Windows“动态端口范围”

我们设法控制了这个问题,因为在无法将端口的需求更改为其他位置的情况下(比如不可配置的应用程序)。

发出命令时:

代码语言:javascript
复制
netsh int ip show excludedportrange protocol=tcp

您将得到一个具有保留端口范围列表的输出:

代码语言:javascript
复制
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个端口块)。这很痛苦,因为如果您正在开发一个使用多个端口的应用程序或更大的解决方案,那么在重新启动您的系统后,有时会遇到冲突,而有些时候则不会得到

要查找“动态端口范围”,可以发出以下命令:

代码语言:javascript
复制
netsh int ipv4 show dynamicport tcp

答案是:

代码语言:javascript
复制
Protocol tcp Dynamic Port Range
---------------------------------
Start Port      : 1024
Number of Ports : 64511

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

假设您的开发位于端口60000之下,可以发出以下命令来限制动态端口范围--(您必须拥有管理员权限)

代码语言:javascript
复制
netsh int ipv4 set dynamic tcp start=60001 num=5534

要使Hyper(和Windows在一般情况下)使用这个新的动态范围,您必须重新启动您的系统。

现在,如果我们请求排除的端口范围:

代码语言:javascript
复制
netsh int ip show excludedportrange protocol=tcp

答复发生了变化:

代码语言:javascript
复制
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港口。

票数 10
EN

Stack Overflow用户

发布于 2021-09-01 07:43:45

我也有同样的问题,卸载了Hyper-V,但预备役港口仍然在那里。经过多次尝试,我发现Windows 是要卸载的罪魁祸首

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54010365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档