在 Windows 10 动态端口范围内保留端口

在 Windows 10 动态端口范围内保留端口

我想设置一个 20000 到 29999(含)之间的 Windows 10 动态端口范围,因此端口范围为 10000 个。

为此,我运行以下命令:

netsh int ipv4 set dynamicport tcp start=20000 num=10000
netsh int ipv4 set dynamicport udp start=20000 num=10000
netsh int ipv6 set dynamicport tcp start=20000 num=10000
netsh int ipv6 set dynamicport udp start=20000 num=10000

接下来,使用以下示例命令查询范围:

netsh int ipv4 show dynamicport tcp

...产生以下结果:

Protocol tcp Dynamic Port Range
-------------------------------
Start Port      : 20000
Number of Ports : 10000

在我看来这是正确的。

现在假设我想保留 Windows 动态端口范围内的某些端口,比如 21000-21050,然后我运行以下命令:

reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ /v ReservedPorts /t REG_MULTI_SZ /d 21000-21050 /f

随后,重新查询 Windows 动态端口范围会产生以下结果:

Protocol tcp Dynamic Port Range
-------------------------------
Start Port      : 20000
Number of Ports : 10000

这是预期的行为吗?或者结果表应该稍微分散一些,以反映处于动态范围中间的端口预留,例如:

Protocol tcp Dynamic Port Range
-------------------------------
Start Port      : 20000, 21051 
Number of Ports : 1000 , 8950

我的端口预留命令已使用 ReservedPorts 设置更新了注册表,因此我认为这都是正确的行为。

在系统部署之前还有其他方法可以测试这个过程吗?

谢谢

答案1

Windows Vista 及更高版本不支持该ReservedPorts注册表值。(来源

相反,您可以使用该netsh实用程序来实现相同的效果:

netsh int <ipv4|ipv6> Add excludedportrange [protocol=]tcp|udp [startport=]<integer> [numberofports=]<integer> [[store=]active|persistent]

您还可以删除条目:

netsh int <ipv4|ipv6> delete excludedportrange [protocol=]tcp|udp [startport=]<integer> [numberofports=]<integer> [[store=]active|persistent]

...或者列出它们:

netsh int <ipv4|ipv6> show excludedportrange [protocol=]tcp|udp [[store=]active|persistent]

我怀疑这些都不会影响到产量netsh int <ipv4|ipv6> show dynamicport tcp

相关内容