即使没有其他应用程序正在监听,也无法打开端口

即使没有其他应用程序正在监听,也无法打开端口

我想在本地 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 接管了这些端口,为防止发生这种情况,请执行以下操作:

  1. dism.exe /Online /Disable-Feature:Microsoft-Hyper-V(然后重新启动)
  2. netsh int ipv4 add excludedportrange protocol=tcp startport=<your port, mycase: 8888> numberofports=1
  3. dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All(然后重新启动)

原来的解决方案是这里

如果此后您仍然无法绑定到端口,请执行以下操作:

  • netsh http add iplisten 0.0.0.0对于 IPv4
  • netsh 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

相关内容