最近,在我的开发机器上,一些 TCP 端口开始无法供应用程序使用,并出现错误 10013。
在网上搜索我认为这个解释这里最有可能的是:这些端口被某些应用程序在管理上排除在外,很可能被保留供自己使用。
事实上,我可以用命令查看排除端口的范围
netsh int ipv4 show excludedportrange protocol=tcp
我也可以尝试删除一些排除的范围,但大多数情况下 netsh 拒绝这样做,显示错误“访问被拒绝”(即使在管理 shell 内)或“未找到元素”。
所以,现在我想尝试另一种方法:找出哪些应用程序排除了这些 TCP 端口范围。
虽然这是一台公司机器,但它不属于 Windows 域(而且它现在确实在我家里,因为疫情我在家工作)。
所以,问题是:我如何才能找到哪些应用程序正在保留这些 TCP 端口范围?
更新
Stackoverflow 上有很多关于此的问题(我认为这里不是讨论此问题的合适地方,但无论如何)。
我在某个地方找到了一个对我有用的解决方案:
net start winnat
net stop winnat
它立即起作用,甚至不需要重新启动。
Windows 10 Pro 20H2 19042.804 Windows 功能体验包 120.2212.551.0
编辑。
刚才netsh的输出:
$ netsh int ipv4 show excludedportrange tcp
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
20092 20191
20192 20291
20292 20391
20392 20491
20492 20591
20592 20691
20792 20891
20892 20991
20992 21091
21092 21191
21192 21291
21292 21391
21393 21492
21493 21592
21593 21692
21693 21792
21793 21892
21893 21992
22033 22132
22133 22232
22233 22332
22637 22736
22737 22836
22837 22936
22937 23036
23037 23136
23137 23236
23237 23336
23360 23459
23460 23559
23560 23659
23660 23759
* - Administered port exclusions.
答案1
这通常是由 Hyper-V、Docker 或 WSL 引起的。尝试重新启动winnat
:
net stop winnat
net start winnat
还根据docker/for-win#3171 (评论)。当您的计算机上的动态端口范围未更新到新的起始端口时,就会发生这种情况。您可以使用以下方法修复此问题:
netsh int ipv[46] set dynamic tcp start=49152 num=16384