记录一次另类的端口占用错误

2021年9月24日更新:可以通过禁用暂时不需要使用的实体/虚拟网卡,减少Hyper-V同步生成的网卡,从而减少端口被占用的可能。换用Microsoft Store的微信也可能对解决此问题有所帮助。

错误描述

开启某软件时提示错误
An attempt was made to access a socket in a way forbidden by its access permissions

常规方法

  1. 查找占用该端口的程序
netstat -aon|findstr "被占用端口号"

返回如下
TCP 127.0.0.1:9809 0.0.0.0:0 LISTENING 11924
*最后一个数字是该程序PID

  1. 强制终止该程序即可
taskkill /pid 该程序PID -t -f

其他方法

*适用于netstat无返回的情况

原因分析

可能是Windows的Hyper-V虚拟机保留了该端口。
可通过如下命令查看

netsh interface ipv4 show excludedportrange protocol=tcp

将返回被保留的端口,如

协议 tcp 端口排除范围

开始端口    结束端口
----------    --------
      1131        1230
      9001        9001
     50000       50059     *

* - 管理的端口排除。

解决方案

  1. 临时禁用Hyper-V
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
  1. 重启后,请保留所需端口,以便Hyper-V不会将其占用
netsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1
  1. (可选)添加一个注册表项来防止Windows容器主机网络服务(HNS)保留端口,重启生效
reg add HKLM\SYSTEM\CurrentControlSet\Services\hns\State /v EnableExcludedPortRange /d 0 /f
  1. 重新启用Hyper-V
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

相关链接

posted @ 2020-04-18 20:15  海边星  阅读(648)  评论(0编辑  收藏  举报