![即使没有其他应用程序正在监听,也无法打开端口](https://linux22.com/image/1600019/%E5%8D%B3%E4%BD%BF%E6%B2%A1%E6%9C%89%E5%85%B6%E4%BB%96%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%AD%A3%E5%9C%A8%E7%9B%91%E5%90%AC%EF%BC%8C%E4%B9%9F%E6%97%A0%E6%B3%95%E6%89%93%E5%BC%80%E7%AB%AF%E5%8F%A3%20.png)
我想在本地 Windows 环境上打开端口 8888,但没有成功。或者我如何检查 Windows 事件日志以查看打开端口 8888 失败?
以下是所有以 8xxx 开头的监听端口的结果netstat -an | findstr :8
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING
TCP 0.0.0.0:808 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8001 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8002 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8003 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8004 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8005 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8006 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8007 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8008 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8009 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8010 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8011 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8012 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8013 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8014 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8015 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8081 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8082 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8083 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8084 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8088 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8089 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8090 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8443 0.0.0.0:0 LISTENING
TCP 127.0.0.1:8001 0.0.0.0:0 LISTENING
TCP 127.0.0.1:8183 0.0.0.0:0 LISTENING
TCP [::]:80 [::]:0 LISTENING
TCP [::]:8001 [::]:0 LISTENING
TCP [::]:8002 [::]:0 LISTENING
TCP [::]:8003 [::]:0 LISTENING
TCP [::]:8004 [::]:0 LISTENING
TCP [::]:8005 [::]:0 LISTENING
TCP [::]:8006 [::]:0 LISTENING
TCP [::]:8007 [::]:0 LISTENING
TCP [::]:8008 [::]:0 LISTENING
TCP [::]:8009 [::]:0 LISTENING
TCP [::]:8010 [::]:0 LISTENING
TCP [::]:8011 [::]:0 LISTENING
TCP [::]:8012 [::]:0 LISTENING
TCP [::]:8013 [::]:0 LISTENING
TCP [::]:8014 [::]:0 LISTENING
TCP [::]:8015 [::]:0 LISTENING
TCP [::]:8080 [::]:0 LISTENING
TCP [::]:8081 [::]:0 LISTENING
TCP [::]:8082 [::]:0 LISTENING
TCP [::]:8083 [::]:0 LISTENING
TCP [::]:8084 [::]:0 LISTENING
TCP [::]:8088 [::]:0 LISTENING
TCP [::]:8089 [::]:0 LISTENING
TCP [::]:8090 [::]:0 LISTENING
TCP [::]:8443 [::]:0 LISTENING
以下是系统协议端口排除范围netsh interface ipv4 show excludedportrange protocol=tcp
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
80 80
1657 1756
1757 1856
1857 1956
1957 2056
2281 2380
2381 2480
2481 2580
2581 2680
3069 3168
3169 3268
3390 3489
3490 3589
4111 4210
4211 4310
4311 4410
4444 4543
5433 5532
5556 5655
5656 5755
5756 5855
6868 6967
7006 7105
7106 7205
7206 7305
8844 8943
9192 9291
9292 9391
9392 9491
10843 10942
10943 11042
11043 11142
11143 11242
12080 12179
12180 12279
12280 12379
12380 12479
14208 14307
14308 14407
14408 14507
14508 14607
16642 16741
16742 16841
16842 16941
16942 17041
19174 19273
19274 19373
19374 19473
19474 19573
21903 22002
22003 22102
22103 22202
22203 22302
24835 24934
24935 25034
25035 25134
25135 25234
50000 50059 *
* - Administered port exclusions.
答案1
原因是 Hyper-V 接管了这些端口,为防止发生这种情况,请执行以下操作:
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
(然后重新启动)netsh int ipv4 add excludedportrange protocol=tcp startport=<your port, mycase: 8888> numberofports=1
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
(然后重新启动)
原来的解决方案是这里。
如果此后您仍然无法绑定到端口,请执行以下操作:
netsh http add iplisten 0.0.0.0
对于 IPv4netsh http add iplisten ::
对于 IPv6
更多信息这里。
答案2
这@TheAnhNguyen 的回答(与 Hyper-V 相关)是导致该问题的一个潜在原因。
但是,对我来说,问题有所不同。就我而言,这是因为 Windows 启动时将其“动态端口”配置为从端口 1025 开始,到端口 5000 结束。因此,当 Docker Desktop 启动时,它会在 1025-5000 端口范围内保留其端口,这(有时!)与我自己的程序配置为保留/使用的端口冲突。(用于从我的本地 Kubernetes 集群到本地主机的端口转发)
要查看动态端口是否设置不正确,您可以运行:
netsh int ipv4 show dynamicport tcp
如果您看到Start Port: 1025
,则说明动态端口范围配置错误。要修复此问题,您需要将其设置为更合理的范围 - 避免使用 <10k 端口。(这通常是开发人员放置自己的应用程序的地方)
将其设置为推荐范围:(如果您的问题与 ipv6 有关,请相应地调整命令)
netsh int ipv4 set dynamic tcp start=49152 num=16384
欲了解更多信息,请参见:https://stackoverflow.com/a/62359555/2441655