记录一次另类的端口占用错误
2021年9月24日更新:可以通过禁用暂时不需要使用的实体/虚拟网卡,减少Hyper-V同步生成的网卡,从而减少端口被占用的可能。换用Microsoft Store的微信也可能对解决此问题有所帮助。
错误描述
开启某软件时提示错误
An attempt was made to access a socket in a way forbidden by its access permissions
常规方法
- 查找占用该端口的程序
netstat -aon|findstr "被占用端口号"
返回如下
TCP 127.0.0.1:9809 0.0.0.0:0 LISTENING 11924
*最后一个数字是该程序PID
- 强制终止该程序即可
taskkill /pid 该程序PID -t -f
其他方法
*适用于netstat无返回的情况
原因分析
可能是Windows的Hyper-V虚拟机保留了该端口。
可通过如下命令查看
netsh interface ipv4 show excludedportrange protocol=tcp
将返回被保留的端口,如
协议 tcp 端口排除范围
开始端口 结束端口
---------- --------
1131 1230
9001 9001
50000 50059 *
* - 管理的端口排除。
解决方案
- 临时禁用Hyper-V
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
- 重启后,请保留所需端口,以便Hyper-V不会将其占用
netsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1
- (可选)添加一个注册表项来防止Windows容器主机网络服务(HNS)保留端口,重启生效
reg add HKLM\SYSTEM\CurrentControlSet\Services\hns\State /v EnableExcludedPortRange /d 0 /f
- 重新启用Hyper-V
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
相关链接
- SQL Server - An attempt was made to access a socket in a way forbidden by its access permissions - Stack Overflow
- Unable to bind ports: Docker-for-Windows & Hyper-V excluding but not using important port ranges · Issue #3171 · docker/for-win · GitHub
- administered port exclusions | The 'almost not worth having' blog
本文来自博客园,作者:海边星,转载请注明原文链接:https://www.cnblogs.com/StarsbySea/p/Windows-ports-occupied.html