![在 Windows 10 动态端口范围内保留端口](https://linux22.com/image/1574901/%E5%9C%A8%20Windows%2010%20%E5%8A%A8%E6%80%81%E7%AB%AF%E5%8F%A3%E8%8C%83%E5%9B%B4%E5%86%85%E4%BF%9D%E7%95%99%E7%AB%AF%E5%8F%A3.png)
我想设置一个 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
。