许多排除的端口范围如何删除 - hyper-v 已禁用

der*_*itz 20 networking windows-10

自 Windows 2004 更新以来,我一直在与许多无法绑定到某些端口的程序和工具作斗争。我偶然发现的一些研究: netsh interface ipv4 show excludedportrange protocol=tcp

就我而言,它产生了(在禁用 hyper-v 后,我切换到基于 WSL2 的 Docker):

Startport     Endport
----------    --------
  1131        1230
  1231        1330
  1331        1430
  1431        1530
  1735        1834
  1835        1934
  1943        2042
  2043        2142
  2143        2242
  2243        2342
  2343        2442
  2443        2542
  2543        2642
  2643        2742
  2743        2842
  2843        2942
  2943        3042
  3129        3228
  3229        3328
  3329        3428
  3429        3528
  3831        3930
  3931        4030
  4031        4130
  4131        4230
  4231        4330
  4531        4630
  4631        4730
  5241        5340
  5357        5357
  5458        5557
  5558        5657
  5658        5757
  6040        6139
  6140        6239
  6933        7032
  7033        7132
  7133        7232
  7233        7332
  7333        7432
  7633        7732
  7733        7832
  8001        8100
  8101        8200
  8201        8300
  8301        8400
  8401        8500
  8501        8600
 27972       28071
 28072       28171
 28172       28271
 28272       28371
 28572       28671
 28672       28771
 50000       50059     *
Run Code Online (Sandbox Code Playgroud)

目前,范围 1431 到 1530 阻止我运行我的 Oracle 数据库。但是每次重新启动后保留范围都会发生变化。

我试图删除一些范围, netsh int ipv4 delete excludedportrange protocol=tcp startport=1431 numberofports=100但它会产生access denied(在管理员 cmd 中)。

什么是保留这些范围以及如何控制它们?

ber*_*ers 27

我在这个 GitHub 评论中找到了答案:你可以试试

net stop winnat
Run Code Online (Sandbox Code Playgroud)

释放端口。这在 Windows 10 2004 中对您有用,在 Windows 10 20H2 中对我有用。

(在早期版本的 Windows 中,我使用以下方法之一成功,比较如何知道是什么阻止了我的套接字绑定到 localhost:50060-50959)。

net stop LanmanWorkstation
net stop WlanSvc
net stop WwanSvc
Run Code Online (Sandbox Code Playgroud)

虽然这可能会断开您的网络,但不要绝望。因为,如果上述方法之一适合您,您可以尝试以下一次以永久解决此问题:

netsh int ipv4 add excludedportrange protocol=tcp startport=50323 numberofports=1
Run Code Online (Sandbox Code Playgroud)

(使startport和适应numberofports您的需要 - 另外,ipv6如果需要,请考虑)。

这应该net start在相应的服务以及重新启动后仍然存在,因为您可以使用

netsh interface ipv4 show excludedportrange protocol=tcp
Run Code Online (Sandbox Code Playgroud)

如果这输出

Protocol tcp Port Exclusion Ranges

Start Port    End Port
----------    --------
[...]
     50145       50244
     50323       50323     *
     50324       50423
[...]
* - Administered port exclusions.
Run Code Online (Sandbox Code Playgroud)

你应该会好一会儿。


Ven*_*ryx 8

@yoshpe 的回答(与 Hyper-V 有关)是该问题的潜在原因之一。

然而,这个问题对我来说是不同的。就我而言,这是因为 Windows 启动时将其“动态端口”配置为从端口 1025 开始并在端口 5000 结束。因此,当 Docker Desktop 启动时,它将保留 1025-5000 端口范围内的端口,这(有时!)与我自己的程序配置为保留/使用的端口冲突。(用于从本地 Kubernetes 集群到本地主机的端口转发)

要查看动态端口设置是否不正确,可以运行:

netsh int ipv4 show dynamicport tcp
Run Code Online (Sandbox Code Playgroud)

如果您看到Start Port: 1025,则动态端口范围配置错误。要修复它,您需要将其设置为更合理的范围 - 避免 <10k 端口。(这通常是开发人员放置自己的应用程序的地方)

将其设置为推荐范围:(如果您的问题与 ipv6 有关,则替换ipv4ipv6iirc)

netsh int ipv4 set dynamic tcp start=49152 num=16384
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅此处:/sf/answers/4365168881/