windows 10 中的管理端口排除项是什么?
What is Administered port exclusions in windows 10?
我在 windows 10 中启用了 hyper-v。
当我检查排除的端口时,我得到:
C:\> netsh interface ipv4 show excludedportrange protocol=tcp
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
5357 5357
9800 9800
9801 9801
49671 49770
49871 49970
50000 50059 *
61117 61216
61220 61319
61902 62001
* - Administered port exclusions.
为什么 Hyper-V 保留这些端口?
管理端口排除(即范围 50000-50059)与其他端口排除有何不同?
例如,当我尝试在 golang 中使用 net.Listen() ping 所有这些端口时,除 50000-50059 returns 错误之外的所有端口:
listen tcp 127.0.0.1:9801: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
在 windows 10 中,有时我们会收到特定端口的错误:
Ports are not available: listen tcp 0.0.0.0:55555: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
当看到这个错误时,我们的第一直觉是我们需要的端口以某种方式被另一个应用程序使用。因此,如果我们检查正在使用的端口:
netstat -aon | find "55555"
但结果可能显示该端口尚未被使用。
那么问题可能是Windows保留了一些端口,它们是我们不能用于其他目的的排除端口。我们可以使用以下命令列出这些端口:
C:\Users\Xyz> netsh interface ipv4 show excludedportrange protocol=tcp
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
1031 1130
1131 1230
1231 1330
1331 1430
1431 1530
1561 1660
2363 2462
2463 2562
2563 2662
2663 2762
2763 2862
2863 2962
5357 5357
50000 50099 *
55500 55599
* - Administered port exclusions.
为什么 windows 保留这些端口?
- 这些端口可能由于已识别的病毒/恶意软件而被 Microsoft 阻止 activity。
- 我们在 windows 更新后遇到了这种情况。然后我们安装了下一个更新并重新启动了机器。这次范围发生了变化,我们的端口可用了。
- 有时是启用的 Hyper-V 功能(我们为 docker-for-windows 安装启用它)会执行此操作。
可能还有其他原因。
但是如果我们尝试使用以下命令删除端口范围排除(即使作为管理员),它会 return 一个错误,指出它没有权限。
netsh int ipv4 delete excludedportrange protocol=tcp startport=55500 numberofports=100
Hyper-V 引入的端口排除
如果是Hyper-V引入的端口排除,我们最终有两种可能的解决方案(可能还有其他):
更改我们尝试使用的端口。新端口应该不属于排除项。
禁用Hyper-V,保留一个端口范围供我们使用,然后再次启用Hyper-V。
第二个解决方案的步骤如下:
1.禁用 Hyper-V
方法 1 - Windows 特征工具:
在控制面板 -> select 程序和功能 -> Select 'Turn Windows features on or off' -> 取消选中 Hyper-V -> 应用
方法 2 - 通过 Powershell:
打开 Powershell(以管理员身份)并运行命令:
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
方法 3 - 通过命令提示符:
打开命令提示符(以管理员身份)和运行命令:
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
之后需要重新启动系统。
2。保留你想要的端口(范围),这样 hyper-v 就不会保留它了。
重启后,如果我们尝试列出端口排除项,我们可以看到现在有些范围不存在(尤其是我们想要的范围)。现在保留我们需要的端口范围:
netsh int ipv4 add excludedportrange protocol=tcp startport=55500 numberofports=100
3。重新启用 Hyper-V
您也可以使用上面提到的所有三种方法来启用该功能。
例如,显示一个带有 dism:
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
这也需要重新启动系统。
当您的系统恢复后,尝试再次列出端口排除项。
这里发生的是指定的端口范围被添加到 管理的端口排除项。这意味着我们将其保留用于我们的目的。
这样做之后,Hyper-V 足够聪明,可以在我们预先保留的范围内启动它自己的保留范围(注意结果中低于 55500–55599 的范围是受保护的):
C:\Users\Xyz> netsh interface ipv4 show excludedportrange protocol=tcp
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
1031 1130
1131 1230
1231 1330
1331 1430
1431 1530
1561 1660
2363 2462
2463 2562
2563 2662
2663 2762
2763 2862
2863 2962
5357 5357
50000 50099 *
55500 55599 *
* - Administered port exclusions.
现在您将能够成功绑定到该范围内的端口。
Windows 更新后引入的端口排除
有时,在 Windows 更新后,突然无法使用特定端口,并且在使用 netstat
命令检查端口使用情况时没有列出任何内容。
最重要的是,您也没有启用 Hyper-V!
在这种情况下,您可以尝试以下 2 个解决方法:
(不确定是否适合所有人,但您可以尝试一下!)
选项 1:
检查排除的端口范围
netsh interface ipv4 show excludedportrange protocol=tcp
例如,考虑端口范围 55485-55584
(包括我们需要的端口:55555
)在 windows 更新后被排除在外。
启用 Hyper-V
再次检查排除的端口范围:
netsh interface ipv4 show excludedportrange protocol=tcp
您可能仍会看到我们所需的端口被排除在外。但这一次,排除范围可能有所不同,例如 55506-555605
,这可能是 Hyper-V 引入的覆盖(不确定这是否是实际原因)。
禁用 Hyper-V
再次检查排除的端口范围:
netsh interface ipv4 show excludedportrange protocol=tcp
这一次,如果您发现您需要的端口不在排除范围内,请继续执行下一步保留您的端口。
预留我们需要的端口范围:
netsh int ipv4 add excludedportrange protocol=tcp startport=55500 numberofports=100
此范围将被列为管理端口排除项。
现在尝试使用您需要的端口。
选项 2:
由于问题通常是由 Windows NAT 驱动程序 (winnat) 引起的,停止并重新启动该服务可能会解决问题。
注意!:停止 winnat 服务可能会断开您的网络。
检查排除的端口范围
netsh interface ipv4 show excludedportrange protocol=tcp
停止winnat服务:
net stop winnat
检查排除的端口范围发生了什么:
netsh interface ipv4 show excludedportrange protocol=tcp
预留端口范围禁止动态预留您需要的端口:
netsh int ipv4 add excludedportrange protocol=tcp startport=55500 numberofports=100
启动winnat服务:
net start winnat
检查排除的端口范围
netsh interface ipv4 show excludedportrange protocol=tcp
您可以看到有端口排除,但您的端口被列为 Administered port exclusion。
现在尝试使用您需要的端口。
什么是管理端口排除项?
所以基本上,管理的端口排除项 是我们可以在 Windows10 中添加的排除项,以保留一些端口供我们使用。
我在 windows 10 中启用了 hyper-v。 当我检查排除的端口时,我得到:
C:\> netsh interface ipv4 show excludedportrange protocol=tcp
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
5357 5357
9800 9800
9801 9801
49671 49770
49871 49970
50000 50059 *
61117 61216
61220 61319
61902 62001
* - Administered port exclusions.
为什么 Hyper-V 保留这些端口?
管理端口排除(即范围 50000-50059)与其他端口排除有何不同?
例如,当我尝试在 golang 中使用 net.Listen() ping 所有这些端口时,除 50000-50059 returns 错误之外的所有端口:
listen tcp 127.0.0.1:9801: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
在 windows 10 中,有时我们会收到特定端口的错误:
Ports are not available: listen tcp 0.0.0.0:55555: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
当看到这个错误时,我们的第一直觉是我们需要的端口以某种方式被另一个应用程序使用。因此,如果我们检查正在使用的端口:
netstat -aon | find "55555"
但结果可能显示该端口尚未被使用。
那么问题可能是Windows保留了一些端口,它们是我们不能用于其他目的的排除端口。我们可以使用以下命令列出这些端口:
C:\Users\Xyz> netsh interface ipv4 show excludedportrange protocol=tcp
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
1031 1130
1131 1230
1231 1330
1331 1430
1431 1530
1561 1660
2363 2462
2463 2562
2563 2662
2663 2762
2763 2862
2863 2962
5357 5357
50000 50099 *
55500 55599
* - Administered port exclusions.
为什么 windows 保留这些端口?
- 这些端口可能由于已识别的病毒/恶意软件而被 Microsoft 阻止 activity。
- 我们在 windows 更新后遇到了这种情况。然后我们安装了下一个更新并重新启动了机器。这次范围发生了变化,我们的端口可用了。
- 有时是启用的 Hyper-V 功能(我们为 docker-for-windows 安装启用它)会执行此操作。
可能还有其他原因。
但是如果我们尝试使用以下命令删除端口范围排除(即使作为管理员),它会 return 一个错误,指出它没有权限。
netsh int ipv4 delete excludedportrange protocol=tcp startport=55500 numberofports=100
Hyper-V 引入的端口排除
如果是Hyper-V引入的端口排除,我们最终有两种可能的解决方案(可能还有其他):
更改我们尝试使用的端口。新端口应该不属于排除项。
禁用Hyper-V,保留一个端口范围供我们使用,然后再次启用Hyper-V。
第二个解决方案的步骤如下:
1.禁用 Hyper-V
方法 1 - Windows 特征工具:
在控制面板 -> select 程序和功能 -> Select 'Turn Windows features on or off' -> 取消选中 Hyper-V -> 应用
方法 2 - 通过 Powershell:
打开 Powershell(以管理员身份)并运行命令:
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
方法 3 - 通过命令提示符:
打开命令提示符(以管理员身份)和运行命令:
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
之后需要重新启动系统。
2。保留你想要的端口(范围),这样 hyper-v 就不会保留它了。
重启后,如果我们尝试列出端口排除项,我们可以看到现在有些范围不存在(尤其是我们想要的范围)。现在保留我们需要的端口范围:
netsh int ipv4 add excludedportrange protocol=tcp startport=55500 numberofports=100
3。重新启用 Hyper-V
您也可以使用上面提到的所有三种方法来启用该功能。 例如,显示一个带有 dism:
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
这也需要重新启动系统。
当您的系统恢复后,尝试再次列出端口排除项。
这里发生的是指定的端口范围被添加到 管理的端口排除项。这意味着我们将其保留用于我们的目的。
这样做之后,Hyper-V 足够聪明,可以在我们预先保留的范围内启动它自己的保留范围(注意结果中低于 55500–55599 的范围是受保护的):
C:\Users\Xyz> netsh interface ipv4 show excludedportrange protocol=tcp
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
1031 1130
1131 1230
1231 1330
1331 1430
1431 1530
1561 1660
2363 2462
2463 2562
2563 2662
2663 2762
2763 2862
2863 2962
5357 5357
50000 50099 *
55500 55599 *
* - Administered port exclusions.
现在您将能够成功绑定到该范围内的端口。
Windows 更新后引入的端口排除
有时,在 Windows 更新后,突然无法使用特定端口,并且在使用 netstat
命令检查端口使用情况时没有列出任何内容。
最重要的是,您也没有启用 Hyper-V!
在这种情况下,您可以尝试以下 2 个解决方法:
(不确定是否适合所有人,但您可以尝试一下!)
选项 1:
检查排除的端口范围
netsh interface ipv4 show excludedportrange protocol=tcp
例如,考虑端口范围
55485-55584
(包括我们需要的端口:55555
)在 windows 更新后被排除在外。启用 Hyper-V
再次检查排除的端口范围:
netsh interface ipv4 show excludedportrange protocol=tcp
您可能仍会看到我们所需的端口被排除在外。但这一次,排除范围可能有所不同,例如
55506-555605
,这可能是 Hyper-V 引入的覆盖(不确定这是否是实际原因)。禁用 Hyper-V
再次检查排除的端口范围:
netsh interface ipv4 show excludedportrange protocol=tcp
这一次,如果您发现您需要的端口不在排除范围内,请继续执行下一步保留您的端口。
预留我们需要的端口范围:
netsh int ipv4 add excludedportrange protocol=tcp startport=55500 numberofports=100
此范围将被列为管理端口排除项。
现在尝试使用您需要的端口。
选项 2:
由于问题通常是由 Windows NAT 驱动程序 (winnat) 引起的,停止并重新启动该服务可能会解决问题。
注意!:停止 winnat 服务可能会断开您的网络。
检查排除的端口范围
netsh interface ipv4 show excludedportrange protocol=tcp
停止winnat服务:
net stop winnat
检查排除的端口范围发生了什么:
netsh interface ipv4 show excludedportrange protocol=tcp
预留端口范围禁止动态预留您需要的端口:
netsh int ipv4 add excludedportrange protocol=tcp startport=55500 numberofports=100
启动winnat服务:
net start winnat
检查排除的端口范围
netsh interface ipv4 show excludedportrange protocol=tcp
您可以看到有端口排除,但您的端口被列为 Administered port exclusion。
现在尝试使用您需要的端口。
什么是管理端口排除项?
所以基本上,管理的端口排除项 是我们可以在 Windows10 中添加的排除项,以保留一些端口供我们使用。